概述
哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。哨兵本身也是一个独立运行的进程,它用来监控多个主从复制集群。下图为哨兵模式简易调用图:
优势
- 不定时监控Redis集群是否运行良好。
- 若Redis节点出现故障,可以及时同事其他进程,如客户端。
- 能够自动进程主备切换。
哨兵集群
很显然,哨兵进程也存在单点部署的问题,即哨兵进程挂掉后,导致整个集群不可用,故哨兵进程也应该支持集群部署。部署哨兵集群的优势有以下几点:
- 即便某些哨兵进程挂掉,依然可以进行主备切换。
- 客户端可以连接任意一个哨兵进程服务,以获取集群信息。
启动方式
- 第一种
redis-sentinel sentinel.conf - 第二种
redis-server sentinel.conf --sentinel
两种启动方式均需要指定哨兵配置文件,哨兵进程默认监听端口为26379。
哨兵配置解析
sentinel monitor mymaster 127.0.0.1 6379 2
- 1
表示监控的master节点名称为mymaster,ip为127.0.0.1,端口为6379,2的含义为大于等于2个哨兵进程认为master不可用时,才会真正认为master不可用,这个我们后续会详细叙述。
sentinel down-after-milliseconds mymaster 3000
- 1
哨兵通过PING来确认master是否存活,上述配置表示单个哨兵在3000毫秒内未收到PING的有效回复,则认为master已经不可用。
sentinel parallel-syncs mymaster 2
- 1
上述配置表示为,主备切换时可以最多有2个slave与master进行同步,这个数字越小,完成同步时间越长,数字越大,完成同步时间短,但是意味着更多slave处于不可用状态,所以应合理配置这个数值。
主备切换策略
如何判断节点不可用
哨兵向redis节点发送PING命令,若时间超过down-after-milliseconds未收到有效回复,则认为该节点不可用。
主观下线
简称SDOWN,指的是某个哨兵判断为节点不可用时(检测频率为1秒),将该节点标注为主观下线,节点范围适用于Master和Slave。
客观下线
简称ODOWN,指的是一定数量(通过配置指定)的哨兵判断为节点不可用时,将该节点标注为客观下线,节点范围只适用于Master。
若没有足够数量的哨兵同意Master已经下线,Master 的客观下线状态就会被移除。
若Master重新对哨兵的PING命令返回有效回复,Master的主观下线状态就会被解除。
切换条件
当master被标记为客观下线后,若哨兵群中大多数(majority)哨兵都认为master已经不可用,通过投票从剩余的slave选举一个作为新的master并修改相关配置。
上面说的“大多数哨兵”具体指的是多少哨兵呢,请看下面的对应关系。
2 个哨兵,majority=2
3 个哨兵,majority=2
4 个哨兵,majority=2
5 个哨兵,majority=3
那么如何从slave选举出一个作为master呢?请看如下参考条件:
- slave节点处于SDOWN,ODOWN,DISCONNECTED不会作为备选master节点。
- 最近一次ping应答时间超过5倍ping的间隔不会作为备选master节点。
- slave 跟 master 断开连接的时间已经超过了down-after-milliseconds的 10 倍+master 宕机的时长,不会作为备选master节点。
如果通过了上面的筛选,则按如下流程筛选master节点:
- 按照优先级排序,优先级数值(配置文件设置)越低,则备选master的优先级越高。
- 如果优先级相同,则取replica offset较大的slave作为master备选节点。
- 如果replica offset也相同,则选取run id较小的作为master备选节点。(每个redis实例,都会有一个runid,通常是一个40位的随机字符串,在redis启动时生成)
相关链接
Redis入门
CentOS-7下安装redis-2.8
Redis配置详解
Redis数据淘汰策略
Redis缓存一致性问题
Redis穿透与雪崩的预防与解决方案
阻塞IO、非阻塞IO和异步IO
Redis事物探秘
Redis持久化浅析
IO多路复用及select、poll和epoll
Redis集群-主从复制模式
Redis集群-哨兵模式