Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。
而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,进行自动切换slave > master。
sentinel主要功能如下:
1、不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
2、如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
3、在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
一、部署方式
部署方式有两种,以下任意一种都可以,建议使用第一种,比较符合大家的习惯
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel
二、标准配置文件
除protected-mode外,所有的参数都可以使用默认值启动sentinel。
重要参数解析:
protected-mode : 保护模式;bind ip 和protected-mode至少有一个开放对外,其他服务器才能访问。虽然配置文件注释项设置为no,但是启动后会因为protected-mode=yes报错.需要将注释符号去掉
port:此Sentinel实例运行的端口
dir:工作目录,默认/tmp
sentinel monitor <master-name> <ip> <redis-port> <quorum>: 哨兵监控项,master-name主节点的别名,在codis集群里就是 "集群名-group" ;ip:port即主节点ip端口;quorum代表判断主节点失败至少需要多少个Sentinel节点节点同意,默认值2
sentinel down-after-milliseconds <master-name> <milliseconds>:每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,默认30000毫秒,即超过30s且没有回复,则判定不可达。为避免误判。可增大该值
sentinel parallel-syncs <master-name> <numreplicas>: 故障转移后,原来的从节点会向新的主节点发起复制操作,限制同时向新的主节点发起复制操作的从节点个数,默认值为1个
sentinel failover-timeout <master-name> <milliseconds>:故障转移超时时间,默认180000毫秒,即3分钟。
三、常用命令
1、redis-cli -p 26379 info 如同Redis-server info命令;返回# Server、# Clients、# CPU、# Stats、# Sentinel几个模块的信息,其中# Sentinel如下
除此之外还有官方文档提供的命令,如下图
2、redis-cli -p 26379 sentinel masters 获取sentinel监控别名实例的主节点信息
3、redis-cli -p 26379 sentinel master gtdba_test-3 获取sentinel所有的配置信息
4、redis-cli -p 26379 SENTINEL slaves gtdba_test-3获取sentinel监控别名实例的slave节点信息
5、redis-cli -p 26379 SENTINEL SENTINELS gtdba_test-1 获取sentinel集群别的sentinel信息
6、redis-cli -p 26379 SENTINEL get-master-addr-by-name gtdba_test-1 获取当前别名实例的主节点ip和端口
7、redis-cli -p 26379 sentinel reset "*gtdba_test*" 重置包含gtdba_test的主节点,清除相关信息
8、redis-cli -p 23679 sentinel failover gtdba_test-1 手动强制故障转移
9、redis-cli -p 23679 sentinel ckquorum gtdba_test-1 检查可用的sentinel个数
19、redis-cli -p 23679 sentinel flushconfig 将配置信息刷新到磁盘上。
四、故障转移实际操作,以一次debug sleep命令来看sentinel触发的failover全过程如下
1、本机sentinel节点确认6501无法返回心跳信息,触发Subjectively Down state状态,即本机sentinel主观认为6501节点故障
2、达到2/2多数确认,204主机6501节点不可用,触发Objectively Down state,即多数sentinel投票客观确认6501节点故障
3、开启新纪元(新时代)
4、尝试failover故障转移
5、为节点dcdb**(即204主机本机sentinel节点)发起sentinel leader故障转移投票
6、sentinel集群另外两个sentinel节点投票给204主机sentinel节点
7、已完成选举,sentinel leader节点可以执行failover
8、在当前故障的主节点的副本里选择合适的节点作为主节点
9、由于只有203:6501一个副本节点,故选择该节点作为备用主节点。
10、原有的从节点203:6501执行slaveof no one操作,并执行promoted操作,将203:6501提升为主节点
11、修改原有主节点的状态
12、故障转移已完成
13、切换主节点为新的master节点
14、其他slave节点(包括故障节点)与主节点重建主从关系
五、注意事项
down-after-milliseconds超时时间设置需要慎重考虑,太短容易误判导致主从重置。太长则延长业务不可用时间。
failover-timeout:故障转移超时时间也需要根据时间情况考虑是否延长或者缩短