Redis哨兵故障转移后返回旧主机

时间:2018-07-05 15:45:52

标签: redis high-availability redis-sentinel

我有3个redis前哨设置:

 CLIENT (connects to S1)
          |
          ↓
       +----+
       | M1 | us-east-1
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+
us-east-2      us-west-2

M1 - Master
S1 - Sentinel 1
S2 - Sentinel 2
S3 - Sentinel 3
R2 - First slave (R=replica)
R3 - Second slave

我的主人去世后,哨兵将故障转移到R2。 我使M1重新联机(清除了一些磁盘空间),现在M1仍然运行并且很好,但是是R2的从属。是否有一种自动方式(或半自动方式)使M1再次成为主节点,使R2成为M1的从节点,并再次使我的流量使用M1作为主Redis实例?

基本上,我想恢复到故障转移之前的状态。

当前发生的情况是,它将R2选为主设备,并将其重新配置为:

CLIENT (connects to S1)
          |
          ↓
       +----+
       |[R2]| us-east-2
       | S2 |
       +----+
          |
+----+    |    +----+
|[M1]|----+----| R3 |
| S1 |         | S3 |
+----+         +----+
us-east-1      us-west-2

当我手动进行故障转移时,它将R3提升为主服务器。 (这是预料之中的)。

但是,当我再次手动进行故障转移时,它会提升R2,但我希望它会提升M1。

所有连续的故障转移都在R2和R2之间旋转(同时始终保持M1作为其中一个的从属)。

我的M1从属优先级未指定,因此这是默认值100。 我的R2从属优先级为200,R2为300。这使我认为它应该旋转所有三个框,但是在初始故障转移后,它仅旋转R2和R3。

对我来说,这似乎是一个前哨错误

2 个答案:

答案 0 :(得分:0)

我不确定为什么首先要这么做。 Redis故障转移到R2并以at作为主设备使用,现在应该可以正常作为M1实例正常工作。如果不是这种情况,则说明您实际上并未正确使用Sentinel来实现高可用性。

您可以仅通过SENTINEL failover R2触发手动故障转移。它应该切换到M1或R3。

答案 1 :(得分:0)

我认为kiddorails的答案是正确的,但很可能您遇到了与我类似的问题,由于某种原因,您的原始母版无法正确复制。 解决复制问题后,我可以通过发出SENTINEL FAILOVER mymaster来遍历所有母版。最初,它只是在两个原始从属服务器之间反弹,但是现在我的原始主控服务器正在正确复制,它会循环遍历所有3个。 因此,我建议您在故障转移后检查原始主服务器的复制。如果确定运行正常,则也可以停止另一个从站,然后使用SENTINEL FAILOVER mymaster命令强制将故障转移到原始主站。如果失败,则说明复制一定存在问题。