Redis Sentinel和fix slave配置:Redis节点被设置为两个主节点的从节点,但不应该设置

Redis Sentinel和fix slave配置:Redis节点被设置为两个主节点的从节点,但不应该设置,redis,redis-sentinel,Redis,Redis Sentinel,我正在尝试在大型redis车队中使用sentinel进行故障切换(12个sentinel,500多个碎片,每个碎片由一个主设备和一个从设备组成)。我遇到了一个非常奇怪的问题,我的哨兵反复向某些redis节点发出command+fix slave配置。我并没有注意到这种情况在小范围内发生,因为这是值得的 我注意到两个具体问题: +修复从属配置消息,如上所述 sentinel.conf显示某些奴隶有两个主人(他们应该只有一个主人) 处于起始状态的震源组有一个从节点XXX.XXX.XXX.177和一个

我正在尝试在大型redis车队中使用sentinel进行故障切换(12个sentinel,500多个碎片,每个碎片由一个主设备和一个从设备组成)。我遇到了一个非常奇怪的问题,我的哨兵反复向某些redis节点发出command+fix slave配置。我并没有注意到这种情况在小范围内发生,因为这是值得的

我注意到两个具体问题:

  • +修复从属配置消息,如上所述
  • sentinel.conf显示某些奴隶有两个主人(他们应该只有一个主人)
  • 处于起始状态的震源组有一个从节点XXX.XXX.XXX.177和一个主节点XXX.XXX.XXX.244(它们一起构成震源组中的碎片188)。在没有任何节点中断的情况下,从节点的主节点切换到XXX.XXX.XXX.96(shard 188的主节点),然后返回,然后再向前。这可以通过sshing进入从节点和主节点并检查redis cli信息来验证。所有Redis节点都以正确的配置启动。所有Sentinel节点在其Sentinel.conf中都具有正确的配置。当我在每一次从->主更改后查询它们时,每个哨兵都有完全相同的主列表

    在我的12个哨兵中,记录了以下内容。每分钟都会发送一条+修复从属配置消息:

    Sentinel #8: 20096:X 22 Oct 01:41:49.793 * +fix-slave-config slave XXX.XXX.XXX.177:6379 XXX.XXX.XXX.177 6379 @ shard-188 XXX.XXX.XXX.96 6379
    Sentinel #1: 9832:X 22 Oct 01:42:50.795 * +fix-slave-config slave XXX.XXX.XXX.177:6379 XXX.XXX.XXX.177 6379 @ shard-172 XXX.XXX.XXX.244 6379
    Sentinel #6: 20528:X 22 Oct 01:43:52.458 * +fix-slave-config slave XXX.XXX.XXX.177:6379 XXX.XXX.XXX.177 6379 @ shard-188 XXX.XXX.XXX.96 6379
    Sentinel #10: 20650:X 22 Oct 01:43:52.464 * +fix-slave-config slave XXX.XXX.XXX.177:6379 XXX.XXX.XXX.177 6379 @ shard-188 XXX.XXX.XXX.96 6379
    Sentinel #2: 20838:X 22 Oct 01:44:53.489 * +fix-slave-config slave XXX.XXX.XXX.177:6379 XXX.XXX.XXX.177 6379 @ shard-172 XXX.XXX.XXX.244 6379
    
    这是SENTINEL MASTERS命令的输出。奇怪的是,shard-188有两个奴隶,而实际上它应该只有一个奴隶。当XXX.XXX.XXX.177位于shard-172和shard-182下时,输出看起来相同

    案例1)XXX.XXX.XXX.244是XXX.XXX.XXX.177的主人

    183)  1) "name"
          2) "shard-172"
          3) "ip"
          4) "XXX.XXX.XXX.244"
          5) "port"
          6) "6379"
          7) "runid"
          8) "ca02da1f0002a25a880e6765aed306b1857ae2f7"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "14"
         17) "last-ping-reply"
         18) "14"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5636"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17154406"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "1"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    72)  1) "name"
          2) "shard-188"
          3) "ip"
          4) "XXX.XXX.XXX.96"
          5) "port"
          6) "6379"
          7) "runid"
          8) "95cd3a457ef71fc91ff1a1c5a6d5d4496b266167"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "927"
         17) "last-ping-reply"
         18) "927"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5333"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17154312"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "2"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    
    79)  1) "name"
          2) "shard-172"
          3) "ip"
          4) "XXX.XXX.XXX.244"
          5) "port"
          6) "6379"
          7) "runid"
          8) "ca02da1f0002a25a880e6765aed306b1857ae2f7"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "1012"
         17) "last-ping-reply"
         18) "1012"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "1261"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17059720"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "1"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    273)  1) "name"
          2) "shard-188"
          3) "ip"
          4) "XXX.XXX.XXX.96"
          5) "port"
          6) "6379"
          7) "runid"
          8) "95cd3a457ef71fc91ff1a1c5a6d5d4496b266167"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "886"
         17) "last-ping-reply"
         18) "886"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5762"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17059758"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "2"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    
    案例2)XXX.XXX.XXX.96是XXX.XXX.XXX.177的主人

    183)  1) "name"
          2) "shard-172"
          3) "ip"
          4) "XXX.XXX.XXX.244"
          5) "port"
          6) "6379"
          7) "runid"
          8) "ca02da1f0002a25a880e6765aed306b1857ae2f7"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "14"
         17) "last-ping-reply"
         18) "14"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5636"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17154406"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "1"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    72)  1) "name"
          2) "shard-188"
          3) "ip"
          4) "XXX.XXX.XXX.96"
          5) "port"
          6) "6379"
          7) "runid"
          8) "95cd3a457ef71fc91ff1a1c5a6d5d4496b266167"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "927"
         17) "last-ping-reply"
         18) "927"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5333"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17154312"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "2"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    
    79)  1) "name"
          2) "shard-172"
          3) "ip"
          4) "XXX.XXX.XXX.244"
          5) "port"
          6) "6379"
          7) "runid"
          8) "ca02da1f0002a25a880e6765aed306b1857ae2f7"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "1012"
         17) "last-ping-reply"
         18) "1012"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "1261"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17059720"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "1"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    273)  1) "name"
          2) "shard-188"
          3) "ip"
          4) "XXX.XXX.XXX.96"
          5) "port"
          6) "6379"
          7) "runid"
          8) "95cd3a457ef71fc91ff1a1c5a6d5d4496b266167"
          9) "flags"
         10) "master"
         11) "pending-commands"
         12) "0"
         13) "last-ping-sent"
         14) "0"
         15) "last-ok-ping-reply"
         16) "886"
         17) "last-ping-reply"
         18) "886"
         19) "down-after-milliseconds"
         20) "30000"
         21) "info-refresh"
         22) "5762"
         23) "role-reported"
         24) "master"
         25) "role-reported-time"
         26) "17059758"
         27) "config-epoch"
         28) "0"
         29) "num-slaves"
         30) "2"
         31) "num-other-sentinels"
         32) "12"
         33) "quorum"
         34) "7"
         35) "failover-timeout"
         36) "60000"
         37) "parallel-syncs"
         38) "1"
    
    每个sentinel的起始sentinel.conf是

    maxclients 20000
    loglevel notice
    logfile "/home/redis/logs/sentinel.log"
    sentinel monitor shard-172 redis-b-172  7
    sentinel down-after-milliseconds shard-172 30000
    sentinel failover-timeout shard-172 60000
    sentinel parallel-syncs shard-172 1
    ....
    sentinel monitor shard-188 redis-b-188  7
    sentinel down-after-milliseconds shard-188 30000
    sentinel failover-timeout shard-188 60000
    sentinel parallel-syncs shard-188 1
    
    以下是几分钟后生成的sentinel.conf(适用于所有sentinel)——请注意以下两个从属项:

    sentinel monitor shard-172 XXX.XXX.XXX.244 6379 7
    sentinel failover-timeout shard-172 60000
    sentinel config-epoch shard-172 0
    sentinel leader-epoch shard-172 0
    sentinel known-slave shard-172 XXX.XXX.XXX.177 6379 <--- True slave of shard-172
    sentinel known-sentinel shard-172 ...
    ...
    sentinel monitor shard-188 XXX.XXX.XXX.96 6379 7
    sentinel failover-timeout shard-188 60000
    sentinel config-epoch shard-188 0
    sentinel leader-epoch shard-188 0
    sentinel known-slave shard-188 XXX.XXX.XXX.194 6379 <--- True slave of shard-188
    sentinel known-slave shard-188 XXX.XXX.XXX.177 6379
    sentinel known-sentinel shard-188 ... 
    
    sentinel monitor shard-172 XXX.XXX.XXX.244 6379 7
    sentinel故障切换超时碎片-172 60000
    哨兵形态纪元碎片-172 0
    哨兵首领纪元碎片-1720
    哨兵已知的奴隶碎片-172 XXX.XXX.XXX.177 6379这就是我所说的“蚂蚁问题”:你有两个(或更多)豆荚(主+从)混合在一起。当您显示您的一个吊舱有多个从机时,您会指出这一点

    具体而言:

    这是SENTINEL MASTERS命令的输出。奇怪的事 shard-188有两个奴隶,而实际上它应该只有一个奴隶

    您需要做的是:

  • 通过
    sentinel Remove shard NNN
  • 把那些奴隶在里面的豆荚拿下来
  • 正确配置它们(正确的
    slaveof
    命令/配置)
  • 让他们重新上线
  • 确保它们各自只有一个正确的从机
  • 通过
    sentinel监视器将它们添加回sentinel…
  • 现在,从技术上讲,您可以使用
    sentinel reset
    命令,但您将面临潜在的时间问题,因此从sentinel中删除它们是确定的射击路线。您也可以选择让主/从机处于运行状态,只需适当地重新配置从机即可。如果您选择该路线,请等待几分钟,并在进入步骤6之前检查从属列表