Redis-sentinel是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。在一般的分布式中心节点数据库 中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。
Redis-sentinel是Redis的作者antirez在今年6月份完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个 Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要,花了几个星期写出了Redis- sentinel。
Redis-sentinel的三大功能:监测、通知、自动故障恢复。首先Redis-sentinel要建立一个监控的master列表,然后针对master列表的每个master获取监控其的sentinels和slaves供以后故障恢复使用。由于项目的需求,今天抽时间简单测试下。
配置实例:
192.168.1.122 master
192.168.1.118 slave
192.168.1.119 slave
redis安装目录都在/usr/local/redis目录下
master /usr/local/redis/redis.conf 配置
daemonize yes
两台slave /usr/local/redis/redis.conf 配置
daemonize yes
slaveof 192.168.1.122 6379
master /usr/local/redis/sentinel.conf和两台的slave /usr/local/redis/sentinel.conf配置:
sentinel monitor mymaster 192.168.1.122 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
master启动redis服务
redis-server /usr/local/redis/redis.conf
slave启动redis服务
redis-server /usr/local/redis/redis.conf
master和slave启动sentinel实例
redis-server /usr/local/redis/sentinel.conf --sentinel &
关闭master的redis服务测试故障转移,若redis配置了分片功能,则该方式会出现一定的BUG。
在默认情况下, Sentinel 使用 TCP 端口 26379 (普通 Redis 服务器使用的是 6379 )。
Sentinel 接受 Redis 协议格式的命令请求, 所以你可以使用 redis-cli 或者任何其他 Redis 客户端来与 Sentinel 进行通讯。
有两种方式可以和 Sentinel 进行通讯:
・ 第一种方法是通过直接发送命令来查询被监视 Redis 服务器的当前状态, 以及 Sentinel 所知道的关于其他 Sentinel 的信息, 诸如此类。
・ 另一种方法是使用发布与订阅功能, 通过接收 Sentinel 发送的通知: 当执行故障转移操作, 或者某个被监视的服务器被判断为主观下线或者客观下线时, Sentinel 就会发送相应的信息。
Sentinel 命令
以下列出的是 Sentinel 接受的命令:
・ PING:返回 PONG 。
・ SENTINEL masters:列出所有被监视的主服务器,以及这些主服务器的当前状态。
・ SENTINEL slaves <master name>:列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。
・ SENTINEL get-master-addr-by-name <master name>: 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号。
・ SENTINEL reset <pattern>: 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清楚主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
・ SENTINEL failover <master name>: 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)。
发布与订阅信息
客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器: 你不可以使用 PUBLISH 命令向这个服务器发送信息, 但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
通过执行 PSUBSCRIBE * 命令可以接收所有事件信息。
以下列出的是客户端可以通过订阅来获得的频道和信息的格式: 第一个英文单词是频道/事件的名字, 其余的是数据的格式。
注意, 当格式中包含 instance details 字样时, 表示频道所返回的信息中包含了以下用于识别目标实例的内容:
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
@ 字符之后的内容用于指定主服务器, 这些内容是可选的, 它们仅在 @ 字符之前的内容指定的实例不是主服务器时使用。
・ +reset-master <instance details>:主服务器已被重置。
・ +slave <instance details>:一个新的从服务器已经被 Sentinel 识别并关联。
・ +failover-state-reconf-slaves <instance details>:故障转移状态切换到了 reconf-slaves 状态。
・ +failover-detected <instance details>:另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。
・ +slave-reconf-sent <instance details>:领头(leader)的 Sentinel 向实例发送了 SLAVEOF 命令,为实例设置新的主服务器。
・ +slave-reconf-inprog <instance details>:实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。
・ +slave-reconf-done <instance details>:从服务器已经成功完成对新主服务器的同步。
・ -dup-sentinel <instance details>:对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 ―― 当 Sentinel 实例重启的时候,就会出现这种情况。
・ +sentinel <instance details>:一个监视给定主服务器的新 Sentinel 已经被识别并添加。
・ +sdown <instance details>:给定的实例现在处于主观下线状态。
・ -sdown <instance details>:给定的实例已经不再处于主观下线状态。
・ +odown <instance details>:给定的实例现在处于客观下线状态。
・ -odown <instance details>:给定的实例已经不再处于客观下线状态。
・ +new-epoch <instance details>:当前的纪元(epoch)已经被更新。
・ +try-failover <instance details>:一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。
・ +elected-leader <instance details>:赢得指定纪元的选举,可以进行故障迁移操作了。
・ +failover-state-select-slave <instance details>:故障转移操作现在处于 select-slave 状态 ―― Sentinel 正在寻找可以升级为主服务器的从服务器。
・ no-good-slave <instance details>:Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
・ selected-slave <instance details>:Sentinel 顺利找到适合进行升级的从服务器。
・ failover-state-send-slaveof-noone <instance details>:Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。
・ failover-end-for-timeout <instance details>:故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
・ failover-end <instance details>:故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
・ +switch-master <master name> <oldip> <oldport> <newip> <newport>:配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。
・ +tilt:进入 tilt 模式。
-tilt:退出 tilt 模式。