把槽指派给节点
CLUSTER ADDSLOTS slot... 把尚未被任何节点认领的槽指派给当前节点,是手工搭建集群时分配键空间的命令。它只能处理无主槽:若想把其他节点正在负责的槽接过来,必须走迁移流程,先做状态标记再搬数据,直接添加会被拒绝。在全部 16384 个槽分配完毕之前,集群状态会持续显示为 fail。
基本信息
| 用法 | CLUSTER ADDSLOTS <槽编号> [槽编号 ...] |
|---|---|
| 约束 | 只能指派当前无主的槽 |
| 批量方式 | 7.0 起可用按区间分配的命令一次给一段 |
| 校验方式 | CLUSTER INFO 查看槽覆盖是否完整 |
| 常见划分 | 三主节点按三段区间平均分配 |
典型使用场景
- 手工搭建三主三从集群时给每个主节点划分槽区间
- 从备份恢复拓扑后重新指派槽,让集群回到可服务状态
- 排查集群状态长期为 fail,确认是否还有槽无人认领
- 新增主节点入群后为它追加槽区间
- 演练环境中重建一套小集群做功能验证
分配示例
分配示例
redis-cli -p 7000 CLUSTER ADDSLOTS $(seq 0 5460) # 第一个主节点承担前段槽
redis-cli -p 7001 CLUSTER ADDSLOTS $(seq 5461 10922) # 第二个主节点承担中段槽
redis-cli -p 7002 CLUSTER ADDSLOTS $(seq 10923 16383) # 第三个主节点承担后段槽
redis-cli -p 7000 CLUSTER INFO | grep -E 'cluster_state|cluster_slots_assigned' # 核对是否满 16384状态判读
| 观察项 | 含义 | 正常表现 |
|---|---|---|
| 已分配槽数 | 当前被认领的槽总数 | 达到 16384 才算完整 |
| 集群状态 | 整体可用标识 | 全部分配完并收敛后变为 ok |
| 槽覆盖 | 是否存在无主或重叠 | 每个槽恰好归属一个主节点 |
| 命令返回 | 分配是否成功 | 已占用时会整体报错而非部分成功 |
手工建集群时常见的划分方式是三段平均分配:前段、中段、后段各给一个主节点,随后再用从节点跟随对应主节点。
分配完成后集群状态可能仍为 fail,这是中间态,等全部槽有归属、拓扑收敛后才转为 ok,不必在这个阶段反复重试命令。