*Redis cluster-migration 命令

*语法

CLUSTER MIGRATION  | STATUS_<[ID_task-id] | [ALL]>>

CLUSTER MIGRATION 命令为 Redis 集群提供原子槽迁移功能。此命令允许您从其他节点导入槽,监控迁移任务的进度,以及取消正在进行的迁移。

*必需参数

subcommand

子命令指定要执行的操作:

  • IMPORT <start-slot> <end-slot> [<start-slot> <end-slot> ...]: 在目标主节点上执行。接受多个槽范围并触发指定范围的原子迁移。返回一个任务 ID,您可以用它来监控任务状态。

  • CANCEL <ID <task-id> | ALL>: 通过其 ID 取消正在进行的迁移任务,或如果指定了 ALL,则取消所有任务。注意:在源节点上取消任务不会停止目标节点上的迁移,目标节点将继续重试,直到它也被取消。

  • STATUS [ID <task-id> | ALL]: 显示当前和已完成原子槽迁移任务的状态。如果提供了特定的任务 ID,它仅返回该任务的详细信息。如果指定了 ALL,则返回所有进行中和已完成任务的状态。

*示例

将槽 0-1000 和 2000-3000 导入当前节点:

CLUSTER MIGRATION IMPORT 0 1000 2000 3000

检查所有迁移任务的状态:

CLUSTER MIGRATION STATUS ALL

检查特定迁移任务的状态:

CLUSTER MIGRATION STATUS ID 24cf41718b20f7f05901743dffc40bc9b15db339

取消特定迁移任务:

CLUSTER MIGRATION CANCEL ID 24cf41718b20f7f05901743dffc40bc9b15db339

取消所有迁移任务:

CLUSTER MIGRATION CANCEL ALL

*返回值说明

*注意事项

  • 原子槽迁移功能从 Redis 8.4.0 开始可用。
  • 在源节点上取消任务不会自动停止目标节点上的迁移。
  • CLUSTER MIGRATION STATUS 输出中,"state" 字段将对成功的操作显示 completed
  • "last_error" 字段为空的任务表示迁移过程中没有发生错误。

*迁移期间的键可见性

在原子槽迁移操作期间,导入或修剪正在进行时,以下命令可能会过滤掉未拥有槽中的键:

INFO KEYSPACE 命令将继续反映实际的键数量,包括正在导入的键。

*相关配置

  • cluster-slot-migration-handoff-max-lag-bytes: 槽快照完成后,如果剩余的复制流大小低于此阈值,源节点将暂停写入以移交槽所有权。较高的值会较早触发移交,但可能会导致较长的写入暂停。较低的值会导致较短的写入暂停,但在有稳定的传入写入时可能更难达到(默认值:1MB)。
  • cluster-slot-migration-write-pause-timeout: 源节点在 ASM 移交期间暂停写入的最大持续时间。如果目标节点未能在此时限内接管槽,源节点将认为迁移失败并恢复写入(默认值:10 秒)。