*Redis CLUSTER SET-CONFIG-EPOCH 命令

CLUSTER SET-CONFIG-EPOCH 设置当前节点的配置纪元(config epoch),用于解决集群分裂(split-brain)后的配置冲突。


*语法

CLUSTER SET-CONFIG-EPOCH config-epoch

*参数说明

参数 类型 必填 说明
config-epoch Integer 配置纪元值,必须大于当前节点的 epoch

*返回值

  • OK:设置成功
  • Error:纪元值不合法、小于当前值或节点不允许设置

*时间复杂度

O(1)

*

*示例

*手动设置配置纪元

> CLUSTER SET-CONFIG-EPOCH 10
OK

*查看当前纪元

> CLUSTER INFO
...
cluster_current_epoch:15
cluster_my_epoch:10
...

*故障恢复场景

# 分裂后手动提升某个分片的 epoch
> CLUSTER SET-CONFIG-EPOCH 100
OK
> CLUSTER BUMPEPOCH
OK

*常见错误

错误 原因 解决
ERR Invalid config epoch 传入的 epoch 不是正整数 使用合法的整数值
ERR Config epoch is already higher 传入值小于等于当前 epoch 使用更大的值
ERR Node is not empty 节点已有槽位分配 仅在空节点或特定场景使用
ERR The slot is already busy 与其他节点的配置冲突 需要更复杂的冲突解决流程

*最佳实践

  • 普通场景不建议手动使用,纪元通常由集群自动管理(故障转移时自动递增)
  • 仅在集群分裂恢复、手动故障转移等高级场景使用
  • 设置前确认当前节点的 epoch(cluster_my_epoch in CLUSTER INFO
  • 必须设置一个足够大的值以确保覆盖冲突配置
  • 错误的 epoch 设置可能导致集群配置不一致,需谨慎操作

*FAQ

Q1: 什么是配置纪元(config epoch)? A: 配置纪元是集群用来标识配置版本的递增计数器。每个主节点有一个 epoch,故障转移后新主节点的 epoch 会更高,其他节点据此判断配置的新旧。

Q2: 什么时候需要手动设置? A: 极少需要。主要用于集群分裂恢复后强制某个节点的配置生效,或测试集群行为。

Q3: SET-CONFIG-EPOCH 和 BUMPEPOCH 有什么区别? A: SET-CONFIG-EPOCH 直接设置指定值;BUMPEPOCH 将当前节点的 epoch 递增 1。

Q4: 设置后其他节点会同步吗? A: 会。节点间通过心跳和 gossip 协议传播 epoch 信息,高 epoch 的配置会覆盖低 epoch 的配置。