Redis - 哨兵(Sentinel)
哨兵是Reids的高可用性解决方案:由一个或多个哨兵实例组成的哨兵系统可以监视任意多个主服务器,以及这些主服务器属下的从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
- Sentinel只是一个运行在特殊模式下的Redis服务器,它使用了和普通模式不同的命令表。
- 哨兵会读入用户指定的配置文件,为每个要被监控的主服务器创建相应地实例结构,并创建连向主服务器的命令连接和订阅连接,其中命令连接用于向主服务器发送命令请求,而订阅连接用于接收指定频道的消息。
- 哨兵通过向主服务器发送INFO命令来获得主服务器属下所有从服务器的地址信息,并为这些从服务器创建相应地实例结构,以及连向这些从服务器的命令连接和订阅连接。
- 在一般情况下,哨兵已每十秒一次的频率向被监视的主服务器和从服务器发送INFO命令,当主服务器处于下线状态,或者哨兵正在对主服务器进行故障转移操作时,哨兵向从服务器发送INFO命令的频率会改为每秒一次。
- 对于监视同一个主服务器和从服务器的多个哨兵来说,它们会以每两秒一次的频率,通过向被监视服务器的sentinel:hello频道发送消息来向其他哨兵宣告自己的存在。
- 每个哨兵也会从sentinel:hello频道中接收其他哨兵发来的信息,并根据这些消息为其他的哨兵创建相应地实例结构,以及命令连接。
- 哨兵只会与主从服务器创建命令连接和订阅连接,哨兵和哨兵直接则只创建命令连接。
- 哨兵以每秒一次的频率向实例(包括主从服务器和其他哨兵)发送PING命令,并根据实例对PING命令的回复判断实例是否在线,当一个实例在指定的时长中连续没有回复时,哨兵将这个实例判断为主观下线。
- 当哨兵将一个主服务器判断为主观下线时,它会向同样这个主服务器的其他哨兵进行询问,看他们是否同意将这个主服务器设置主观下线状态。
- 当哨兵收集到足够多的主观下线投票之后,它会将主服务器判断为客观下线,并发起一次针对主服务的故障转移操作。
- 哨兵系统选举领头羊的方法是对Raft算法的领头选举方法的实现。
网友评论