Redis通过Redis Sentinel分布式系统提供高可用性。 Sentinel有助于监视Redis实例,检测故障并将自动执行角色切换,从而使Redis部署能够抵抗任何类型的故障。
它具有监控Redis实例(主服务器和副本)、支持通过脚本通知其他服务/进程或系统管理员、主服务器故障时自动故障转移以晋升副本为主服务器以及为客户端提供配置以发现提供特定服务的当前主服务器等特性。
本文演示了如何在CentOS 8中使用Redis Sentinel设置Redis实现高可用性,包括配置哨兵、检查设置状态和测试Sentinel故障转移。
先决条件:
测试环境设置
Master Server and Sentinel1: 10.42.0.247 Redis Replica1 and Sentinel2: 10.42.0.21 Redis Replica2 and Sentinel3: 10.42.0.34

根据Redis Sentinel文档,强烈建议部署至少三个Sentinel实例。考虑到我们上面的设置,如果主节点发生故障,Sentinels2和Sentinel3将就故障达成一致,并能够授权执行故障转移,使客户端操作能够继续。
第1步:启动和启用Redis Sentinel服务
1. 在CentOS 8上,Redis Sentinel服务与Redis服务器一起安装(我们已经在Redis复制设置中完成了这一步)。
要启动Redis哨兵服务并将其设置为在系统启动时自动启动,请使用以下systemctl命令。还要确认它正在运行,通过检查其状态(在所有节点上进行此操作):
# systemctl start redis-sentinel # systemctl enable redis-sentinel # systemctl status redis-sentinel

第2步:在所有Redis节点上配置Redis Sentinel
2. 在本节中,我们将解释如何在所有节点上配置Sentinel。Sentinel服务具有与Redis服务器类似的配置格式。要对其进行配置,请使用/etc/redis-sentinel.conf自行记录的配置文件。
首先,创建原始文件的备份并打开进行编辑。
# cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig # vi /etc/redis-sentinel.conf
3. 默认情况下,Sentinel 监听端口 26379,在所有实例上验证这一点。请注意,您必须保留 bind 参数的注释(或设置为 0.0.0.0)。
port 26379

4. 接下来,告诉 Sentinel 监视我们的 master,并且只有至少 2 个仲裁 Sentinel 同意时才将其视为“客观下线”状态。您可以用自定义名称替换“mymaster”。
#On Master Server and Sentinel1 sentinel monitor mymaster 127.0.0.1 6379 2 #On Replica1 and Sentinel2 sentinel monitor mymaster 10.42.0.247 6379 2 #On Replica1 and Sentinel3 sentinel monitor mymaster 10.42.0.247 6379 2

重要提示:为了避免重新启动 Sentinel 服务时出现“指定名称的主服务器不存在”错误,必须将 sentinel monitor 语句放置在 sentinel auth-pass 语句之前。
5. 如果要监视的 Redis 主服务器设置了密码(在我们的情况下,主服务器已设置密码),请提供密码,以便 Sentinel 实例可以与受保护的实例进行身份验证。
sentinel auth-pass mymaster Securep@55Here

6. 然后设置主服务器(或任何连接的副本或 Sentinel)在多少毫秒内不可达时将其视为“主观下线”状态。
以下配置意味着主服务器将在我们在 5 秒内未收到来自我们的 ping 的任何回复时被视为失败(1 秒等于 1000 毫秒)。
sentinel down-after-milliseconds mymaster 5000

7. 接下来,以毫秒为单位设置故障转移超时,该超时定义了许多内容(请阅读配置文件中该参数的文档)。
sentinel failover-timeout mymaster 180000

8. 然后设置在故障切换后可以重新配置使用新主节点的副本数量。由于我们有两个副本,我们将设置一个副本为另一个将被提升为新主节点。
sentinel parallel-syncs mymaster 1

请注意,Redis Replica1和Sentinel2,以及Reddis Replica1和Sentinel2上的配置文件应该是相同的。
9. 接下来,重新启动所有节点上的Sentinel服务以应用最近的更改。
# systemctl restart redis-sentinel
10. 接下来,在所有节点上打开防火墙中的端口26379,以启用Sentinel实例开始通信,接收来自其他Sentinel实例的连接,使用防火墙-cmd。
# firewall-cmd --zone=public --permanent --add-port=26379/tcp # firewall-cmd --reload
11. 所有副本都将自动被发现。重要的是,Sentinel将自动使用有关副本的其他信息更新配置。您可以通过打开每个实例的Sentinel配置文件并查看其中的内容来确认这一点。
例如,当您查看主配置文件的末尾时,应该看到known-sentinels和known-replica语句,如以下截图所示。

在replica1和replica2上也应该是相同的情况。


请注意,在故障切换期间将副本提升为主状态以及在设置中发现新的Sentinel时,Sentinel配置也会在每次被重写/更新。
步骤 3:检查 Redis Sentinel 设置状态
12. 现在检查主服务器上 Sentinel 的状态/信息,使用以下命令:Sentinel status/information on the master, using the info sentinel command as follows.
# redis-cli -p 26379 info sentinel
根据以下命令的输出,我们有两个副本/从属和三个 Sentinel。

13. 要显示有关主服务器(称为 mymaster)的详细信息,请使用 sentinel master 命令。
# redis-cli -p 26379 sentinel master mymaster

14. 要显示有关 副本 和 Sentinel 的详细信息,请分别使用 sentinel slaves 命令和 sentinel sentinels 命令。
# redis-cli -p 26379 sentinel slaves mymaster # redis-cli -p 26379 sentinel sentinels mymaster
15. 接下来,使用以下命令从从属实例中按名称询问主服务器的地址:sentinel get-master-addr-by-name。
输出应为当前主实例的 IP 地址和端口:
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

步骤 4:测试 Sentinel 故障转移
16. 最后,让我们测试我们 Sentinel 设置中的自动故障转移。在 Redis/Sentinel 主服务器上,使 Redis 主服务器(运行在端口 6379)休眠 60 秒。然后查询副本/从属上当前主服务器的地址如下。
# redis-cli -p 6379 127.0.0.1:6379> AUTH Securep@55Here 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
根据查询的输出,新主服务器现在是 replica/slave2,IP 地址为 10.42.0.34,如以下截图所示。

您可以从Redis Sentinel文档中获取更多信息。但如果您有任何想法要分享或疑问,请在下方的反馈表中与我们联系。
在本系列的下一个也是最后一部分中,我们将看看如何在CentOS 8中设置一个Redis集群。这将是与前两篇文章独立的一篇。
Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/