首页/数据/Redis 进阶速查/CLUSTER SET-CONFIG-EPOCH 手工组网

CLUSTER SET-CONFIG-EPOCH 手工组网

手工组建集群时先为各节点设置互不相同的 config epoch,再执行 CLUSTER MEET 与槽分配,避免自动收敛产生冲突。

Redis 进阶速查数据更新于 2026-10-13

手工设置 config epoch 是干什么的

手工组建集群时,先给每个节点设置互不相同的 config epoch,再执行 CLUSTER MEET 与槽分配。config epoch 是节点的配置版本号,用于节点间解决状态冲突:epoch 相同的节点会被当成同一配置代,重复会引发持续的主从争夺与拓扑震荡。用 redis-cli --cluster create 自动组网时不需要手工设置。

基本信息

命令CLUSTER SET-CONFIG-EPOCH <n>
执行时机节点加入集群之前,且其 config epoch 仍为 0
取值要求每个节点互不相同,通常按顺序从小到大分配
冲突后果epoch 重复导致持续争主与拓扑震荡
持久化写入该节点的集群配置文件,重启后保持

手工组网步骤与检查点

步骤命令检查点
分配 epochCLUSTER SET-CONFIG-EPOCH n每个节点数值各不相同
节点互联CLUSTER MEETCLUSTER NODES 能看到全部节点
指派槽CLUSTER ADDSLOTS 或 redis-cli --cluster 分配16384 个槽全部有归属,无重叠
设置主从CLUSTER REPLICATE 或加节点时指定副本副本指向正确的主节点
最终核对CLUSTER INFO 与 CLUSTER NODES集群状态正常、槽范围与预期一致

示例

示例
redis-cli -p 7000 CLUSTER SET-CONFIG-EPOCH 1
redis-cli -p 7001 CLUSTER SET-CONFIG-EPOCH 2
redis-cli -p 7002 CLUSTER SET-CONFIG-EPOCH 3
redis-cli -p 7000 CLUSTER MEET 127.0.0.1 7001
redis-cli -p 7000 CLUSTER INFO | grep -E 'cluster_state|cluster_known_nodes'
redis-cli -p 7000 CLUSTER NODES | awk '{print $1, $3, $7}'   # 节点 ID、角色标记、epoch

典型使用场景

  • 脚本化组网:用命令行逐节点搭建集群,替代交互式工具
  • 容器与固定拓扑部署:节点地址可预知,便于固化命名
  • 从备份重建集群:按原拓扑恢复 role 与槽分配
  • 排查拓扑震荡:确认是否存在 epoch 冲突
  • 迁移演练:在测试环境复现生产拓扑
redis-cli --cluster create 会自动分配 epoch,手工设置只在自己写脚本建集群时才需要;两种方式不要混着用。
组网完成后做一次完整核对:节点数量、角色、epoch 与槽范围四项都要与设计一致,避免带着不一致的拓扑上线。
设置完 epoch 建议立刻核对 CLUSTER NODES 输出中的 epoch 列,确认没有重复值,再继续做节点互联与槽分配。
该命令只在节点尚未加入集群(config epoch 为 0)时可用,对已有集群成员执行会被拒绝;已入集群的节点想改 epoch 需要重建或清理其集群状态,风险较高。

易错点

  • epoch 手工写重,节点间持续争主,拓扑反复震荡
  • 组网顺序混乱导致槽分配与预期不符,事后逐个对账
  • 对已加入集群的节点重复执行设置命令,以为能改 epoch
  • 忘记核对 CLUSTER NODES 里的角色与槽范围,副本配错方向
  • 手工组网没有脚本与检查清单,重建时无法复现

数据来源与参考

  • Redis 官方文档:集群配置纪元
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌