在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力受到单机的限制;哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
核心功能
- 监控:哨兵节点会不断地检查主节点和从节点的状态,包括它们的健康情况和配置信息。
- 自动故障转移:当主节点出现故障时,哨兵会自动选择一个从节点作为新的主节点,并更新其他从节点的配置,使它们指向新的主节点。这个过程是自动完成的,无需人工干预。
- 通知:哨兵可以将故障转移的结果通知给客户端,使客户端能够及时更新连接信息。
结构
哨兵模式由两部分组成:哨兵节点和数据节点。
- 哨兵节点:哨兵节点是特殊的Redis节点,它们不存储数据,而是专注于监控和故障转移。哨兵节点之间通过相互通信来共享信息和协调行动。
- 数据节点:数据节点包括主节点和从节点,它们存储实际的数据。主节点负责处理写操作,而从节点则复制主节点的数据,负责处理读操作。
故障转移机制
故障转移机制是哨兵模式的核心功能之一,它包括以下几个步骤:
- 主观下线:每个哨兵节点都会定期向主节点和从节点发送心跳检测(通常是PING命令)。如果主节点在一定时间范围内没有响应,哨兵节点就会认为主节点已经主观下线。
- 客观下线:当超过半数哨兵节点认为主节点主观下线时,主节点就会被标记为客观下线。这意味着主节点确实已经出现故障,需要进行故障转移。
- 选举Leader:在确认主节点客观下线后,哨兵节点会通过Raft算法(或其他选举算法)选举出一个Leader哨兵节点。Leader哨兵节点负责执行故障转移操作。
- 执行故障转移:Leader哨兵节点会选择一个合适的从节点作为新的主节点,并更新其他从节点的配置信息。同时,如果原主节点恢复,它会被重新配置为从节点,并指向新的主节点。
- 通知客户端:最后,哨兵会将故障转移的结果通知给客户端,使客户端能够更新连接信息并继续访问Redis服务。
主节点的选举
在选择新的主节点时,哨兵会遵循以下原则:
- 健康性:首先排除那些已经下线的从节点。
-
优先级:然后选择配置文件中优先级最高的从节点。优先级可以通过
replica-priority
配置项进行设置。 - 复制偏移量:如果多个从节点具有相同的优先级,哨兵会选择复制偏移量最大的从节点作为新的主节点。复制偏移量反映了从节点复制主节点数据的进度和完整性。
哨兵的启动
哨兵模式的启动依赖于主从模式的配置。因此,在配置哨兵模式之前,必须确保主从模式已经正确安装和配置。然后,可以通过启动哨兵节点来监控和保护Redis集群的高可用性。