「Redis」- Sentinel

  CREATED BY JENKINSBOT

Redis Sentinel

在主从模式的基础上,当主机点故障时,Sentinel会从从节点中选取一个,使其成为主节点。

Sentinel集群无需设置其他Sentinel节点地址,它可以自动发现,它会将唯一一个Sentinel列表。

Sentinel集群不会同时进行故障迁移,只有第一个故障迁移失败后,才会进行第二个。

当Seninel将一个从节点选举为主节点并发送SLAVE OF NO ONE之后,即使从节点没有更新配置,也会将故障迁移视为成功。

在故障迁移过程中,如果收到重启了旧的主节点,将会导致整个集群出于无主节点状态。所以,不要重启主节点。

在故障迁移后,Sentinel会更新主节点、从节点、Seninel的配置。

Sentinel一般能满足高可用性,但是通常遇到的问题是内存瓶颈。

注意的问题:

	* 「Sentinel模式」是建立在「主从模式」之上的
	* 主节点故障后,Sentinel会选取从节点成为主节点,并修改其配置,并且也会修改其他从节点的配置
	* 当故障的主节点重启后,它不再是主节点,而是成为从节点
	* 当主从模式设置了密码时,Sentinel也会同步密码
	* Sentinel也会故障,因此Sentinel也需要集群和高可用
	* 一个Sentinel可以管理多个Redis节点
	* Sentinel最好不要和Redis部署在同一台主机中
	* Sentinel监控的Redis集群都会定义一个主节点名字,这个名字代表Redis集群的主节点Redis
	* 客户端连接Sentinel服务,由Sentinel来提供服务

Sentinel集群:

	* 单个Sentinel容易出现单点故障,这会使得整个集群不可以用
	* 多个Sentinel中,客户端可以访问任意一个Sentinel服务

环境说明

在测试环境中,共由三台主机:

	* centos7.0-redis-0: 172.16.0.117, Sentinel-Master
	* centos7.0-redis-1: 172.16.0.118, Sentinel-Slave
	* centos7.0-redis-2: 172.16.0.117, Sentinel-Slave

CentOS 7.0,Redis 3.2.12,Port 6379

配置Sentinel服务

################################################################################
# 1. 安装服务(Redis Sentinel附带在Redis的包中)
################################################################################
yum install -y redis.x86_64

################################################################################
# 2. 修改配置文件:/etc/redis-sentinel.conf
# 有几个问题需要注意以下:
#     1). 接口绑定到0.0.0.0上,绑定到指定的网卡上
#     2). 这三台Sentinel都检测同一个主节点。从节点无需配置。
################################################################################
# 在主节点上(172.16.0.117, Master)
bind 172.16.0.117
sentinel monitor MyMaster 172.16.0.117 26379 2
sentinel down-after-milliseconds MyMaster 5000
sentinel failover-timeout MyMaster 120000

# 在从节点上(172.16.0.118, Slave)
bind 172.16.0.118
sentinel monitor MyMaster 172.16.0.117 26379 2
sentinel down-after-milliseconds MyMaster 5000
sentinel failover-timeout MyMaster 120000

# 在从节点上(172.16.0.119, Slave)
bind 172.16.0.119
sentinel monitor MyMaster 172.16.0.117 26379 2
sentinel down-after-milliseconds MyMaster 5000
sentinel failover-timeout MyMaster 120000

################################################################################
# 3. 启动服务、开启启动、重启(三台机器)
################################################################################
systemctl start redis-sentinel.service
systemctl restart redis-sentinel.service
systemctl enable redis-sentinel.service

################################################################################
# 4. 查看状态
################################################################################
redis-cli -h 172.16.117 -p 26379 SENTINEL masters
redis-cli -h 172.16.118 -p 26379 SENTINEL masters
redis-cli -h 172.16.119 -p 26379 SENTINEL masters
# 省略已输出,从输出中可以看到Sentinel的数量,从节点的数量等等信息

################################################################################
# 5. 测试服务
################################################################################
# 在主节点上执行如下命令,
redis-cli -h 172.16.117 -p 6379 debug sleep 30
# 在命令中执行期间,由于Redis服务无法正常响应Sentinel,则Sentinel会将该主节点视为故障,然后
# 重新选举主节点。在我的环境中,172.16.119成为了主节点,172.16.118依旧保持从节点。上述命令执
# 行结束后,172.16.117成为从节点。
#
# 这一一点可以通过如下命令验证:
redis-cli -h 172.16.0.117 -p 6379 info replication
redis-cli -h 172.16.0.118 -p 6379 info replication
redis-cli -h 172.16.0.119 -p 6379 info replication

#
# 同时redis.conf文件的内容也发生了变化
#

关于Sentinel的注意事项

Redis sentinels in same servers as master/slave?

参考文献

Redis之Sentinel高可用安装部署
Redis Sentinel Documentation