如何在 CentOS 8 中使用 Sentinel 设置 Redis 实现高可用性 - 第 2 部分
Redis通过Redis Sentinel分布式系统提供高可用性。Sentinel有助于监视Redis实例、检测故障并自动进行角色切换,从而使Redis部署能够抵御任何类型的故障。
它具有对Redis实例(主实例和副本实例)进行监控的功能,支持通过脚本通知其他服务/进程或系统管理员,当主实例发生故障时自动进行故障转移以将副本实例提升为主实例,并为客户端提供配置以发现当前提供特定服务的主实例。
本文演示如何在CentOS 8中使用Redis Sentinel设置Redis实现高可用性,包括配置哨兵、检查设置状态和测试哨兵故障转移。
先决条件:
测试环境设置
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 sentinel 服务并使其在系统启动时自动启动,请使用以下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 个 quorum sentinels 同意时才将其视为“客观关闭”状态。您可以将“ 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 monitor 语句必须放在 sentinel auth-pass语句之前,以避免在重新启动 sentinel 服务时出现错误“没有具有指定名称的主服务器。 ”。
5.如果要监控的Redis主服务器设置了密码(在我们的例子中是主服务器有),请提供该密码,以便 Sentinel 实例可以与受保护的实例进行身份验证。
sentinel auth-pass mymaster Securep@55Here
6.然后设置主服务器(或任何附加的副本或哨兵服务器)不可达的毫秒数,以将其视为“主观关闭”状态。
下面的配置意味着,只要我们在 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实例的连接。
# 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.要显示有关主服务器(名为mymaster)的详细信息,请使用sentinel master命令。
# redis-cli -p 26379 sentinel master mymaster
14.要显示有关从属服务器和哨兵服务器的详细信息,请分别使用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
从查询的输出来看,新的主服务器现在是副本/从服务器 2,其 IP 地址为10.42.0.34,如下面的屏幕截图所示。
您可以从Redis Sentinel 文档中获取更多信息。但如果您有任何想法或疑问要分享,下面的反馈表就是您联系我们的门户。
在本系列的下一篇也是最后一篇中,我们将研究如何在 CentOS 8 中设置 Redis 集群。这将是一篇独立于前两篇文章的文章。