背景信息
- 你有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 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: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 - 下次直接用腳本即可安全重啓