Redis 命令详解:Cluster Management 命令

摘要

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
2
3
4
假设:
Slot = 100
源节点 A = a1b2c3...
目标节点 B = e5f6g7...

✅ Step 1:源节点标记迁出

1
2
3
# 在节点 A 上执行
CLUSTER SETSLOT 100 MIGRATING e5f6g7...
# 标记状态: Slot 100 正在从 A 迁往 B。

✅ Step 2:目标节点标记导入

1
2
3
# 在节点 B 上执行
CLUSTER SETSLOT 100 IMPORTING a1b2c3...
# 标记状态:Slot 100 正在从 A 导入到 B

✅ Step 3:迁移数据(CLUSTER GETKEYSINSLOT + MIGRATE),反复获取 key并迁移

1
2
3
4
5
6
# 在节点 A 上执行,找到 Slot 100 的 key,反复执行,直到 返回 0 个 key
CLUSTER GETKEYSINSLOT 100 1000

# 迁移数据,分批执行
MIGRATE <B-IP> <B-PORT> "" 0 5000 KEYS key1 key2 ... key1000
# 将数据从 A 节点迁移到 B 节点,可以多次执行

✅ Step 4:设置最终归属

1
2
3
# 在所有节点上执行
CLUSTER SETSLOT 100 NODE e5f6g7...
# 标记状态:Slot 100 正式归属 B。

✅ Step 5(可选):异常清理

1
2
3
4
5
# 🔍 在哪个节点看到 slot 仍然处于 MIGRATING / IMPORTING,就在哪个节点执行 STABLE。可以通过命令 CLUSTER NODES 查看
# 正常情况下不需要执行,只要运行了 CLUSTER SETSLOT 100 NODE e5f6g7... 就会自动清除这些状态
# 只有在 迁移异常或中断 时才需要。
CLUSTER SETSLOT 100 STABLE
# 用途:清除 MIGRATING / IMPORTING 状态
  • 单独 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 故障统计