第16章 Sentinel
监视一个或多个主服务器及其下属服务器,在主服务器故障时,降级主服务器并将某一从服务器选举为新服务器。
这里的Sentinel本质上只是一个运行在特殊模式下的Redis服务器。
16.1 启动并初始化Sentinel
使用命令redis-server启动Sentinel
1>初始化服务器
2>讲普通redis服务器代码转换为Sentinel专用代码
3>初始化Sentinel状态
4>根据给定的配置文件,初始化监视主服务器列表
5>创建与主服务器的网络连接
16.2 获取主服务器信息
每十秒向主服务器获取主服务器及从服务器名单信息
16.3 获取从服务器信息
每十秒向从服务器获取信息,主要信息为连接状态、优先级、偏移量
16.4 向主服务器和从服务器发送信息
每两秒向所有主、从服务器发送自身及主服务器相关信息
16.5 接收来自主服务器和从服务器频道信息
连接同一个服务器的sentinel共享频道信息
16.5.1 更新Sentinels字典
更新从redis服务器上获取的其他Sentinel信息
16.5.2 创建连向其他Sentinel的命令连接
订阅了同一个redis的全部Sentinel都会用命令连接通信
16.6 检测主观下线状态
每个Sentinel每秒向所连接的全部Sentinel、redis发送ping命令,在配置时间内未收到回复,则认为相应实例已下线
16.7 检测客观下线状态
当一个Sentinel认为主服务器已经主观下线了,会询问其他Sentinel是否认为该主服务器已下线,如果认为该主服务器已经下线的Sentinel服务数量超过配置值,会认为该主服务器已经客观下线了
16.8 选举领头Sentinel
1>每个Sentinel申请成为其他Sentinel的领头,先到先得
2>超过半数的Sentinel的领头为同一个时,选举完成,否则重新选举
3>由领头的Sentinel对下线的redis做故障转移
16.9 故障转移
16.9.1 选举出新的主服务器
原则是选择优先级高的,复制偏移量大的从服务器