*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_epochin 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 的配置。