如何在 CentOS 8 中使用 Sentinel 设置 Redis 以实现高可用性 - 第 2 部分
Redis通过Redis Sentinel分布式系统提供高可用性。 Sentinel 有助于监控 Redis 实例、检测故障并自动进行角色切换,从而使 Redis 部署能够抵御任何类型的故障。
它具有对 Redis 实例(主实例和副本实例)的监控、支持通过脚本通知其他服务/进程或系统管理员、自动故障转移以在主实例出现故障时将副本提升为主实例并提供客户端的配置以发现当前提供特定服务的主服务器。
本文演示如何在 CentOS 8 中使用 Redis Sentinel 设置 Redis 以实现高可用性,包括配置哨兵、检查设置状态和测试哨兵故障转移。
先决条件:
- 如何在 CentOS 8 中设置 Redis 复制(禁用集群模式) – 第 1 部分
测试环境设置
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 实例才能实现稳健的部署。考虑到我们上面的设置,如果master发生故障,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 个法定人数哨兵同意时。您可以将“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
重要:哨兵监视器语句必须放在哨兵auth-pass语句之前,以避免错误“No such master with重新启动哨兵服务时指定的名称。”。
5. 如果要监控的 Redis 主服务器设置了密码(在我们的例子中,主服务器已设置),请提供密码,以便 Sentinel 实例可以通过受保护实例进行身份验证。
sentinel auth-pass mymaster Securep@55Here
6.然后设置主服务器(或任何附加的副本或哨兵)应不可访问的毫秒数,以将其视为“主观关闭”状态。
以下配置意味着,只要我们在 5 秒内(1 秒相当于 1000 毫秒)没有收到 ping 的任何回复,master 将被视为失败。
sentinel down-after-milliseconds mymaster 5000
7. 接下来,设置故障转移超时(以毫秒为单位),它定义了很多内容(请阅读配置文件中参数的文档)。
sentinel failover-timeout mymaster 180000
8.然后设置在故障转移后可以重新配置为同时使用新主服务器的副本数量。由于我们有两个副本,因此我们将设置一个副本,因为另一个副本将晋升为新的主服务器。
sentinel parallel-syncs mymaster 1
请注意,Redis Replica1 和 Sentinel2 以及 Redis Replica1 和 Sentinel2 上的配置文件应该相同。
9. 接下来,在所有节点上重新启动 Sentinel 服务以应用最近的更改。
systemctl restart redis-sentinel
10. 接下来,在所有节点上的防火墙中打开端口 26379,以使 Sentinel 实例能够开始通信,接收来自其他 >Sentinel 实例,使用firewall-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. 现在,使用 info sentinel 命令检查主机上的 Sentinel 状态/信息,如下所示。
redis-cli -p 26379 info sentinel
从命令的输出(如下面的屏幕截图所示)来看,我们有两个副本/从属和三个哨兵。
13.要显示有关master(称为mymaster)的详细信息,请使用sentinel master命令。
redis-cli -p 26379 sentinel master mymaster
14.要显示有关slave和sentinels的详细信息,请使用sentinel Slaves命令和sentinel哨兵分别指挥。
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 master 上,使 Redis master(在端口 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 集群。它将是独立于前两篇文章的一篇文章。