背景信息
- 你有3台机器:
172.16.91.43、172.16.91.44、172.16.91.45 - 每台机器运行两个 Redis 实例:一个 主节点 (6379),一个 从节点 (6380)
- 密码:
Seeyon123456 - Cluster 模式启用(
cluster-enabled yes) - 缺失一些节点(目前集群只有 3 主 + 1 从)
Redis集群修复/重启手册
A. 停止集群节点
一定要按顺序停:先从节点,再主节点
在每台机器的 Redis 安装目录 /data/Seeyon/RedisServer/redis/bin 执行:
# 1. 停止所有从节点 (6380)
./redis-cli -h 172.16.91.43 -p 6380 -a Seeyon123456 shutdown
./redis-cli -h 172.16.91.44 -p 6380 -a Seeyon123456 shutdown
./redis-cli -h 172.16.91.45 -p 6380 -a Seeyon123456 shutdown
# 2. 停止所有主节点 (6379)
./redis-cli -h 172.16.91.43 -p 6379 -a Seeyon123456 shutdown
./redis-cli -h 172.16.91.44 -p 6379 -a Seeyon123456 shutdown
./redis-cli -h 172.16.91.45 -p 6379 -a Seeyon123456 shutdownB. 删除持久化数据文件
如果是 OA 缓存类业务,不需要保留旧数据,删除各实例目录中的 dump.rdb(以及 AOF):
rm -f /data/Seeyon/RedisServer/redis/node6379/dump.rdb
rm -f /data/Seeyon/RedisServer/redis/node6380/dump.rdb
# 若有 appendonly.aof:
rm -f /data/Seeyon/RedisServer/redis/node6379/appendonly.aof
rm -f /data/Seeyon/RedisServer/redis/node6380/appendonly.aofC. 启动主节点(Master)
依次启动三台机器的主节点,确保它们握手成功:
# 机器 43
./redis-server /data/Seeyon/RedisServer/redis/node6379/redis.conf
# 机器 44
./redis-server /data/Seeyon/RedisServer/redis/node6379/redis.conf
# 机器 45
./redis-server /data/Seeyon/RedisServer/redis/node6379/redis.confD. 启动从节点(Slave)
依次启动三台机器的从节点:
# 机器 43
./redis-server /data/Seeyon/RedisServer/redis/node6380/redis.conf
# 机器 44
./redis-server /data/Seeyon/RedisServer/redis/node6380/redis.conf
# 机器 45
./redis-server /data/Seeyon/RedisServer/redis/node6380/redis.confE. 检查集群健康
./redis-cli -h 172.16.91.43 -p 6379 -a Seeyon123456 cluster info
./redis-cli -h 172.16.91.43 -p 6379 -a Seeyon123456 cluster nodes健康标准:
cluster_state:okcluster_slots_fail和cluster_slots_pfail都为0- 每个 Master 有一个 Slave
- Master 与 Slave 不在同一台机器
F. 如果从节点没加入集群
如果某个从节点启动后没有加入集群:
- 找到它对应的 Master 的节点ID(用
cluster nodes查) - 在该从节点上执行:
./redis-cli -h <Slave_IP> -p <Slave_Port> -a Seeyon123456 cluster replicate <Master_Node_ID>这样它会绑定到对应的主节点。
G. 以后启动顺序注意事项
正确启动顺序:
- 先启动所有 Master(机器 43→44→45)
- 再启动所有 Slave(机器 43→44→45) 正确停止顺序:
- 先停止所有 Slave
- 再停止所有 Master
H. 一键重启脚本(可选,放在每台机的bin目录)
保存成 /data/Seeyon/RedisServer/redis/bin/restart_cluster.sh:
#!/bin/bash
PASS="Seeyon123456"
MASTERS=("172.16.91.43:6379" "172.16.91.44:6379" "172.16.91.45:6379")
SLAVES=("172.16.91.43:6380" "172.16.91.44:6380" "172.16.91.45:6380")
# 停 Slave
for node in "${SLAVES[@]}"; do
./redis-cli -a "$PASS" -h ${node%:*} -p ${node#*:} shutdown
done
# 停 Master
for node in "${MASTERS[@]}"; do
./redis-cli -a "$PASS" -h ${node%:*} -p ${node#*:} shutdown
done
# 删数据
rm -f /data/Seeyon/RedisServer/redis/node6379/dump.rdb /data/Seeyon/RedisServer/redis/node6380/dump.rdb
rm -f /data/Seeyon/RedisServer/redis/node6379/appendonly.aof /data/Seeyon/RedisServer/redis/node6380/appendonly.aof
# 启 Master
for node in "${MASTERS[@]}"; do
./redis-server /data/Seeyon/RedisServer/redis/node${node#*:}79/redis.conf
done
# 启 Slave
for node in "${SLAVES[@]}"; do
./redis-server /data/Seeyon/RedisServer/redis/node${node#*:}80/redis.conf
done
# 检查
./redis-cli -a "$PASS" -h 172.16.91.43 -p 6379 cluster info
./redis-cli -a "$PASS" -h 172.16.91.43 -p 6379 cluster nodes执行:
chmod +x restart_cluster.sh
./restart_cluster.sh✅ 最终效果:
- 所有节点恢复运行
- 所有主从关系正确且跨物理机
- 集群状态
ok - 下次直接用脚本即可安全重启










