3. Redis哨兵功能和实现原理

哨兵的功能:

  1. 监控 Redis 主节点和从节点是否正常运行
  2. Redis 主节点出现故障时自动将从节点选举为主节点
  3. 为 Redis 提供高可用性解决方案
  4. 哨兵不仅会监测 Redis 主节点和从节点,互相之间也会监督

哨兵的实现原理:

哨兵进程启动的时候,哨兵会通过配置中的 Redis 主节点的名称、主节点的地址和主节点的端口号找出需要监控的节点,然后哨兵通过该节点会自动发现所有复制该节点的slave。

和主节点建立连接之后(两条链接)

  1. 会定时向主节点和从节点发送INFO命令
  2. 会向主节点和从节点的频道发送自己的信息
  3. 哨兵会向主节点、从节点和其他哨兵节点发送PING命令

发送INFO命令是为了获得当前节点的相关信息(运行ID和复制信息等),从而实现新节点的自动发现,发现从节点之后会跟从节点也建立两条链接。

之后哨兵发送自己的信息给主从节点的目的是为了让其他的哨兵发现自己的链接进而建立和哨兵之间的链接

发送PING命令是为了保证节点存活,如果未及时响应PING命令,则哨兵认为其已经下线了,如果该节点是主节点,则需要判断是否对其进行故障恢复,则会询问其他哨兵,如果认为其已经下线的哨兵达到了指定数量,则会选举一个领头哨兵来进行主节点故障恢复

选举领头哨兵:
  1. 发现主节点下线的哨兵A,向每个哨兵发送消息选举自己为领头
  2. 如果A没有选举过其他人,则A为领头
  3. 如果A发现半数quorum值得哨兵同意自己,则成为领头
  4. 当多个哨兵同时参与选举,则会在一个随即时间内再次选举
哨兵选举主节点:
  1. 在所有的在线的从节点中选举一个优先级最高的从节点,优先级通过 slave-priority设置
  2. 有多个选择复制命令偏移量最大的一个
  3. 如果都一样选择运行ID最小的一个

你可能感兴趣的:(Redis学习笔记)