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 命令强制故障转移到原来的主站。如果失败,您知道复制一定有问题。