Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。 可喜的是Redis从2.8开始正式提供了Redis Sentinel(哨兵) 架构来解决这个问题。
1.哨兵模式介绍
Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA),其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作。
哨兵是redis集群架构中非常重要的一个组件,主要功能如下:
- 集群监控:负责监控redis master和slave进程是否正常工作
- 消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
- 故障转移:如果master node挂掉了,会自动转移到slave node上 4. 配置中心:如果故障转移发生了,通知client客户端新的master地址
2.哨兵进程的工作方式
2.1监控过程
- 每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
- 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-aftermilliseconds 选项所指定的值,则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。
- 如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。
- 当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。
- 在一般情况下, 每个Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务
器、Slave从服务器发送 INFO 命令。 - 当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进
程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒
一次。 - 若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下
线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。
2.2 sdown和odown - sdown和odown两种失败状态
- sdown是主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机
- odown是客观宕机,如果quorum数量的哨兵都觉得一个master宕机了,那么就是客观宕机
- sdown达成的条件:如果一个哨兵ping一个master,超过了is-master-down-after-milliseconds
指定的毫秒数之后,就主观认为master宕机 - odown达成的条件:如果一个哨兵在指定时间内,收到了quorum指定数量的其他哨兵也认为那个
master是sdown了,那么就认为是odown了,客观认为master宕机
2.3 quorum和majority - quorum:确认odown的最少的哨兵数量
- majority:授权进行主从切换的最少的哨兵数量
- 每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个哨兵来做
切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换 - 如果quorum < majority,比如5个哨兵,majority就是3,quorum设置为2,那么就3个哨兵授权
就可以执行切换,但是如果quorum >= majority,那么必须quorum数量的哨兵都授权,比如5个
哨兵,quorum是5,那么必须5个哨兵都同意授权,才能执行切换
2.4为什么哨兵至少3个节点
经典的是一主多从三哨兵
redis支持高并发 读 11万次/S 写8.7万次/S 从机多少个 每秒每增加10万并发 就增加一台从机
哨兵集群必须部署2个以上节点。如果哨兵集群仅仅部署了个2个哨兵实例,那么它的majority就是2(2 的majority=2,3的majority=2,5的majority=3,4的majority=2),如果其中一个哨兵宕机了,就无
法满足majority>=2这个条件,那么在master发生故障的时候也就无法进行主从切换。
1个哨兵 宕机了 就不能做主从切换了
2个哨兵 选举切换者 需要一半以上 2个的一半以上 2个 一个宕机了 做不了主从切换了
3个哨兵 一半以上是2个