Redis哨兵机制是通过在独立的哨兵节点上运行特定的哨兵进程来实现的。这些哨兵进程监控主从节点的状态,并在发现故障时自动完成故障发现和转移,并通知应用方,实现高可用性。

以下是哨兵机制的工作原理:

1. 哨兵选举:

在启动时,每个哨兵节点会执行选举过程,其中一个哨兵节点被选为领导者(leader),负责协调其他哨兵节点。

a. 选举过程:
  • 每个在线的哨兵节点都可以成为领导者,每个哨兵节点会向其它哨兵发is-master-down-by-addr命令,征求判断并要求将自己设置为领导者;
  • 当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;
  • 如果哨兵发现自己在选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举。

2. 监控主从节点:

哨兵节点通过发送命令周期性地检查主从节点的健康状态,包括主节点是否在线、从节点是否同步等。如果哨兵节点发现主节点不可用,它会触发一次故障转移。

3. 故障转移:

一旦主节点被判定为不可用,哨兵节点会执行故障转移操作。它会从当前的从节点中选出一个新的主节点,并将其他从节点切换到新的主节点。这样,系统可以继续提供服务而无需人工介入。

a. 故障转移过程:
    • 由Sentinel节点定期监控发现主节点是否出现了故障: sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了。
    • 确认主节点:
      • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点
      • 选择从节点优先级最高的
      • 选择复制偏移量最大,此指复制最完整的从节点

当主节点出现故障, 由领导者负责处理主节点的故障转移。

4. 客户端重定向:

哨兵节点会通知客户端新的主节点的位置,使其能够与新的主节点建立连接并发送请求。这确保了客户端可以无缝切换到新的主节点,继续进行操作。

此外,哨兵节点还负责监控从节点的状态。如果从节点出现故障,哨兵节点可以将其下线,并在从节点恢复正常后重新将其加入集群。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐