Redis集群-哨兵模式

文章目录

    • 概述
    • 优势
    • 哨兵集群
    • 启动方式
    • 哨兵配置解析
    • 主备切换策略
      • 如何判断节点不可用
      • 主观下线
      • 客观下线
      • 切换条件

概述

哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。哨兵本身也是一个独立运行的进程,它用来监控多个主从复制集群。下图为哨兵模式简易调用图:
Redis集群-哨兵模式_第1张图片

优势

  • 不定时监控Redis集群是否运行良好。
  • 若Redis节点出现故障,可以及时同事其他进程,如客户端。
  • 能够自动进程主备切换。

哨兵集群

很显然,哨兵进程也存在单点部署的问题,即哨兵进程挂掉后,导致整个集群不可用,故哨兵进程也应该支持集群部署。部署哨兵集群的优势有以下几点:

  • 即便某些哨兵进程挂掉,依然可以进行主备切换。
  • 客户端可以连接任意一个哨兵进程服务,以获取集群信息。

启动方式

  • 第一种
    redis-sentinel sentinel.conf
  • 第二种
    redis-server sentinel.conf --sentinel
    两种启动方式均需要指定哨兵配置文件,哨兵进程默认监听端口为26379。

哨兵配置解析

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呢?请看如下参考条件:

  1. slave节点处于SDOWN,ODOWN,DISCONNECTED不会作为备选master节点。
  2. 最近一次ping应答时间超过5倍ping的间隔不会作为备选master节点。
  3. slave 跟 master 断开连接的时间已经超过了down-after-milliseconds的 10 倍+master 宕机的时长,不会作为备选master节点。

如果通过了上面的筛选,则按如下流程筛选master节点:

  1. 按照优先级排序,优先级数值(配置文件设置)越低,则备选master的优先级越高。
  2. 如果优先级相同,则取replica offset较大的slave作为master备选节点。
  3. 如果replica offset也相同,则选取run id较小的作为master备选节点。(每个redis实例,都会有一个runid,通常是一个40位的随机字符串,在redis启动时生成)

作者Redis系列文章大全

Redis入门
CentOS-7下安装redis-2.8
Redis配置详解
Redis数据淘汰策略
Redis缓存一致性问题
Redis穿透与雪崩的预防与解决方案
阻塞IO、非阻塞IO和异步IO
Redis事物探秘
Redis持久化浅析
IO多路复用及select、poll和epoll
Redis集群-主从复制模式
Redis集群-哨兵模式

你可能感兴趣的:(中间件,Redis原理深度剖析)