Redis-sentinel 哨兵介绍

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

二、标准配置文件

sentinel.conf

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:故障转移超时时间也需要根据时间情况考虑是否延长或者缩短

 

posted @ 2020-03-12 21:05  洲渚皓月掩映  阅读(291)  评论(0编辑  收藏  举报