*Redis CLUSTER RESET 命令
CLUSTER RESET 重置集群节点的状态,用于重新初始化节点。
*语法
CLUSTER RESET [HARD | SOFT]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| HARD / SOFT | Flag | 否 | 重置模式,默认 SOFT |
*重置模式对比
| 模式 | 行为 |
|---|---|
| SOFT | 保留节点 ID,清空槽位分配和已知节点信息,保留数据 |
| HARD | 完全重置:生成新节点 ID,清空所有状态和数据 |
*返回值
- OK:重置成功
- Error:节点不是主节点或集群模式未启用
*时间复杂度
O(N),N 为节点已知的集群节点数量和槽位数量。
*示例
*软重置(保留数据)
> CLUSTER RESET
OK
*硬重置(完全清空)
> CLUSTER RESET HARD
OK
*重置后重新加入集群
> CLUSTER RESET
OK
> CLUSTER MEET 192.168.1.10 6379
OK
> CLUSTER ADDSLOTSRANGE 0 5460
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR CLUSTER RESET can only be called in master nodes | 从节点不能执行 | 在主节点上执行 |
| ERR This instance has cluster support disabled | 未启用集群模式 | 开启 cluster-enabled yes |
| ERR Node is not empty | 硬重置前需要确认 | 确认已备份数据后再执行 HARD |
*最佳实践
- SOFT 重置用于重新配置节点但不丢失数据(如调整槽位分配后回退)
- HARD 重置用于完全重建节点(节点 ID 会改变,其他节点需用新 ID 引用)
- 生产环境执行前务必备份数据(尤其是 HARD 模式)
- 重置后节点不再属于任何集群,需要重新 MEET 和分配槽位
- 从集群中移除节点建议先用 CLUSTER FORGET 而非直接 RESET
*FAQ
Q1: SOFT 和 HARD 重置后节点 ID 会变吗? A: SOFT 保留原节点 ID;HARD 生成全新的随机节点 ID。
Q2: RESET 会删除数据吗? A: SOFT 不删除数据;HARD 会清空所有数据和集群状态。
Q3: 重置后如何恢复集群关系? A: 需要重新执行 CLUSTER MEET 与其他节点建立连接,然后重新分配槽位或建立复制关系。
Q4: 为什么从节点不能执行 RESET? A: 从节点的集群状态由主节点同步,直接重置会导致复制关系异常。需要从主节点端管理。