Redis从入门到深入-哨兵模式(23)
1. 哨兵简介-主机“宕机”
- 将宕机的master下线
- 找一个slave作为master
- 通知所有的slave连接新的master
- 启动新的master与slave
- 全量复制N+部分复制N
- 谁来确认master宕机了
- 找一个主?怎么找法?
- 修改配置后,原始的主恢复了怎么办?
2. 哨兵
哨兵(sentinel) 是一个分布式系统, 用于对主从结构中的每台服务器进行监控, 当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
- 哨兵的作用
-
监控
不断的检查master和slave是否正常运行。
master存活检测、master与slave运行情况检测 -
通知(提醒)
当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
-
自动故障转移
断开master与slave连接, 选取一个slave作为master, 将其他slave连接到新的master, 并告知客户端新的服
务器地址
注意:
哨兵也是一台redis服务器, 只是不提供数据服务
通常哨兵配置数量为单数
- 启用哨兵模式
- 配置一拖二的主从结构
- 配置三个哨兵(配置相同,端口不同)
- 启动哨兵
redis-sentinel sentinel-端口号.conf
3. 哨兵工作原理
- 阶段一:监控阶段
-
用于同步各个节点的状态信息
-
获取各个sentinel的状态(是否在线)
-
获取master的状态
- master属性
- run id
- role:master
- 各个slave的详细信息
- master属性
-
获取所有slave的状态(根据master中的slave信息)
-
slave属性
- run id
- role:slave
- master_host、master_port
- offset
- ......
-
-
- 阶段二:通知阶段
- 阶段三:故障转移阶段
-
服务器列表中挑选备选master
- 在线的
- 响应慢的
- 与原master断开时间久的
- 优先原则
- 优先级
- offset
- runid
-
发送指令(sentinel)
- 向新的master发送slave of no one
- 向其他slave发送slave of新master IP端口
-
监控
- 同步信息
-
通知
- 保持联通
-
故障转移
- 发现问题
- 竞选负责人
- 优选新master
- 新master上任, 其他slave切换master, 原master作为slave故障回复后连接