背景
为了应对更多的流量冲击,决定将业务的redis迁移到集群里。后端应用是golang开发的。
- 源: 单机redis
- 目标: 腾讯云redis集群3主0从
- 条件: 集群redis内已有数据,非空
迁移经过
1. DTS
先采用腾讯云官方的DTS切换方案,失败。失败原因: DTS只支持节点数据迁移到空集群。
2. 决定重构redis组件,按照下述流程完成迁移
重构逻辑:
- 第一步,所有应用双向写入源和目标redis,读写返回值取源返回值。
- 第二步,保持15天+。确保未同步的缓存正常失效,新缓存全量同步。
- 第三步,所有应用继续双向写入,但是读写返回值取目标redis
- 第四步,至此,写的是目标redis,读的也是目标redis,源redis正式退休,移除。
- 结束
实现详情
https://github.com/fwhezfwhez/redix