哨兵模式
哨兵简介
哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
哨兵的作用
- 监控
- 不断的检查master和slave是否正常运行
- master存活检测、master与slave运行情况检测
- 通知(提醒)
- 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
- 自动故障转移
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到断的master,并告知客户端新的服务器地址
注意:
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到断的master,并告知客户端新的服务器地址
- 哨兵也是一台redis服务器,只是不提供数据服务
- 通常哨兵配置数量为单数(一般最少3个起)
哨兵结构搭建
- 配置一拖二的主从结构
- 配置三个哨兵(配置相同,端口不同)
- 启动哨兵
redis-sentinel sentinel-端口号.conf
例子:
- 开启多个会话窗口备用
- 复制sentinel.conf文件
cat sentinel.conf | grep -v "#" | grep -v "^$" > ./conf/sentinel-26379.conf
- 编辑sentinel-26379.conf
port 26379
dir "/root/redis-6.0.19/data"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
- 复制sentinel-26379.conf到sentinel-26380.conf和sentinel-26381.conf
sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
- 以同样的方法复制redis-6380.conf到redis-6381.conf,并且在6381文件内配置上主从复制
sed 's/6380/6381/g' redis-6380.conf > redis-6381.conf
6. 启动哨兵模式
redis-sentinel sentinel-端口号.conf
哨兵工作原理
主从切换
- 哨兵在进行主从切换过程中经历三个阶段
-
阶段一:监控(同步信息)
- 用于同步各个节点的状态信息
- 获取各个sentinel的状态(是否在线)
- 获取master的状态
- master属性
- runid
- role:master
- 各个slave的详细信息
- master属性
- 获取所有slave的状态(根据master中的slave信息)
- slave属性
- runid
- role:slave
- master_host、master_port
- offset
- ...
- slave属性
- 用于同步各个节点的状态信息
-
阶段二:通知(保持连通)
-
阶段三:故障转移(发现问题、竞选负责人、优选新master、新master上任,其他slave切换master,原master作为slave故障恢复后连接)
- 服务器列表中挑选备选master
- 在线的
- 响应慢的
- 与原master断开时间久的
- 优先原则
- 优先级
- offset
- runid
- 发送指令(sentinel)
- 向新的master发送slaveof no one
- 向其他slave发送slaveof新masterIP端口
- 服务器列表中挑选备选master