纪元决定谁说的算
配置纪元(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 会抬高本节点的话语权,属于非常规操作;在不理解槽归属影响的情况下执行,可能引发槽的临时争抢。