Redis 命令详解:Cluster Management 命令
摘要
- 本文基于
redis-7.4.7 - Redis官网:https://redis.io/
Cluster Management 简介
- Redis Cluster Commands 是 Redis 分布式集群的“控制面命令集”,用于管理节点、分片、迁移、故障转移和路由策略,而不是用于业务数据读写。
Cluster Management 命令详解
-
通用参数说明
| 字段 | 说明 |
|---|---|
| slot | Hash Slot 编号,范围:0 – 16383 |
| nodeId | Redis Cluster 节点唯一 ID(CLUSTER NODES 可查询) |
一、路由与访问模式控制
| 命令 | 语法 | 说明 | 示例 |
|---|---|---|---|
| READONLY | READONLY |
允许客户端从副本读 | READONLY |
| READWRITE | READWRITE |
恢复只向主节点写 | READWRITE |
| ASKING | ASKING |
迁移过程中允许访问目标节点 | ASKING |
二、Slot 计算与查询
| 命令 | 语法 | 参数说明 | 用途 |
|---|---|---|---|
| CLUSTER KEYSLOT | CLUSTER KEYSLOT key |
key | 计算 key 所属 slot |
| CLUSTER COUNTKEYSINSLOT | CLUSTER COUNTKEYSINSLOT slot |
slot: 槽位 | 统计 slot 中 key 数量 |
| CLUSTER GETKEYSINSLOT | CLUSTER GETKEYSINSLOT slot count |
slot, count: 返回数量 | 获取 slot 中的 key |
三、Slot 分配与迁移(扩容核心)
| 命令 | 语法 | 说明 |
|---|---|---|
| CLUSTER ADDSLOTS | CLUSTER ADDSLOTS slot [slot ...] |
给节点分配 slot |
| CLUSTER ADDSLOTSRANGE | CLUSTER ADDSLOTSRANGE start end ... |
批量分配 slot |
| CLUSTER DELSLOTS | CLUSTER DELSLOTS slot [slot ...] |
删除 slot |
| CLUSTER DELSLOTSRANGE | CLUSTER DELSLOTSRANGE start end ... |
批量删除 slot |
| CLUSTER FLUSHSLOTS | CLUSTER FLUSHSLOTS |
清空节点 slot |
| CLUSTER SETSLOT | CLUSTER SETSLOT slot MIGRATING|IMPORTING|NODE nodeId|STABLE |
设置 slot 状态 |
| CLUSTER MIGRATION | CLUSTER MIGRATION |
查询迁移状态 |
| CLUSTER SLOT-STATS | CLUSTER SLOT-STATS |
slot 统计 |
| CLUSTER SLOTS | CLUSTER SLOTS |
查看 slot 分布 已过时,推荐使用 CLUSTER SHARDS |
| CLUSTER SHARDS | CLUSTER SHARDS |
按 shard 展示 |
-
实际应用: 集群扩容、数据再平衡、故障恢复、热迁移
-
通常由 redis-cli 或自动化工具封装执行。
CLUSTER SETSLOT
-
参数说明表
| 子命令 | 完整语法 | 参数含义 | Slot 状态语义 | 客户端行为影响 | 典型使用阶段 | 示例 |
|---|---|---|---|---|---|---|
| MIGRATING | CLUSTER SETSLOT <slot> MIGRATING <target-node-id> |
target-node-id:目标节点 ID(数据迁往的节点) | 当前节点正在把该 slot 的数据迁出 | - 若 key 仍在本节点 → 正常处理 - 若 key 已迁走 → 返回 ASK 重定向 |
槽迁移开始阶段(源节点) | CLUSTER SETSLOT 100 MIGRATING e5f6g7... |
| IMPORTING | CLUSTER SETSLOT <slot> IMPORTING <source-node-id> |
source-node-id:源节点 ID(数据来源) | 当前节点准备接收该 slot 的数据 | - 客户端必须先执行 ASKING 才允许访问- 否则返回 MOVED |
槽迁移开始阶段(目标节点) | CLUSTER SETSLOT 100 IMPORTING a1b2c3... |
| NODE | CLUSTER SETSLOT <slot> NODE <node-id> |
node-id:该 slot 的最终归属节点 ID | 明确该 slot 正式归属某节点 | - 集群路由立即更新 - 不再返回 ASK |
槽迁移完成阶段(所有节点) | CLUSTER SETSLOT 100 NODE e5f6g7... |
| STABLE | CLUSTER SETSLOT <slot> STABLE |
无附加参数 | 清除 IMPORTING / MIGRATING 标记,恢复稳定状态 | - 恢复正常路由 - 不改变 slot 所属节点 |
异常恢复 / 状态清理 | CLUSTER SETSLOT 100 STABLE |
-
一个完整 Slot 迁移示例
1 | 假设: |
✅ Step 1:源节点标记迁出
1 | # 在节点 A 上执行 |
✅ Step 2:目标节点标记导入
1 | # 在节点 B 上执行 |
✅ Step 3:迁移数据(CLUSTER GETKEYSINSLOT + MIGRATE),反复获取 key并迁移
1 | # 在节点 A 上执行,找到 Slot 100 的 key,反复执行,直到 返回 0 个 key |
✅ Step 4:设置最终归属
1 | # 在所有节点上执行 |
✅ Step 5(可选):异常清理
1 | # 🔍 在哪个节点看到 slot 仍然处于 MIGRATING / IMPORTING,就在哪个节点执行 STABLE。可以通过命令 CLUSTER NODES 查看 |
-
单独 MIGRATE 与 Cluster Slot MIGRATE 对比
| 维度 | MIGRATE 命令 | Redis Cluster Slot 迁移 |
|---|---|---|
| 迁移对象 | 单个或多个 Key | 一个或多个 Slot(包含成千上万 key) |
| 是否改变 slot 归属 | ❌ 不改变 | ✅ 会改变 |
| 客户端感知 | 客户端无感,但可能访问到旧节点失败 | 客户端自动重定向(MOVED / ASK) |
| 自动路由支持 | ❌ | ✅ |
| 原子性粒度 | 单次 MIGRATE 是原子 | Slot 迁移是分阶段的 |
| 支持在线迁移 | ⚠️ 可以,但业务需自行控制 | ✅ 天生支持在线迁移 |
| 失败恢复能力 | ❌ 需要人工兜底 | ✅ Cluster 协议自动修复 |
| 运维复杂度 | 低 | 高 |
| 自动化程度 | 低(需要脚本) | 高(redis-cli --cluster、运维平台) |
| 典型用途 | 数据搬运、修复、临时迁移 | 扩容、缩容、负载均衡 |
四、节点管理与拓扑
| 命令 | 语法 | 说明 |
|---|---|---|
| CLUSTER MEET | CLUSTER MEET ip port |
将指定的节点加入当前集群 |
| CLUSTER FORGET | CLUSTER FORGET nodeId |
从集群移除节点 |
| CLUSTER NODES | CLUSTER NODES |
查看节点列表 |
| CLUSTER LINKS | CLUSTER LINKS |
节点通信链路 |
| CLUSTER MYID | CLUSTER MYID |
当前节点 ID |
| CLUSTER MYSHARDID | CLUSTER MYSHARDID |
当前 shard ID |
| CLUSTER REPLICAS | CLUSTER REPLICAS nodeId |
查看指定节点的副本 |
| CLUSTER SLAVES | CLUSTER SLAVES nodeId |
旧命令(等价 replicas) |
| CLUSTER REPLICATE | CLUSTER REPLICATE nodeId |
将指定的节点设置为当前节点的副本 |
五、故障转移与高可用
| 命令 | 语法 | 说明 |
|---|---|---|
| CLUSTER FAILOVER | CLUSTER FAILOVER [FORCE|TAKEOVER] |
手动触发主从切换 |
| CLUSTER COUNT-FAILURE-REPORTS | CLUSTER COUNT-FAILURE-REPORTS nodeId |
故障投票统计 |
六、集群配置与内部控制
| 命令 | 语法 | 说明 |
|---|---|---|
| CLUSTER RESET | CLUSTER RESET [HARD|SOFT] |
重置节点 |
| CLUSTER SAVECONFIG | CLUSTER SAVECONFIG |
保存配置 |
| CLUSTER SET-CONFIG-EPOCH | CLUSTER SET-CONFIG-EPOCH epoch |
设置配置版本 |
| CLUSTER BUMPEPOCH | CLUSTER BUMPEPOCH |
自增 epoch |
| CLUSTER INFO | CLUSTER INFO |
集群状态 |
| CLUSTER COUNT-FAILURE-REPORTS | CLUSTER COUNT-FAILURE-REPORTS nodeId |
故障统计 |