「Redis」- Sentinel @20210127
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?
参考文献
WikiNotes/Sentinel
Redis之Sentinel高可用安装部署
Redis Sentinel Documentation