Redis(七)—— 哨兵
1、简介
哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
2、作用
- 监控
- 不断的检查master和slave是否正常运行。 master存活检测、master与slave运行情况检测
- 通知(提醒)
- 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
- 自动故障转移
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
注意: 哨兵也是一台redis服务器,只是不提供数据服务 通常哨兵配置数量为单数
3、配置哨兵
4、工作原理
监控阶段
- 用于同步各个节点的状态信息
- 获取master的状态
- master属性
- runid
- role:master
- 各个slave的详细信息
- 获取所有slave的状态(根据master中的slave信息)
- slave属性
- runid
- role:slave
- master_host、master_port
- offset
- …
[
通知阶段
故障转移
确认master下线
- 当某个哨兵发现主服务器挂掉了,会将master中的SentinelRedistance中的master改为SRI_S_DOWN(主观下线),并通知其他哨兵,告诉他们发现master挂掉了。
- 其他哨兵在接收到该哨兵发送的信息后,也会尝试去连接master,如果超过半数(配置文件中设置的)确认master挂掉后,会将master中的SentinelRedistance中的master改为SRI_O_DOWN(客观下线)
推选哨兵进行处理
- 在确认master挂掉以后,会推选出一个哨兵来进行故障转移工作(由该哨兵来指定哪个slave来做新的master)。
- 筛选方式是哨兵互相发送消息,并且参与投票,票多者当选。
具体处理
- 由推选出来的哨兵对当前的slave进行筛选,筛选条件有:
- 服务器列表中挑选备选master
- 在线的
- 响应慢的
- 与原master断开时间久的
- 优先原则
- 发送指令( sentinel )
- 向新的master发送slaveof no one(断开与原master的连接)
- 向其他slave发送slaveof 新masterIP端口(让其他slave与新的master相连)
|