Return redis 哨兵故障转移后的老主人
Return old master after redis sentinel failover
我有 3 个 redis sentinel 盒子设置:
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
我的master死后,sentinel故障转移到R2。
我将 M1 恢复在线(清除了一些磁盘 space),现在 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 slave优先级未指定,所以这意味着它是默认值100。
我的 R2 从优先级是 200,R2 是 300。这让我认为它应该轮换所有 3 个盒子,但在初始故障转移后它只轮换 R2 和 R3。
这对我来说像是一个哨兵错误
我不确定你为什么要这样做。 Redis 故障转移到 R2 并用作 master 现在应该可以像正常的 M1 实例一样完美地工作。如果不是这种情况,则您实际上没有正确使用 Sentinel 来实现高可用性。
您可以通过 SENTINEL failover R2
触发 手动故障转移 。它应该切换到 M1 或 R3。
我认为 kiddorails 的回答是正确的,但很可能你遇到了与我类似的问题,由于某种原因你的原始母版没有正确复制。
一旦我解决了我的复制问题,我就可以通过发出 SENTINEL FAILOVER mymaster
来循环我的主人。最初它只会在两个原始奴隶之间反弹,但现在我的原始主人正在正确复制,它正在循环所有 3 个。
所以我建议在故障转移后检查原始主服务器的复制。如果你确定它在工作,你也可以停止另一个从站,然后使用 SENTINEL FAILOVER mymaster
命令强制故障转移到原来的主站。如果失败,您知道复制一定有问题。
我有 3 个 redis sentinel 盒子设置:
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
我的master死后,sentinel故障转移到R2。 我将 M1 恢复在线(清除了一些磁盘 space),现在 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 slave优先级未指定,所以这意味着它是默认值100。 我的 R2 从优先级是 200,R2 是 300。这让我认为它应该轮换所有 3 个盒子,但在初始故障转移后它只轮换 R2 和 R3。
这对我来说像是一个哨兵错误
我不确定你为什么要这样做。 Redis 故障转移到 R2 并用作 master 现在应该可以像正常的 M1 实例一样完美地工作。如果不是这种情况,则您实际上没有正确使用 Sentinel 来实现高可用性。
您可以通过 SENTINEL failover R2
触发 手动故障转移 。它应该切换到 M1 或 R3。
我认为 kiddorails 的回答是正确的,但很可能你遇到了与我类似的问题,由于某种原因你的原始母版没有正确复制。
一旦我解决了我的复制问题,我就可以通过发出 SENTINEL FAILOVER mymaster
来循环我的主人。最初它只会在两个原始奴隶之间反弹,但现在我的原始主人正在正确复制,它正在循环所有 3 个。
所以我建议在故障转移后检查原始主服务器的复制。如果你确定它在工作,你也可以停止另一个从站,然后使用 SENTINEL FAILOVER mymaster
命令强制故障转移到原来的主站。如果失败,您知道复制一定有问题。