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
· SENTINEL get-master-addr-by-name
· SENTINEL reset
· SENTINEL failover
发布与订阅信息
客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器: 你不可以使用 PUBLISH 命令向这个服务器发送信息, 但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
通过执行 PSUBSCRIBE * 命令可以接收所有事件信息。
以下列出的是客户端可以通过订阅来获得的频道和信息的格式: 第一个英文单词是频道/事件的名字, 其余的是数据的格式。
注意, 当格式中包含 instance details 字样时, 表示频道所返回的信息中包含了以下用于识别目标实例的内容:
@ 字符之后的内容用于指定主服务器, 这些内容是可选的, 它们仅在 @ 字符之前的内容指定的实例不是主服务器时使用。
· +reset-master
· +slave
· +failover-state-reconf-slaves
· +failover-detected
· +slave-reconf-sent
· +slave-reconf-inprog
· +slave-reconf-done
· -dup-sentinel
· +sentinel
· +sdown
· -sdown
· +odown
· -odown
· +new-epoch
· +try-failover
· +elected-leader
· +failover-state-select-slave
· no-good-slave
· selected-slave
· failover-state-send-slaveof-noone
· failover-end-for-timeout
· failover-end
· +switch-master
· +tilt:进入 tilt 模式。
-tilt:退出 tilt 模式。