问题描述
我们有一个3节点的Redis集群,其中Redis和哨兵在所有三个节点上运行。 节点之一是主节点,另外两个是副本节点。
在某些情况下,一个节点发生故障,在这些情况下,其中一个副本节点被提升为主节点而没有任何问题。
现在我们有一个用例,当两个节点出现故障时,我们希望将剩余的最后一个节点提升为主节点。我们不希望仲裁设置为1,因为这可能会导致一些不必要的故障转移。请提出可能的解决方案。
解决方法
假设您在3个节点中的每个节点上同时运行Sentinel和Redis进程,则您的部署只能处理单个节点的故障。 这是因为在两个节点发生故障之后,只有一个正在运行的Sentinel进程(如您所说)无法形成仲裁。
如果您需要支持2个并发节点故障,则需要增加群集的大小,并且最好将Sentinel节点与Redis节点分开。