目前有codis数据迁移到zk版pika的相关工具或项目吗?
近期工作需要实现从codis集群将数据平滑迁移到zk版的pika中。 请问当前是否有工具或正在项目可以支持以下的迁移需求
完整需求 1.从源实例(codis - 分片模式)同步数据到目标实例(pika - 经典模式) 2.支持全量同步阶段和增量同步阶段 3.数据迁移同步时,支持codis的指定slot数据分布到pika集群的指定位置 4.稳定性,保证数据完整性 5.不影响当前的业务可用性,尽可能不影响业务性能
社区中当前的aof_to_pika工具,存在以下问题:
- 无法实现增量同步
- 多次测试均发现,数据同步会异常中断,数据迁移不完整。目前不确定异常原因。 如下图,100w数据未完整同步,而实际生产环境的数据远大于此,因此aof_to_pika工具无法使用。
![]()
目前没有这样的工具。我觉着可以这样实现一个这样的功能。
- 创建一个sharding模式的pika-A,其中slot的数目与codis集群的数目相同。
- pika-A 中的slot与codis中的所有slot建立主从关系。此时pika-A 获取集群中的所有数据,但是数据是被分片的。
- pika-A 扫描sst文件的全量数据和binlog中的增量数据发送到pika-B 经典模式的pika中。
- 监控codis集群中的lag信息,当lag较少时停止codis集群的写。
- 等待pika-A中的增量同步完成。 基本逻辑参考了pika-port的功能。这里繁琐的操作的原因是rocksdb 做不到sst文件的合并,无法直接将slot的数据直接合并。
目前没有这样的工具。我觉着可以这样实现一个这样的功能。
- 创建一个sharding模式的pika-A,其中slot的数目与codis集群的数目相同。
- pika-A 中的slot与codis中的所有slot建立主从关系。此时pika-A 获取集群中的所有数据,但是数据是被分片的。
- pika-A 扫描sst文件的全量数据和binlog中的增量数据发送到pika-B 经典模式的pika中。
- 监控codis集群中的lag信息,当lag较少时停止codis集群的写。
- 等待pika-A中的增量同步完成。 基本逻辑参考了pika-port的功能。这里繁琐的操作的原因是rocksdb 做不到sst文件的合并,无法直接将slot的数据直接合并。
请问第三步 当lag较少时停止codis集群的写 是指要停止原codis集群业务写入吗 然后pika-A中的增量同步完成再切换过去吗 如果同步很快是否能不停业务写入直接切换呢
目前没有这样的工具。我觉着可以这样实现一个这样的功能。
- 创建一个sharding模式的pika-A,其中slot的数目与codis集群的数目相同。
- pika-A 中的slot与codis中的所有slot建立主从关系。此时pika-A 获取集群中的所有数据,但是数据是被分片的。
- pika-A 扫描sst文件的全量数据和binlog中的增量数据发送到pika-B 经典模式的pika中。
- 监控codis集群中的lag信息,当lag较少时停止codis集群的写。
- 等待pika-A中的增量同步完成。 基本逻辑参考了pika-port的功能。这里繁琐的操作的原因是rocksdb 做不到sst文件的合并,无法直接将slot的数据直接合并。
请问第三步 当lag较少时停止codis集群的写 是指要停止原codis集群业务写入吗 然后pika-A中的增量同步完成再切换过去吗 如果同步很快是否能不停业务写入直接切换呢
是的。如果业务允许少量的数据丢失是可以不停止codis的。原因是pika的同步是异步的过程。
目前没有这样的工具。我觉着可以这样实现一个这样的功能。
- 创建一个sharding模式的pika-A,其中slot的数目与codis集群的数目相同。
- pika-A 中的slot与codis中的所有slot建立主从关系。此时pika-A 获取集群中的所有数据,但是数据是被分片的。
- pika-A 扫描sst文件的全量数据和binlog中的增量数据发送到pika-B 经典模式的pika中。
- 监控codis集群中的lag信息,当lag较少时停止codis集群的写。
- 等待pika-A中的增量同步完成。 基本逻辑参考了pika-port的功能。这里繁琐的操作的原因是rocksdb 做不到sst文件的合并,无法直接将slot的数据直接合并。
请问第三点的功能实现社区有没有开发计划?当前pika的相关工具实现都是以cpp为主, 如果当前没有相关规划,后续基于go或其他语言贡献社区这边有没有相关的规范要求呢?
- 我觉着社区确实有sharding集群到主从集群迁移的需求。社区可以考虑实现。
- 基于pika现有代码及主从逻辑修改是成本最低的方式。
- 其他语言如go,可以参考go规范
如果社区能支持这个功能就太好了! 预计社区什么时候会讨论并更新开发计划呢?
时间上不太能保证。预计今年完成吧。
我司正在深入应用pika,对这个迁移功能关注度也很高。如果有帮得上忙的地方请联系我,我们愿意贡献自己的一份力。
我司正在深入应用pika,对这个迁移功能关注度也很高。如果有帮得上忙的地方请联系我,我们愿意贡献自己的一份力。
我这边基于阿里的redis-shake改造了一个go版本的迁移工具,目前正在公司内部测试使用。
介绍
codis2pika工具是基于阿里开源的redisshake工具改造的数据迁移工具。 主要目的是实现,从sharding模式的codis向经典模式的pika进行数据同步的功能。
目前实现功能:
codis2pika理论上支持从redis/codis 向pika迁移。 codis2pika支持增量和全量同步。 codis2pika支持实时同步(延迟约2-3s)迁移。 codis2pika支持开关添加自定义key前缀和slot重分配功能植入。
@kernelai 你好,请问下社区对于这类通用工具有哪些要求?如果可以满足的话,我们也想把这个工具贡献出来。
我司正在深入应用pika,对这个迁移功能关注度也很高。如果有帮得上忙的地方请联系我,我们愿意贡献自己的一份力。
我这边基于阿里的redis-shake改造了一个go版本的迁移工具,目前正在公司内部测试使用。
介绍
codis2pika工具是基于阿里开源的redisshake工具改造的数据迁移工具。 主要目的是实现,从sharding模式的codis向经典模式的pika进行数据同步的功能。
目前实现功能:
codis2pika理论上支持从redis/codis 向pika迁移。 codis2pika支持增量和全量同步。 codis2pika支持实时同步(延迟约2-3s)迁移。 codis2pika支持开关添加自定义key前缀和slot重分配功能植入。
@kernelai 你好,请问下社区对于这类通用工具有哪些要求?如果可以满足的话,我们也想把这个工具贡献出来。
非常感谢你们的贡献。核心功能能支持codis集群向主从集群的迁移。其他需求咱们可以迭代开发。我建议你们可以把工具放在公司的github下面,pika社区添加引用连接的方式。
方便在qq群里@下我吗?我跟您沟通下。
方便的话加一下pika开发群
大佬,已经在了