迁移 Codis 到 Redis 原生集群通常采用全量同步加增量捕获方案,适合需要消除代理层延迟的业务,风险边界在于多 Key 命令的兼容性限制。
先说结论:架构迁移核心是数据同步与客户端适配,建议在新业务或低峰期执行。
- 适合:追求原生性能且客户端支持 Cluster 协议的场景
- 重点看:多 Key 命令限制与 Slot 分布均衡性
- 别忽略:回滚方案与数据一致性校验
命令速用版
迁移前后使用以下命令检查集群状态与同步进度。
redis-cli -h <host> -p <port> cluster info
redis-cli -h <host> -p <port> info stats
为什么会这样
Codis 依赖代理层分片,Redis 集群依赖客户端分片,两者命令支持范围不同。
Codis 通过 Proxy 屏蔽了分片细节,支持部分非原生集群命令。Redis 原生集群要求多 Key 操作必须在同一 Slot,否则报错。迁移本质是从代理分片模式切换到哈希槽分片模式,客户端需要感知拓扑变化。
分步处理
按评估、同步、切换、观察四个阶段执行,每步需确认数据一致性。
- 兼容性评估:扫描业务代码,排查多 Key 命令(如 MGET 跨 Slot)。
- 数据同步:使用 redis-shake 等工具建立全量加增量同步通道。
- 流量切换:修改客户端配置指向新集群地址,采用灰度发布。
- 回滚准备:保留 Codis 写入通道,发现异常立即切回。
怎么验证是否生效
通过监控延迟、错误率及集群状态指标确认迁移效果。
- 检查 cluster_state 是否为 ok。
- 观察应用端 Redis 命令耗时是否有波动。
- 核对两端数据校验和或抽样对比。
常见坑
- 多 Key 命令未改造直接迁移会导致 Cluster 报错。
- 客户端库版本过旧不支持 Redis Cluster 协议。
- 大 Key 迁移期间可能阻塞同步链路。
常见问题
迁移过程中数据会丢失吗
正常同步流程不会丢失,但需确保增量同步追平后再切换。
客户端代码需要修改吗
若原客户端仅支持单点协议,需升级为支持 Cluster 模式的客户端库。
如何回滚到 Codis
保留 Codis 写入权限,切换配置指向 Codis 代理地址即可。