上一篇 下一篇 分享链接 返回 返回顶部

Redis集群节点失联重连修复实操指南

发布人: 发布时间:5小时前 阅读量:3

问题场景

Redis集群中某个节点因网络抖动、机器重启或资源耗尽导致与主节点及集群内其他节点失联,集群状态变为PFAILFAIL,部分槽位无法服务。本文提供一套标准修复流程,帮助运维人员快速恢复集群完整性。

一、检查集群当前状态

登录任意正常节点,执行:

redis-cli -h <正常节点IP> -p <端口> cluster nodes

观察输出:失联节点状态通常为disconnectedfail。同时检查集群是否大部分槽位正常:

redis-cli cluster info

关注cluster_state字段,若为ok(但某节点标记为fail),则仍可进行修复。

二、诊断失联原因

先排查基础链路:

  • ping 失联节点IP是否可达
  • 检查节点端口(默认6379+集群总线端口16379)是否被防火墙或安全组拦截
  • 查看失联节点日志(如/var/log/redis/redis.log),确认是否有OOMtoo many open filestimeout错误

三、修复步骤

3.1 强制移除失效节点

若节点确定无法恢复(如硬件损坏),需先将其从集群中剔除,再补全新节点。使用cluster forget命令在集群中所有正常节点上执行:

redis-cli -h <正常节点> cluster forget <失联节点ID>

其中节点ID从cluster nodes输出中获取。

3.2 重启并重新加入集群

若节点仅临时失联,尝试重启服务:

systemctl restart redis(或对应启动命令)

重启后该节点会自动尝试与集群中剩余节点握手。若集群剩余节点已将其标记为FAIL,需手动执行cluster meet重新加入:

redis-cli -h <失联节点IP> -p <端口> cluster meet <任意正常节点IP> <该节点端口>

3.3 分配槽位并同步数据

若被移除的节点原有槽位,需重新分配。使用redis-cli --cluster rebalance或手动cluster addslots。更推荐用redis-trib.rb(集群3.x早期)或redis-cli --cluster fix(集群5.x+)自动修复:

redis-cli --cluster fix <任意正常节点IP:端口>

脚本会自动检查槽位分布并迁移。

3.4 调整超时参数

为防止频繁失联,可调整cluster-node-timeout(默认15000ms)。在redis.conf中修改后重启节点:

cluster-node-timeout 30000   # 若网络不稳定可适当增大

四、验证恢复

重新执行cluster nodes,确认失联节点状态变为connected且正确处于masterslave角色。使用cluster info确认cluster_state:ok,槽位覆盖率达到100%。最后执行redis-cli --cluster check <任意节点IP:端口>进行完整校验。

五、注意事项

  • 任何时候不要手动修改节点运行文件(如nodes.conf),否则可能导致集群元数据错乱。
  • 若节点是slave,可先提升其他slave或手动故障转移,避免数据丢失影响业务。
  • 生产环境建议先进行备份(如BGSAVE)再操作。
目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com