我有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。
对我来说,这似乎是一个前哨错误
答案 0 :(得分:0)
我不确定为什么首先要这么做。 Redis故障转移到R2并以at作为主设备使用,现在应该可以正常作为M1实例正常工作。如果不是这种情况,则说明您实际上并未正确使用Sentinel来实现高可用性。
您可以仅通过SENTINEL failover R2
触发手动故障转移。它应该切换到M1或R3。
答案 1 :(得分:0)
我认为kiddorails的答案是正确的,但很可能您遇到了与我类似的问题,由于某种原因,您的原始母版无法正确复制。
解决复制问题后,我可以通过发出SENTINEL FAILOVER mymaster
来遍历所有母版。最初,它只是在两个原始从属服务器之间反弹,但是现在我的原始主控服务器正在正确复制,它会循环遍历所有3个。
因此,我建议您在故障转移后检查原始主服务器的复制。如果确定运行正常,则也可以停止另一个从站,然后使用SENTINEL FAILOVER mymaster
命令强制将故障转移到原始主站。如果失败,则说明复制一定存在问题。