我们有三个redis服务器设置如下:
Node1: Default Redis Master & Running Redis Sentinel Software
Node2: Redis Slave & Running Redis Sentinel Software
Node3: Redis Slave & Running Redis Sentinel Software
如果我转到node1并发出命令来停止redis-server(服务redis-server停止),那么sentinel会快速检测到Master上的redis已关闭并促使Node2或Node3成为Master(确切地说是什么)我们想要/期待)。
现在假设我回到了Node 1并重新启动它(服务redis-server启动)。如果我发出" redis-cli info | grep ^ role"我看到的是,在几秒钟(10-15秒)内,Node1仍然认为它是一个大师。
因此,我们最终会在短时间内获得双硕士学位。最后几秒后,哨兵将整理情况并将Node1降级为奴隶。但是,我认为拥有双Master(即使几秒钟)可能会导致数据完整性问题。
恢复期间发送给Node1的数据会发生什么变化,当它仍然认为它是Master时,然后被降级为slave。发送给它的数据是否会丢失?
有什么方法可以避免这种情况吗?是否有一个设置让redis-server不接受连接,直到sentinal告诉它天气为奴隶/主人?我们还能怎样处理这个问题?
由于 布拉德
答案 0 :(得分:0)
对于任何好奇我们如何解决这个问题的人。请参阅以下关于github的讨论:https://github.com/antirez/redis/issues/1813
基本上我们设置了一个xinetd http服务,它由一个bash shell脚本组成,用于查询sentinal并将状态报告给负载均衡器。