首页/数据/Redis 进阶速查/配置纪元(epoch)与冲突解决

配置纪元(epoch)与冲突解决

每个节点维护 config epoch:槽归属冲突时纪元大者胜出;从节点在故障切换后递增纪元并广播,避免旧信息覆盖新拓扑。

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

纪元决定谁说的算

配置纪元(config epoch)是集群处理「同一个槽被两个节点同时声称拥有」时的仲裁依据:纪元更大的声明胜出。从节点在故障切换成功后提升自己的纪元并广播出去,旧的信息就不容易覆盖新拓扑,集群因此能自动收敛。

基本信息

作用槽归属冲突时的仲裁依据
增长时机故障切换成功、手工执行 CLUSTER BUMPEPOCH
观察位置CLUSTER NODES 每行的纪元列、CLUSTER INFO
相关命令CLUSTER BUMPEPOCH、CLUSTER SET-CONFIG-EPOCH

典型使用场景

  • 诊断拓扑长时间不收敛的问题
  • 理解切换后槽归属如何自动更新
  • 排查两个节点争抢同一个槽的现象
  • 手工组网后核对各节点纪元是否合理
  • 分析节点被误判失败后的恢复过程

查看纪元

查看纪元
# 各节点视角的拓扑,行内可以看到纪元与槽归属
redis-cli -p 7000 CLUSTER NODES
# 集群整体纪元与本地纪元
redis-cli -p 7000 CLUSTER INFO | grep -E 'cluster_current_epoch|cluster_my_epoch'
# 槽与节点的对应关系,定位冲突的槽
redis-cli -p 7000 CLUSTER SLOTS
# 手工抬高本节点纪元:非常规操作,理解影响后再执行
redis-cli -p 7000 CLUSTER BUMPEPOCH

输出读法

字段含义异常表现
cluster_my_epoch本节点的配置纪元长期为 0 说明还没参与过仲裁
cluster_current_epoch集群当前最大纪元停滞说明从未发生过切换
NODES 中的纪元列各节点声明的纪元出现重复值可能引发槽争抢
槽范围列该节点声称拥有的槽两个节点声明同一槽即为冲突
节点状态标记fail、handshake 等长期残留说明认知未收敛
纪元机制的目的就是让集群在信息不一致时自动收敛,多数情况下无需人工干预;拓扑迟迟不稳定时,应该对比各节点的输出差异,而不是急于重置。
CLUSTER BUMPEPOCH 会抬高本节点的话语权,属于非常规操作;在不理解槽归属影响的情况下执行,可能引发槽的临时争抢。

易错点

  • 把拓扑不收敛当网络故障处理 → 实际是纪元或槽声明冲突,重启节点没有帮助 → 对比各节点 CLUSTER NODES 输出找差异
  • 手工 BUMPEPOCH 想「修正」状态 → 可能造成槽争抢与短暂不可用 → 先确认冲突根因,必要时按手册步骤操作
  • 重建节点后不清理旧节点 → 旧节点的纪元与槽声明仍在名册里干扰判断 → 用 CLUSTER FORGET 彻底剔除
  • 只看单个节点的输出 → 得出「集群一切正常」的错误结论 → 至少对比多数节点的视图

数据来源与参考

  • Redis 官方文档:集群纪元与冲突解决说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌