Redis哨兵(Sentinel)

92 阅读2分钟

Sentinel nodes 哨兵 image.png

logfile pidfile dir

哨兵的作用

1689754689650.png

哨兵一定要配集群,集群中的哨兵数最好是奇数,方便投票

quorum参数:确认master客观下线的最少的哨兵数量

网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,在sentinel集群环境下需要多个sentinel万互相沟通来确认某个master是否真的死了,quorum这个参数是进行客下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

image.png

主观下线 (Subjectively Down)

SDOWN(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件。

sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度(默认30秒)

image.png

客观下线 (Object Down)

quorum这个参数是进行客观下线的一个依据,法定人数/法定票数

意思是至少有quorum个sentinel认为这个master有故障才会对这master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因导致无法连接master,而此时master并没有出现故障,所以这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

兵王选举

如果主机达到了客观下线标准,则会在哨兵集群中选择一个领导者哨兵节点,并由这个领导者节点进行failover(故障迁移)

通过Raft算法选举出领导者哨兵

image.png

选出新master的过程

image.png

新主登基

  1. 先比较priority的值,最高的则成为master(如果priority分别卫10,25,100,应该选择priority为10的那台从机)
  2. 如果priority相等,则比较replication offset,哪台从机复制的内容多,则谁成为master
  3. 如果replication offset都一样,则比较Run Id(字典顺序,ASCII码) image.png

群臣俯首

image.png

旧主拜服

将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线后,它会成为新master的从节点

Sentinelleader会让原来的master降级为slave并恢复正常工作

failover(故障迁移)操作均有sentinel自己独立完成,无需人工干预

哨兵使用建议

image.png