哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。哨兵本身也是一个独立运行的进程,它用来监控多个主从复制集群。下图为哨兵模式简易调用图:
很显然,哨兵进程也存在单点部署的问题,即哨兵进程挂掉后,导致整个集群不可用,故哨兵进程也应该支持集群部署。部署哨兵集群的优势有以下几点:
sentinel monitor mymaster 127.0.0.1 6379 2
表示监控的master节点名称为mymaster,ip为127.0.0.1,端口为6379,2的含义为大于等于2个哨兵进程认为master不可用时,才会真正认为master不可用,这个我们后续会详细叙述。
sentinel down-after-milliseconds mymaster 3000
哨兵通过PING来确认master是否存活,上述配置表示单个哨兵在3000毫秒内未收到PING的有效回复,则认为master已经不可用。
sentinel parallel-syncs mymaster 2
上述配置表示为,主备切换时可以最多有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呢?请看如下参考条件:
如果通过了上面的筛选,则按如下流程筛选master节点:
作者Redis系列文章大全
Redis入门
CentOS-7下安装redis-2.8
Redis配置详解
Redis数据淘汰策略
Redis缓存一致性问题
Redis穿透与雪崩的预防与解决方案
阻塞IO、非阻塞IO和异步IO
Redis事物探秘
Redis持久化浅析
IO多路复用及select、poll和epoll
Redis集群-主从复制模式
Redis集群-哨兵模式