如何使用CentOS 8中的Sentinel设置Redis以实现高可用性
时间:2019-04-29 03:17:14 来源:igfitidea点击:
Redis通过Redis Sentinel(哨兵)分布式系统提供高可用性。Sentinel帮助监视Redis实例,检测故障并自动进行角色切换,从而使Redis部署能够抵抗任何类型的故障。
它具有监视Redis实例(主数据库和副本数据库)的功能,支持通过脚本通知其他服务/进程或系统管理员。
测试环境
根据Redis Sentinel文档,至少需要三个Sentinel实例才能进行可靠的部署。
主服务器和Sentinel1: 10.8.73.100 从服务器和Sentinel2: 10.8.73.21 从服务器和Sentinel3: 10.8.73.22
步骤1:启动Redis Sentinel服务
1.在CentOS 8上,Redis Sentinel服务与Redis服务器一起安装
# systemctl start redis-sentinel # systemctl enable redis-sentinel # systemctl status redis-sentinel
步骤2:在所有Redis节点上配置Redis Sentinel
- 配置文件 : /etc/redis-sentinel.conf
备份后编辑:
# cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig # vi /etc/redis-sentinel.conf
- 设置监听端口26379
port 26379
- 让Sentinel监视我们的主服务器,只有至少两个sentinels同意, 才将其视为“ Objectively Down”状态。 名称“ mymaster ”可以自定义。
# 在主服务器上
sentinel monitor mymaster 127.0.0.1 6379 2
# 在从服务器1上
sentinel monitor mymaster 10.8.73.100 6379 2
# 在从服务器2上
sentinel monitor mymaster 10.8.73.100 6379 2
这几行要放到
auth-pass
之前。不然报错No such master with the specified name.
- 如果有密码,设置认证密码
sentinel auth-pass mymaster mima1234
- 设置超时时间,超过时间就认为主机不可达,并设置为“Subjectively Down”状态
5000表示5秒
sentinel down-after-milliseconds mymaster 5000
- 设置故障转移超时 180秒
sentinel failover-timeout mymaster 180000
- 设置在故障转移后可以重新配置为使用新主服务器的副本数。
sentinel parallel-syncs mymaster 1
- 在所有节点上重新启动Sentinel服务,使配置生效
# systemctl restart redis-sentinel
- 在所有节点上的防火墙中打开端口26379
# firewall-cmd --zone=public --permanent --add-port=26379/tcp # firewall-cmd --reload
11.所有副本将被自动发现。Sentinel将使用有关副本的其他信息自动更新配置。
步骤3:检查Redis Sentinel设置状态
- 使用info sentinel命令,检查主服务器上的Sentinel状态/信息。
# redis-cli -p 26379 info sentinel
- 使用sentinel master显示有关主服务器(称为mymaster)的详细信息
# redis-cli -p 26379 sentinel master mymaster
- 显示有关从服务器和哨兵的详细信息
# redis-cli -p 26379 sentinel slaves mymaster # redis-cli -p 26379 sentinel sentinels mymaster
- 在从属实例中按名称询问主服务器的地址。
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
步骤4:测试Sentinel故障转移
- 在主服务器上,使Redis主服务器睡眠60秒。查询副本/从属服务器上当前主服务器的地址。
# redis-cli -p 6379 127.0.0.1:6379> AUTH mima1234 127.0.0.1:6379> debug sleep 60 # redis-cli -p 26379 sentinel get-master-addr-by-name mymaster # redis-cli -p 26379 sentinel get-master-addr-by-name mymaster