Sentinel是Redis的高可用性解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理请求命令。
当主服务器下线时长超过用户设定的下线时长上限时,Sentinel系统就会对master执行故障转移操作:
(1)首先,Sentinel系统会挑选master属下的其中一个从服务器,并将这个被选中的从服务器升级为新的master。
(2)之后,Sentinel系统会向master属下的所有从服务器发送新的复制命令,让他们成为新的主服务器的从服务器,当所有从服务器都开始复制新的主服务器时,故障转移操作完毕。
(3)另外,Sentinel还会继续监视已下线的master,并在它重新上线时,将它设置为新的主服务器的从服务器。
客观下线状态的判断条件
当认为主服务器已经进入下线状态的Sentinel的数量,超过Sentinel配置中设置的quorum参数的值,那么该Sentinel就会认为主服务器已经进入客观下线状态。比如说,如果Sentinel在启动时载入了以下配置:
sentinel monitor master 127.0.0.1 6379 2
那么包括当前Sentinel在内,只要总共有两个Sentinel认为主服务器已经进入下线状态,那么当前Sentinel就将主服务器判断为客观下线。又比如说,如果Sentinel在启动时载入了以下配置:
sentinel monitor master 127.0.0.1 6379 5
那么包括当前Sentinel在内,总共要有5个Sentinel都认为主服务器已经下线,当前Sentinel才会将主服务器判断为客观下线。
当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头Sentinel,并由领头Sentinel对下线主服务器执行故障转移操作。