当前位置:首页 > 问答 > 正文

Redis哨兵要怎么停掉啊,关闭redis哨兵步骤和注意事项分享

要停掉Redis哨兵,不能像关一个普通程序那样直接去关掉它,因为它关系到整个Redis高可用集群的稳定性,如果操作不当,可能会导致集群误判,甚至引发主从切换,造成服务中断,下面就来详细说说关闭Redis哨兵的步骤和需要注意的事项。

第一部分:关闭Redis哨兵的正确步骤

关闭哨兵需要一个平缓的过程,目的是让整个系统感知到这个变化,而不是让它“突然死亡”。

确定你要关闭的哨兵实例 你需要知道你要关闭的是哪个哨兵服务器,可以通过连接到哨兵的端口(默认是26379)使用redis-cli工具来确认,执行命令:

redis-cli -p 26379

连接成功后,输入 INFO Sentinel 命令,这个命令会返回哨兵的详细信息,包括它监控的主节点名字、当前主节点的IP和端口、以及其他哨兵同伴的信息,确认这个哨兵实例是你计划要关闭的那一个。

优先考虑关闭顺序(非常重要) 这是一个关键点,在由多个哨兵组成的集群中,哨兵们通过投票来决定主节点是否下线,为了达成“客观下线”的共识,需要超过半数的哨兵同意,假设你有3个哨兵,那么至少需要2个哨兵认为主节点下线,才会触发切换。

Redis哨兵要怎么停掉啊,关闭redis哨兵步骤和注意事项分享

  • 如果你的哨兵集群是奇数个(比如3个或5个): 直接关闭一个哨兵,剩下的哨兵数量依然是偶数(比如剩2个或4个),在偶数情况下,它们将无法达到“超过半数”的共识,3个哨兵需要2票同意,关闭1个后剩下2个,任何决策都需要至少2票,这意味着如果剩下的两个哨兵中有一个认为主节点下线,而另一个不认为,就无法触发切换,但同时也失去了高可用能力,陷入一种僵局,虽然不会立刻导致问题,但集群的容错性降低了。
  • 最佳实践: 在关闭任何哨兵之前,最好先确保整个Redis主从数据同步是健康的,并且主节点运行稳定,没有绝对的关闭顺序,但原则是避免让剩余的哨兵数量变为偶数,或者确保在剩余奇数个哨兵的情况下进行操作,更稳妥的做法是,如果你打算维护整个系统,可以先关闭从节点,再关闭主节点,最后再关闭哨兵,但如果是单独维护一个哨兵,那么就要接受集群容错能力暂时下降的情况。

安全地停止哨兵进程 确认了以上信息后,就可以开始停止进程了,最安全的方式是使用Redis的SHUTDOWN命令。

  1. 使用redis-cli再次连接到你要关闭的哨兵(端口26379)。
  2. 在命令行中直接输入 SHUTDOWN 命令并回车。
  3. 哨兵进程在收到这个命令后,会先完成必要的持久化操作(如果配置了的话),然后正常退出。

相比于直接用操作系统的kill命令,SHUTDOWN是更优雅、更推荐的方式,如果SHUTDOWN命令因为某种原因无法执行,那么可以考虑使用 kill -15(SIGTERM)信号,这个信号允许程序做一些清理工作再退出。尽量避免使用kill -9(SIGKILL),因为这个信号会强制立即终止进程,哨兵没有机会通知其他同伴它要离开了,其他哨兵需要等待一段时间(可配置的超时时间)后才会认为这个哨兵故障,这期间集群状态可能不准确。

验证关闭结果 执行关闭命令后,可以通过以下方式验证哨兵是否已成功停止:

  • 使用 ps -ef | grep redis-sentinel 命令查看是否还有哨兵进程存在。
  • 尝试再次用redis-cli连接26379端口,应该会连接失败。
  • 可以到其他还在运行的哨兵节点上,执行 SENTINEL sentinels <master-name> 命令(其中<master-name>是你监控的主节点名字),查看哨兵列表,确认刚刚关闭的那个哨兵已经不在列表中了。

第二部分:关闭Redis哨兵的重要注意事项

Redis哨兵要怎么停掉啊,关闭redis哨兵步骤和注意事项分享

对集群高可用性的影响 这是最需要警惕的一点,每关闭一个哨兵,集群的容错能力就会下降一分,一个3哨兵的集群可以容忍1个哨兵故障而不影响决策能力,如果你手动关闭了1个,那么整个集群就只能容忍0个故障了,此时如果再有任何一个哨兵出问题,整个高可用机制就可能失灵。绝对不要在业务高峰期进行非必要的哨兵维护操作

配置文件的持久化 哨兵在运行过程中,如果监控的主节点发生了变化(比如发生了自动故障转移),它会自动将最新的配置信息写回到配置文件中,如果你在它运行时直接修改了配置文件,可能会被运行中的哨兵覆写,在计划关闭哨兵进行维护(比如修改配置)时,正确的做法是:先安全地停止哨兵进程,然后再修改其配置文件,最后再重新启动它。

防火墙和网络问题 你以为关闭了哨兵,但其他哨兵却一直认为它还在,这可能不是关闭操作本身的问题,而是网络或防火墙的问题,你关闭了A哨兵,但B哨兵和C哨兵因为网络隔离,无法互相通信,它们可能都会认为对方和A都下线了,从而导致错误的判断,在操作前后,确保哨兵服务器之间的网络通信是正常的,这一点也很重要。

监控和告警 在执行关闭操作前,请确保你有完整的监控系统在盯着Redis集群的状态,包括主从复制状态、哨兵的数量、哨兵自身的健康状态等,这样,如果你的操作引发了任何预期之外的问题,告警系统能第一时间通知你,让你可以快速响应。

总结一下 停掉Redis哨兵不是一个简单的“关机”动作,核心思想是“优雅”和“谨慎”,关键步骤是先用INFO Sentinel确认目标,然后优先使用SHUTDOWN命令优雅关闭,并时刻牢记你的操作对哨兵集群“法定人数”的影响,最重要的注意事项就是理解关闭哨兵会降低集群的容错能力,因此要选择低峰期操作,并做好充分的监控和应急预案,只要遵循这些步骤和注意事项,就能安全平稳地完成哨兵的停止操作。