redis 扩容步骤

Redis Cluster 从 3 主 3 从 → 5 主 10 从,本质是:主节点 +2 个(要重新分槽),从节点 +7 个(要挂到对应主上)。


一、先理清目标拓扑

3 主 3 从扩到 5 主 10 从,从节点不是均摊那么简单,先确定归属,否则后面挂 slave 会乱。

常见两种规划(假设原主 M1/M2/M3,新主 M4/M5):

方案原 3 主每主几从新 2 主每主几从总从
A 均匀型223×2 + 2×2 = 10
B 倾斜型(M1 热点)M1=3, M2=2, M3=1各 2也是 10

下面按 方案 A(均匀 每主 2 从) 走,最常用。即:

  • 原 M1/M2/M3:各从 1→2(每台补 1 个从)
  • 新 M4/M5:各 2 从
  • 共新增 2 主 + 7 从 = 15 个节点加入集群

二、前置准备

1. 新节点机器 & 配置文件

新 2 主 + 7 从 共 9 个实例(端口自定,例 7006~7014),redis.conf 关键项:

cluster-enabled yes
cluster-config-file nodes-700x.conf
cluster-node-timeout 15000
port 700x
bind 0.0.0.0
requirepass "你的密码"
masterauth "你的密码"
dir /path/to/700x/

⚠️ 如果是克隆机,务必删掉旧的 nodes.conf / dump.rdb / appendonly.aof,否则 node ID 冲突,加不进集群。

2. 启动所有新实例(此时它们还是孤岛,没加入集群)

redis-server /path/to/700x/redis.conf

3. 确认原集群健康

redis-cli -a 密码 --cluster check 原任意节点IP:端口
# 或
redis-cli -a 密码 --cluster info  原任意节点IP:端口

3 主 3 从、slots 0–16383 全覆盖、无 fail 才能开始扩。


三、Step 1 — 加入 2 个新主节点

任选原集群一个已知节点当"领路人":

# 加 M4
redis-cli -a 密码 --cluster add-node 新M4_IP:7006 原M1_IP:7000
# 加 M5
redis-cli -a 密码 --cluster add-node 新M5_IP:7007 原M1_IP:7000

返回 [OK] New node added correctly 即成功。

此时 cluster nodes 能看到 M4/M5 是 master,但 slots = 0,还没数据。


四、Step 2 — Reshard 重新分槽(最关键一步)

目标:16384 槽从原 3 主 → 5 主均摊,每主约 3277 个。

交互式(推荐,看得清):

redis-cli -a 密码 --cluster reshard 原M1_IP:7000

再跑一次同样的流程,接收方换成 M5,再把 3277 槽从 M1/M2/M3 匀给 M5。

💡 也可以一次 reshard 把 M4+M5 都搞定,用 --cluster-from all --cluster-to M4_ID --cluster-slots 3277 这种非交互式写法也行。但第一次建议交互式,避免算错。

分槽完成后校验:

redis-cli -a 密码 --cluster check 原M1_IP:7000

5 主每主约 3277 slots,总和 16384 ✅


五、Step 3 — 加入 10 个从节点

原 M1/M2/M3 各补 1 从(S1b/S2b/S3b)

# 以 M1 补从为例,其余同理换 --cluster-master-id
redis-cli -a 密码 \
  --cluster add-node 新S1b_IP:7008 原M1_IP:7000 \
  --cluster-slave \
  --cluster-master-id <M1的nodeID>

新 M4 挂 2 从(S4a/S4b)、M5 挂 2 从(S5a/S5b)

# M4 的两个从
redis-cli -a 密码 --cluster add-node S4a_IP:7009 原M1_IP:7000 \
  --cluster-slave --cluster-master-id <M4的nodeID>
redis-cli -a 密码 --cluster add-node S4b_IP:7010 原M1_IP:7000 \
  --cluster-slave --cluster-master-id <M4的nodeID>

# M5 的两个从同理
...

10 从挂完,cluster nodes 里每台 master 后面 slaves: 2 就对了。


六、Step 4 — 最终校验

redis-cli -a 密码 --cluster info 任意节点:端口

期望输出类似:

172.16.x.1:7000 (M1) -> x keys | 3277 slots | 2 slaves
172.16.x.2:7001 (M2) -> x keys | 3277 slots | 2 slaves
172.16.x.3:7002 (M3) -> x keys | 3277 slots | 2 slaves
172.16.x.4:7006 (M4) -> x keys | 3277 slots | 2 slaves
172.16.x.5:7007 (M5) -> x keys | 3276 slots | 2 slaves

5 主 × 2 从 = 10 从,槽总和 16384 ✅


七、踩坑 & 生产注意

  • reshard 期间对业务几乎无感(Redis Cluster 迁移是逐 key MIGRATE,原子),但大 key 多的场景单槽迁移会卡,建议避开高峰单次 reshard slots 别太大(有资料建议 ≤1000 一批,5 主场景一次 3277 也能跑,看你 key 体量)。
  • 克隆/老实例复用一定要清 nodes.conf + RDB/AOF,否则 node ID 重复,集群直接拒。
  • 密码requirepass / masterauth 新老节点必须一致,否则主从建联失败。
  • 别在 reshard 中途改从属 / 下主节点,容易脑裂或槽态不一致。
  • 如果用了 Redis 6+ 的 CLUSTER LINK,可以观察迁移时的 link 流量;监控侧盯 cluster_statemigrating_slotskeyspace_hits/misses 就行。

八、总结

阶段动作关键命令
准备新 9 实例起好,清旧数据,配同密码redis-server redis.conf
加主2 新主空节点入集群redis-cli --cluster add-node 新主 旧主
分槽原 3 主各匀部分槽给 M4/M5,5 主均摊 16384redis-cli --cluster reshard
加从10 从分批 add-node --cluster-slave --cluster-master-id 挂到对应主同上
校验cluster info / cluster nodes 看 5 主 10 从、槽全

整个流程在线完成,不丢数据、不断业务,Redis Cluster 水平扩容的标准姿势就是这个顺序:先主 → 再槽 → 最后从。如果从节点想倾斜(某主热点多给它 3 从),把 Step 3 的 --cluster-master-id 换一下就行,不影响前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值