redis 哨兵与集群中的服务器不同步

redis sentinel out of sync with servers in a cluster

我们有一个设置,其中包含多个 redis (2.8) 服务器(比如说 4 个)和同样多的 redis 哨兵。在每台机器启动时,我们通过命令行将 pre-select 机器设置为 master,其余所有机器作为它的 slave。哨兵都在监视这些机器。客户端首先连接到本地 sentinel 并检索 master 的 IP 地址,然后连接到那里。

此设置大部分时间都没有问题,但有时哨兵会与服务器不同步。如果我将机器命名为 A、B、C 和 D - 哨兵会认为 B 是主机,而 redis 服务器都连接到作为主机的 A。关闭 B 上的 Redis 服务器也无济于事。我不得不将其关闭并在 A 上手动 "Sentinel failover" 来解决问题。问题是 1. 是什么原因导致这种情况发生?解决此问题最简单快捷的方法是什么? 2. 什么是最好的配置 - 还有比这更好的配置吗?

你唯一应该设置主人的时间是第一次。一旦 sentinel 接管了复制管理,你应该让它去做。这包括重新启动。不要使用命令行来设置复制。让sentinel和redis来管理吧。这就是你遇到问题的原因——你告诉哨兵它是权威的,但你告诉 Redis 服务器忽略哨兵。

Sentinel 将状态存储在其配置文件中,因此当它重新启动时可以恢复上次配置。因此,即使在重新启动时,也让哨兵完成它的工作。

此外,如果您有 4 台服务器(具体而言,不是 "let's say"),您应该 运行 在 sentinel 中的监视器语句中的法定人数为三台。法定人数为两人时,您可以得到两个主人