启动sentinel
1)初始化服务器
2)将普通redis服务器使用的代码替换成sentinel专用代码
sentinel只是运行在特殊模式下的redis服务器,它使用了和普通模式不同的命令表,所以sentinel模式能够使用的命令和普通redis服务器使用的命令不同
3)初始化sentinel状态
4)初始化sentinel的监视 主服务列表
sentinel会读入用户指定的配置文件,为每个要被监视的主服务器创建相应的实例结构
5)创建连向主服务器的网络连接
对于每个被sentinel监视的主服务器来说,sentinel会创建两个连向主服务器的异步网络连接
1)命令连接,这个连接专门用于向主服务器发送命令,并接受命令回复。
2)订阅连接,这个连接专门用于订阅主服务器的_sentinel_:hello频道
6)sentinel会向主服务器发送INFO命令来获取主服务器下所有从服务器,
并为这些从服务器创建响应的实例结构,以及连向这些从服务器的命令连接和订阅连接
7)一般情况下,sentinel会每十秒一次的频率向被监视的主服务器和从服务器发送INFO命令
当主服务器处于下线状态,或者sentinel正在对主服务器进行故障转移操作时,sentinel向从服务器发送INFO命令的频率会改为每秒一次
8)监视同一个主服务器和从服务器的多个sentinel,它们会以两秒一次的频率,通过向被监视的服务器的_sentinel_:hello频道发送消息来向其他sentinel宣告自己的存在。
每个sentinel也会从_sentinel_:hello频道接受其他sentinel发来的消息,并根据这些信息来为其他sentinel创建相应的实例结构,以及命令连接
9)sentinel以每秒一次的频率向实例(主服务器、从服务器、sentinel)发送PING命令,判断实例是否在线。
当一个实例在指定的时长连续向sentinel发送无效回复时,sentinel会将这个实例判断为主观下线
10)当sentinel将一个主服务器判断为主观下线时,他会先向同样监视这个主服务器的其他sentinel进行询问,看他们是否同意这个主服务器已经进入主观下线状态。
11)当sentinel收集到足够多的主观下线投票时,他会将主服务器判断为客观下线,并发起一次针对主服务器的故障转移操作。
原文:https://www.cnblogs.com/zrzct/p/14157538.html