哨兵Sentinel是Redis高可用的解决方案,通过监视任意多个主服务器和从服务器,使得被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级成新的主服务器,代替已下线的主服务器继续处理命令请求。
哨兵是一个运行在特殊模式下的Redis服务器。
多个哨兵通过对主服务器设定的down-after-milliseconds选项的值,来判断某个服务器是否主观下线,当多个哨兵都认为某个主服务器主观下线的时,哨兵就会将主服务器判定为客观下线,当一个主服务器被判断为客观下线的时,监视这个主服务器的各个哨兵会协商选出一个领头哨兵,对这个下线服务器进行故障转移。
对领头哨兵的选取采用先到先得的方式,每个源哨兵都会将自己的信息发送给目标哨兵,目标哨兵只会将第一个接收到的源哨兵作为自己的局部领头哨兵,当某个哨兵被半数以上的哨兵设置成了局部领头哨兵,则它就成为了领头哨兵。
故障转移就是重新选取主服务器的过程,需要在已下线主服务器下属的从服务器里挑选一个作为新的主服务器,并将剩余的所有从服务器(包括下线的主服务器)改为复制新的主服务器。
对于新的主服务器的挑选,需要按照一定的优先级:
- 新的主服务器必须是正常在线的
- 新的主服务器必须是最近成功进行通信的(保证5秒内回复过哨兵的INFO命令)
- 新的主服务器保存的数据是比较新的(与主服务器断开连接不能超过down-after-milliseconds * 10)
- 新的服务器复制偏移量要大
-
如果上述条件都一样,选择运行ID最小的
image.png
网友评论