第16章 Sentinel
sentinel(哨兵、哨岗)是redis的高可用性解决方案:由一个或多个sentinel实例组成的sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态是,自动将从服务器升级为新的主服务器,然后由新的主服务器替已下线的主服务器继续处理命令请求。
16.1 启动并初始化sentinel
当一个sentinel启动时,它需要执行以下步骤:
- 初始化服务器
- 将普通redis服务器使用的代码替换成sentinel专用代码
- 初始化sentinel状态
- 根据给定的配置文件,初始化sentinel的监视主服务器列表
- 创建连接向主服务器的网络连接
16.2 获取主服务器信息
sentinel默认会以每10秒一次的频率,通过命令连接向被监视的主服务器发送info命令,并通过分析info命令的回复来获取主服务器的当前信息。
16.3 获取从服务器信息
默认会以每10秒一次的频率通过命令连接向从服务器发送info命令,并获得从服务器的信息。
16.6 检查客主观下线状态
默认情况下,sentinel会以每秒一次的频率向所有与它创建了命令连接的实例发送ping命令,并通过实例返回ping命令回复来判断实例是否在线。
16.7 检查客观下线状态
当sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务是否真的下线了,它会同样监视这一主服务器的其他sentinel进行询问,看他们是否也认为主服务器已经进入下线状态。当sentinel从其他sentinel那里接收到足够数量的已下线判断之后,sentinel就会将从服务器判定为客观下线,并对主服务器执行故障转移操作。
16.8 选举领头sentinel
当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个sentinel会进行协商,选举出一个领头sentinel,并由领头sentinel对下线主服务器执行故障转移操作。
16.9 故障转移
在选举产生出领头sentinel之后,领头sentinel将对已下线的主服务器执行故障转移操作,该操作包括以下三个步骤:
- 1.在已下线主服务器属下的所有从服务器里面,挑选出一个从服务器,并将其转换为主服务器
- 2.让已下线主服务器属下的所有从服务器改为复制新的主服务器。
- 3.将已下线主服务器设置为新的主服务器的从服务器,当这个旧的服务器重新上线时,它就会成为新的主服务器的从服务器。