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

怎么才能把Redis集群服务给停了,步骤啥的说说看吧

停掉Redis集群,核心思路是两步:先让所有从节点(Slave)和主节点(Master)完成数据同步,确保数据都落盘了;然后再逐个安全地关闭每个节点,下面我分步骤详细说说。

第一步:做好准备,了解清楚现状

在动手之前,你得先知道你的集群长什么样,这就好比你要指挥交通,得先知道有几个路口、车流情况如何。

  1. 连接上任意一个节点:你不需要去每台机器上操作,只需要找一台能连接到Redis集群的电脑,使用Redis的命令行工具redis-cli,但这次连接需要带上一个特殊的参数 -c,表示以集群模式连接,命令大概长这样: redis-cli -c -h <某个节点的IP地址> -p <端口号,通常是6379> 你的集群里有个节点IP是192.168.1.100,那就输入:redis-cli -c -h 192.168.1.100 -p 6379

  2. 查看集群状态:连接上去之后,输入命令 CLUSTER INFO,这个命令会返回一堆信息,你需要重点关注两行:

    • cluster_state:ok:这表示集群目前处于正常状态,如果是fail,说明已经有问题了,关机时要更小心。
    • cluster_known_nodes:6:这告诉你整个集群一共有多少个节点,这个数字很重要,等下关机的时候你得心里有数。
  3. 查看节点详情:再输入一个更详细的命令 CLUSTER NODES,这个命令会列出集群里所有节点的信息,包括每个节点的ID、角色(是master还是slave)、它连接的其他节点,以及数据槽(slots)的分配情况,你最好把这个结果截图或者记下来,方便后面核对。

第二步:开始安全关闭节点(先奴隶,后主人)

怎么才能把Redis集群服务给停了,步骤啥的说说看吧

现在你对集群有了整体了解,可以开始关机了,关机的顺序很关键,要先关闭所有的从节点(Slave),最后再关闭主节点(Master),为什么这样呢?想象一下,如果先把主节点关了,那么它的从节点会发现“主人”联系不上了,它可能会自动尝试“升级”成新的主节点,这就会导致集群状态混乱,甚至触发重新选举,关机过程就变得复杂了。

  1. 关闭一个从节点

    • 选择你要关闭的第一个从节点,用redis-cli连接到这个节点上(这次连接可以不加-c参数,因为我们是直接操作这个实例,但加了也没问题),命令和第一步一样,只是IP地址换成这个从节点的地址。
    • 连接成功后,输入最关键的命令:SHUTDOWN SAVE 或者 SHUTDOWN NOSAVE
      • SHUTDOWN SAVE:意思是让Redis在关闭前执行一次数据持久化,把内存里最新的数据保存到硬盘上的RDB文件里,这是推荐的做法,能最大程度保证数据不丢失。
      • SHUTDOWN NOSAVE:意思是直接关机,不保存数据,除非你非常确定当前的数据不重要或者已经有最新备份,否则不要用这个。
    • 执行命令后,这个Redis进程就会安全退出,命令行窗口可能会自动关闭或者返回连接断开的提示,这就表示这个从节点已经成功关闭了。
  2. 重复操作,关闭所有从节点:按照上面的方法,一个一个地连接到剩下的从节点上,逐个执行SHUTDOWN SAVE命令,直到把所有从节点都关掉,你可以通过再次在还没关的节点上执行CLUSTER NODES来检查还有多少从节点在线,会发现关掉的节点状态会变成fail

第三步:关闭主节点

怎么才能把Redis集群服务给停了,步骤啥的说说看吧

当确认所有的从节点都已经顺利关闭后,现在终于可以关“老大”了。

  1. 逐个关闭主节点:和关闭从节点的步骤一模一样,连接到一个主节点 -> 执行 SHUTDOWN SAVE -> 确认关闭,然后再下一个主节点。
  2. 为什么主节点可以这样关?:因为此时从节点都已经停了,不会有谁因为主节点下线而触发“叛乱”(故障转移),主节点在接到关机指令后,会安静地保存好数据,然后退出,由于集群中大多数节点(所有主节点)是依次正常离线的,集群的“意识”也就自然消散了,不会产生异常状态。

第四步:最终检查

当你按照节点列表,关闭了所有节点后(就是CLUSTER INFO里显示的cluster_known_nodes数量的节点),整个Redis集群就完全停止了。

你可以通过操作系统的命令来最终确认一下,比如到每台服务器上,用ps -ef | grep redis命令看看是否还有Redis进程在运行,如果找不到相关的进程,那就大功告成了。

总结一下关键点和注意事项:

  • 顺序是关键:务必遵守先停从节点,再停主节点的顺序,这是最稳妥、最不容易出错的方式。(来源:Redis官方文档中关于集群管理的建议精神,虽然没有一个直接叫“关机顺序”的章节,但其故障转移机制决定了这个顺序的必要性。)
  • 使用SHUTDOWN命令:不要直接用kill -9这种强制杀死进程的命令,那样Redis来不及保存数据,可能导致数据损坏或丢失。SHUTDOWN是Redis提供的友好关机方式。
  • 数据持久化:强烈建议使用SHUTDOWN SAVE来确保数据落盘,如果你的Redis配置了AOF持久化,Redis在关机时也会确保将最后的操作写入AOF文件。
  • 特殊情况:如果你的集群本身已经处于故障状态(比如cluster_state:fail),那么上述理想流程可能会遇到问题,这种情况下,可能需要对每个节点进行强制关闭,但数据丢失的风险会增大,最好在集群健康的时候执行关机操作。

就是停掉Redis集群服务的详细步骤,说白了,就是细心一点,像解一团缠在一起的线一样,按顺序来,别用蛮力,就能平稳顺利地搞定。