如何在 CentOS 8 中使用 Sentinel 设置 Redis 的高可用性 – 第 2 部分

Redis通过Redis Sentinel分布式系统提供高可用性。 Sentinel有助于监视Redis实例,检测故障并将自动执行角色切换,从而使Redis部署能够抵抗任何类型的故障。

它具有监控Redis实例(主服务器和副本)、支持通过脚本通知其他服务/进程或系统管理员、主服务器故障时自动故障转移以晋升副本为主服务器以及为客户端提供配置以发现提供特定服务的当前主服务器等特性。

本文演示了如何在CentOS 8中使用Redis Sentinel设置Redis实现高可用性,包括配置哨兵、检查设置状态和测试Sentinel故障转移。

先决条件:

  1. 如何在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 Setup Logical Diagram

根据Redis Sentinel文档,强烈建议部署至少三个Sentinel实例。考虑到我们上面的设置,如果主节点发生故障,Sentinels2Sentinel3将就故障达成一致,并能够授权执行故障转移,使客户端操作能够继续。

第1步:启动和启用Redis Sentinel服务

1.CentOS 8上,Redis Sentinel服务与Redis服务器一起安装(我们已经在Redis复制设置中完成了这一步)。

要启动Redis哨兵服务并将其设置为在系统启动时自动启动,请使用以下systemctl命令。还要确认它正在运行,通过检查其状态(在所有节点上进行此操作):

# systemctl start redis-sentinel
# systemctl enable redis-sentinel
# systemctl status redis-sentinel
Start Redis Sentinel Service

第2步:在所有Redis节点上配置Redis Sentinel

2. 在本节中,我们将解释如何在所有节点上配置SentinelSentinel服务具有与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
Set Sentinel Listen Interface and Port

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
Set Redis Master to Monitor

重要提示:为了避免重新启动 Sentinel 服务时出现“指定名称的主服务器不存在”错误,必须将 sentinel monitor 语句放置在 sentinel auth-pass 语句之前。

5. 如果要监视的 Redis 主服务器设置了密码(在我们的情况下,主服务器已设置密码),请提供密码,以便 Sentinel 实例可以与受保护的实例进行身份验证。

 
sentinel auth-pass mymaster Securep@55Here
Set Master Auth Password

6. 然后设置主服务器(或任何连接的副本或 Sentinel)在多少毫秒内不可达时将其视为“主观下线”状态。

以下配置意味着主服务器将在我们在 5 秒内未收到来自我们的 ping 的任何回复时被视为失败(1 秒等于 1000 毫秒)。

sentinel down-after-milliseconds mymaster 5000
Set Down Time for Master

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

sentinel failover-timeout mymaster 180000
Set Fail Over Timeout

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

sentinel parallel-syncs mymaster 1
Set Number of Parallel Sync Replicas

请注意,Redis Replica1Sentinel2,以及Reddis Replica1Sentinel2上的配置文件应该是相同的。

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-sentinelsknown-replica语句,如以下截图所示。

Auto Generated Config in Master

replica1replica2上也应该是相同的情况。

Auto Generated Config in Replica1
Auto Generated Config in 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。

Check Sentinel Info on Master

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

# redis-cli -p 26379 sentinel master mymaster
Show Detailed Info About Sentinel Master

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
Get the Address of Master by Name on Slaves

步骤 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,如以下截图所示。

Test Redis Sentinel Failover

您可以从Redis Sentinel文档中获取更多信息。但如果您有任何想法要分享或疑问,请在下方的反馈表中与我们联系。

在本系列的下一个也是最后一部分中,我们将看看如何在CentOS 8中设置一个Redis集群。这将是与前两篇文章独立的一篇。

Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/