redis系列-Sentiel哨兵工作原理

来源:互联网 发布:mac解压加密文件 编辑:程序博客网 时间:2024/06/05 11:19
1.sentiel哨兵
    Sentiel哨兵是redis高可用的解决方案,由一个或多个Sentiel实例组成的Sentiel系统可以监视任意多个主服务器以及这些主服务器属下的多有从服务器。在主服务器进入下线状态时自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已经下线的主服务器继续处理命令请求。

2.sentiel与主服务器关系
    sentiel会创建连向被监听的主服务器的网络连接,sentiel将成为主服务器的客户端,它可以向主服务器发送命令,并在恢复中获取相关信息。
sentiel与主服务器会创建两个链接:
(1)命令连接:专门用于向主服务器发送命令并接收命令回复,sentiel会10秒一次向主服务器发送INFO命令
(2)订阅连接:用于订阅主服务器_sentiel_:hello频道

3.选举sentiel leader
    当一个主服务器被客观下线的时候,监视这个主服务器下线的sentiel就会进行一次协商,选举出一个领头sentiel,并由leader sentiel进行故障转移。所有的sentiel都有资格成为领头sentiel。选举步骤如下:
(1)在一个配置纪元内,源sentiel向目标sentiel发送SENTIEL is-master-down-by-addr命令,命令中runid为源sentiel的运行ID,表示源sentiel要求目标sentiel将自己设置为局部头领
(2)目标sentiel接收到SENTIEL is-master-down-by-addr命令,采用先到先得的规则,将最先发送命令的sentiel设置为头领sentiel,并回复源sentiel,
回复中的leader_runid和leader_epoch参数记录了目标sentiel的头领sentiel运行id和配置纪元
(3)源sentiel接收到消息后会判断leader_epoch,leader_runid和自己是否相同,如果相同则目标sentiel将自己设置为头领sentiel。
(4)如果某个sentiel接收到半数以上的sentiel选举自己为头领sentiel,那么将设置这个sentiel为头领sentiel。
在一个配置纪元内智能产生一个头领sentiel,如果在一段时间内没有选举出一个头领sentiel,那么在一段时间之后将继续进行选举,知道选举出零头sentiel