redis sentinel 可以通过心跳检测的方式监视多个主服务器以及它们属下的所有从服务器,并在某个主服务器下线时自动对其实施故障转移

19.1 启动 sentinel

通过运行redis-sentinel命令进行启动,注意需要提供配置文件,否则将报错

一个sentinel配置文件至少需要包含以下选项:

1
sentinel monitor <master-name> <ip> <port> <quorum>
  • master-name是主服务器的名字
  • ip, port 分别是主服务器的ip和端口
  • quorum用于指定判断这个主服务器下线所需要的sentinel数量(即至少需要quorum 个sentinel认为主服务器下线了才真的认定主服务器下线了),同一个sentinel网络中的不同sentinel可以有不同的quorum

sentinel会先监视主服务器,然后获取从服务器名单并对从服务器进行监视

sentinel会对主从服务器都进行心跳检测、并记录各个服务器的在线状态、响应速度等信息

redis sentinel实际上就是一个运行在特殊模式下的redis服务器,用户可以通过redis-server sentinel.conf --sentinel去启动一个sentinel

一个sentinel可以监视任意数量的主服务器,而不是仅仅监视一个主服务器。只需要在配置文件中指定即可

当主服务器下线重新上线时,它会被切换为从服务器

19.1.1 设置从服务器优先级

  • 用户可以通过replica-priority配置选项来设置各个从服务器的优先级
  • 默认值为100,约小优先级越高
  • replica-priority为0表示从服务器永远不会被选为主服务器
  • 优先级较高的从服务器会被sentinel优先选为主服务器
  • 由于主服务器重新上线会被置为从服务器,最好给主服务器也设置优先级

19.1.2 新主服务器的挑选规则

  1. 否决所有已经下线以及长时间没有回复心跳检测的疑似已下线的从服务器
  2. 否决所有长时间没有与主服务器通信,数据状态过时的服务器
  3. 否决所有replica-priority为0的从服务器
  4. 在剩余的服务器中挑选新的主服务器:
    1. 优先级最高的从服务器获胜
    2. 如果有多个最高优先级相同的从服务器,那么选择复制偏移量最大的
    3. 如果仍然相同,那么选择id字典序小的

19.2 sentinel 网络

在一般情况下,只要sentinel网络中有半数以上的sentinel在线,故障转移操作既可以继续进行。

当sentinel网络中某个sentinel认为某个服务器已经下线时,将标记这个主服务器为主观下线(Subjectively Down),然后询问其他sentinel是否也认为该服务器已下线。

当同意主服务器已下线的sentinel数量达到quorum时,sentinel就会将相应的主服务器标记为客观下线,然后对其进行故障转移

因为这种机制的存在,必须将quorum参数的值设置为sentinel数量的半数以上

19.2.1 组件sentinel网络

用户只需要启动多个sentinel,配置要监控的redis服务器即可,sentinel会自动发现对方,并组成相应的sentinel网络

19.3 sentinel 管理命令

19.3.1 sentinel masters 获取所有被监视主服务器的信息

返回列表,每个列表项为: sentinel masters命令返回的各个字段的含义

sentinel master <master-name> 获取指定被监视主服务器的信息

19.3.2 sentinel slave 获取被监视主服务器的从服务器信息

  • 返回的信息大部分和sentinel masters相同,区别在于:
    • sentinel slaves不同字段

19.3.3 sentinel sentinels <master-name> 获取监视同一主服务器的其他sentinel的相关信息

  • 返回相关信息和sentinel mastersentinel slaves相关,不同的为:
    • down-after-milliseconds
    • info-refresh
    • role-reported
    • sentinel sentinels命令不同字段

19.3.4 sentinel get-master-addr-by-name 获取给定主服务器的ip地址和端口号

19.3.4 sentinel reset

  • 接受一个glob风格的模式作为参数,接收到该命令的sentinel将重置所有与给定模式匹配的主服务器
  • sentinel reset <pattern> 将返回被重置主服务器的数量做为返回值
  • 接收到此命令的sentinel除了会遗忘被匹配主服务器目前已有的所有从服务器,以及正在监视被匹配主服务器的所有其他sentinel。在此之后,这个sentinel将会重新搜索正在监视被匹配主服务器的其他sentinel,以及该服务器属下的各个从服务器,并与它们重新建立连接。(不会说人话???)

19.3.5 sentinel failover <master-name> 强制执行故障转移

强制对指定主服务器下线而不需要sentinel进行投票

19.3.6 sentinel ckquorum <master-name> 检查可用sentinel的数量

一般用于检查sentinel网络是否部署成功

19.3.7 sentinel flushconfig 强制写入配置文件

用户可以通过想sentinel发送这个命令,使得其将配置文件重新写入硬盘中

19.4 在线配置 sentinel

redis2.8.4版本后开始为sentinel命令新添加了一组子命令,这些命令可以在线修改sentinel对于被监视主服务器的配置选项,并把修改保存到配置文件中,整个过程中不需要停止sentinel和手动修改配置文件。

19.4.1 sentinel monitor 监视给定主服务器

1
sentinel monitor <master-name> <ip> <port> <quorum>

让sentinel开始监视一个新的主服务器

19.4.2 sentinel remove <master-name> 取消对给定主服务器的监视

19.4.3 sentinel set 修改sentinel配置选项的值

1
sentinel set <master-name> <option> <value>

例如 sentinel set some_rdb quorum 3

19.4.4 使用在线配置命令的注意事项

只对单一sentinel生效