2024-05-02
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/9757456625

回答

Sentinel 发现 master 节点客观下线后,会自动开启故障转移流程,选择一个合适的 Slave 节点晋升为新的 Master。这个过程分为筛选备选节点和选择 Master 两个步骤。

一、使用如下条件筛选备选节点

  1. Slave节点状态处于S_DOWNO_DOWNDISCONNECTED的除外。
  2. 最近一次 ping 应答时间不超过5倍 ping 的间隔。假如 ping的间隔为 1 秒,则最近一次应答延迟不应超过 5 秒。
  3. info_refresh 应答不超过3倍 info_refresh 的间隔。
  4. Slave节点与Master节点失去联系的时间不能超过( (now - master->s_down_since_time) + (master->down_after_period * 10))。
  5. slave_priority不等于0。这个值在配置文件中指定,默认为 100。

二、从备选节点中按照如下顺序选择新的 Master

  1. 较低的slave_priority。优先级越低,越会被优先考虑选择为 Master。如果设置为 0,则该 slave 永远不会被选作 Master。
  2. 较大的replication offset(复制偏移量)。复制偏移量越大,数据越完整。
  3. 较小的runid。
  4. 如果以上条件都不足以区别出唯一的节点,则会看哪个Slave节点处理之前Master发送的命令多,就选谁。

一旦选定新的 Master,Sentinel 会对该 Slave 发送 SLAVEOF NO ONE 命令,让其成为新的 Master。