0
点赞
收藏
分享

微信扫一扫

Redis Cluster 修复手册

兮城 21小时前 阅读 2


背景信息

  • 你有3台机器:172.16.91.43172.16.91.44172.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 shutdown

B. 删除持久化数据文件

如果是 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.aof

C. 启动主节点(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.conf

D. 启动从节点(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.conf

E. 检查集群健康

./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:ok
  • cluster_slots_failcluster_slots_pfail 都为 0
  • 每个 Master 有一个 Slave
  • Master 与 Slave 不在同一台机器

F. 如果从节点没加入集群

如果某个从节点启动后没有加入集群:

  1. 找到它对应的 Master 的节点ID(用 cluster nodes 查)
  2. 在该从节点上执行:

./redis-cli -h <Slave_IP> -p <Slave_Port> -a Seeyon123456 cluster replicate <Master_Node_ID>

这样它会绑定到对应的主节点。

G. 以后启动顺序注意事项

正确启动顺序:

  1. 先启动所有 Master(机器 43→44→45)
  2. 再启动所有 Slave(机器 43→44→45) 正确停止顺序:
  3. 先停止所有 Slave
  4. 再停止所有 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
  • 下次直接用脚本即可安全重启
举报

相关推荐

0 条评论