Redis学习笔记 — Sentinel系统
一、Sentinel系统的工作内容
Sentinel系统是由一个或多个sentinel实例组成的Sentinel系统。sentinel实施Redis的高可用性解决方案。这个系统主要做的工作是监视多个主服务器以及从服务器的工作状态,当某个主服务器下线时,sentinel系统会进行故障转移操作,自动的将下线服务器的从服务器升级为新的主服务器。
二、sentinel与主从服务器之间的通信
1、sentinel向主从服务器创建两个异步的网络连接
(1)一个是命令连接,这个连接专门用于向主服务器发送命令,并接收命令回复。
(2)另一个是订阅连接,这个连接专门用于订阅主服务器的_sentinel_:hello频道。
2、sentinel获取主从服务器信息
sentinel默认会以每十秒一次的频率,通过命令连接向被监视的主服务器和从服务器发送INFO命令,并通过分析INFO命令的回复获取主服务器的当前信息。
sentinel分析主服务器INFO命令的回复信息可以获取到的信息包括:一是关于主服务器本身的信息,例如服务器的运行ID,以及role域记录的服务器角色; 二是获取关于主服务器属下所有的从服务器的信息。
3、sentinel接收来自主从服务器的频道信息
当sentinel与一个主服务器或者从服务器建立起订阅连接之后,sentinel会通过订阅连接,向服务器发送命令:SUBSCRIBE_sentinel_:hello 。
sentinel对_sentinel_:hello 频道的订阅会一直持续到sentinel与服务器的连接断开为止。
当有多个sentinel监视同一个服务器的时候,当一个sentinel通过订阅频道向主服务器发送信息时,那么所有订阅这个频道的sentinel都会收到这条消息。
(注意:sentinel之间只会创建命令连接,不会创建订阅连接。因为sentinel需要通过接收主服务器或者从服务器发来的频道信息来发现未知的新sentinel,所以才需要建立订阅连接,而已经相互知道的sentinel只要使用命令连接来进行通信就足够了。)
三、sentinel故障转移处理
1、sentinel检测主服务器的状态
sentinel在默认的情况下,以每秒一次的频率向所有和它建立连接的实例(主服务器、从服务器、其他sentinel)发送PING命令,并通过PING命令的回复来判断是否在线。当某个sentinel检测到某个某主服务器处于下线状态时,它会向监视这个主服务器的其他sentinel询问主服务器的状态,如果多数sentinel判定这个主服务器处于下线状态,那么sentinel就会将这个主服务器判定为下线状态。并对主服务执行故障转移操作。
2、故障转移操作
首先sentinel会选举出领头sentinel对已下线的主服务器执行故障转移操作。
故障转移操作包含三步:
(1)在已下线主服务器属下的所有从服务器里面挑选一个从服务器,并将其转换为主服务器。
(2)让已下线主服务器属下的所有从服务器改为复制新的主服务器。
(3)将已下线主服务器设置为新的主服务器的从服务器,当这个旧的主服务器重新上线时,它就会成为新的主服务器的从服务器。