文章目录
- 1. 哨兵
- 1.1 为什么使用哨兵
- 1.2 什么是哨兵
- 1.3 哨兵的作用
- 1.4 启用哨兵模式
- 1.5 哨兵工作原理
1. 哨兵
1.1 为什么使用哨兵
Redis 的主从复制模式,一旦主节点出现故障无法提供服务,需要人工介入手工将从节点调整为主节点,同时应用端还需要修改新的主节点地址,这种故障转移的方式对于很多应用场景是不能容忍的。正式由于这个问题,Redis 提供了 Sentinel(哨兵) 架构来解决这个问题。
1.2 什么是哨兵
- 哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 master并将所有slave连接到新的master。
- 注意
哨兵也是一台Redis服务器,只是不提供数据服务,只支持部分命令,通常哨兵配置数量为单数
1.3 哨兵的作用
- 监控
不断的检查master和slave是否正常运行。 master存活检测、master与slave运行情况检测- 通知
当被监控的服务器出现问题时,向其他(哨兵,客户端)发送通知。- 自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
1.4 启用哨兵模式
首先要有主从结构,关于主从复制的配置,可以看Redis 主从复制
- 配置哨兵
- Redis中哨兵的配置文件sentinel.conf
- port:哨兵服务器的端口号,一般指定为2主服务器端口号
- dir:存放哨兵数据的路径
- sentinel monitor mymaster 127.0.0.1 6379 2
哨兵监控的主服务器信息(地址和端口号),mymaster是自己给主服务器取的名字,最后一个数字决定了主服务器是否正常,如果2个哨兵投票主服务器不正常,那么主服务器就是不正常,通常为哨兵数量的一半加1- sentinel down-after-milliseconds mymaster 30000
指定哨兵在监控Redis服务时,判定服务器挂掉的时间周期,默认30秒 (30000),如果哨兵30秒内无法联系到主服务器,就认为主服务器关掉了,也是主从切换的启动条件之一- sentinel parallel-syncs mymaster 1
指定同时进行主从复制的slave数量,数值越大,要求网络资源越高,要求约 小,同步时间约长- sentinel failover-timeout mymaster 180000
指定出现故障后,故障切换的最大超时时间,超过该值,认定切换失败, 默认3分钟
可以自己创建一个sentinel.conf 文件来配置哨兵,一般以sentinel端口号.conf 命名
- 启动哨兵
redis-sentinel sentinel端口号.conf 使用自己的配置文件启动哨兵
1.5 哨兵工作原理
哨兵在进行主从切换过程中经历三个阶段
- 监控
- 通知
- 故障转移
- 监控阶段
监控阶段主要是同步各个节点的信息
- 获取各个sentinel的状态(是否在线),使用ping 指令
- 使用info指令获取master的状态,包括master的属性(runid、role:master)和master的各个slave的详细信息
- 使用info指令获取所有slave的状态(根据master中的slave信息),主要是slave的属性(runid、role:slave、master_host、master_port、offset、…)
- 注意
各个哨兵之间组成了一个小群体,可以互相通信,并且通过publish/subscribe 来保证信息是同步的
- 通知阶段
通知阶段主要是进行哨兵之间信息的维护,sentinel向master发送一个类似hello的信息,来判断master是否正常,然后把信息告诉其他哨兵,保证哨兵间的信息同步 - 故障转移阶段
当某一个哨兵向master发送消息,在sentinel down-after-milliseconds时间内得不到回应时,就认为master挂了,会将master标记为sdown状态(主观下线),然后发送一条指令将消息传递给其他哨兵,其他哨兵也向master发消息,如果有我们设置数量(sentinel monitor)的哨兵认为master挂了,将master标记为odown(客观下线),然后,哨兵就会投票选出某一个哨兵,来处理故障,这个哨兵选出一个salve作为新的master,其他slave切换master,原master作为slave故障回复后连接 。
- 哨兵主从切换总结