写点什么

华为云 PB 级数据库 GaussDB(for Redis) 揭秘第十期:GaussDB(for Redis) 迁移系列(上)

发布于: 2021 年 05 月 12 日

​​​​摘要:本期将详细介绍社区版 Redis、kvrocks 和 Pika 到 GaussDB(for Redis)的迁移


本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(forRedis)迁移系列(上)》,原文作者:高斯 Redis 官方博客  。

 

GaussDB(for Redis)是一款基于计算存储分离架构,兼容 Redis 生态的云原生 NoSQL 数据库,基于共享存储池的多副本强一致机制,支持持久化存储。在保障数据库的高兼容、搞性价比、高可靠、无损扩容等特点的同时,GaussDB(for Redis)团队针对不同的数据库产品,为用户提供了多种数据迁移方案,本期将详细介绍社区版 Rediskvrocks Pika 到 GaussDB(for Redis)的迁移。

1、Redis 到 GaussDB (for Redis)的迁移

        

社区版 Redis 作为非常受欢迎的内存数据库,因具有性能高,数据结构丰富等优点,得到广泛使用。GaussDB(forRedis)是兼容 Redis 生态的持久化数据库,不仅提供优秀的读写性能,还提供数据持久化能力,依托超前的系统架构,以极低的成本保证了数据三副本强一致特性,可以避免社区版 Redis 需要 fork、成本高等问题。

1.1 迁移原理

        

使用华为云自研的迁移工具 drs-redis 进行源端 Redis 到目标端 GaussDB(for Redis)的迁移。迁移过程中,drs-redis 伪装成源端 Redis 的从节点运行,与源端 Redis 建立连接后,触发 Redis 的主从同步。源端 Redis 生成 RDB 文件,传输给 drs-redis 完成全量同步。然后发送缓冲区保存的所有写命令到 drs-redis 完成增量同步。 drs-redis 迁移工具接收并解析源端 Redis 的 RDB 文件,将解析后的数据通过 redis 命令的方式发送到 GaussDB(for Redis),然后以命令传播的方式将增量数据也发送到 GaussDB(forRedis),完成迁移。

1.2 前提条件


  • 部署迁移工具 drs-redis。

  • 保证迁移工具 drs-redis、源端 Redis 和目标端 GaussDB(for Redis)网络互通。

1.3 操作步骤


1.    正确修改 drs 相关配置文件。

2.    清理迁移程序中可能的遗留数据。

3.    启动 drs,跟踪日志,确保迁移正确进行。

1.4 使用须知


  • drs-redis 伪装成源端 Redis 的从节点,只读取源端的全量数据和增量命令,无数据受损风险。

  • 源端增加对 drs-redis 写数据的流程,因此性能会有轻微影响。

  • GaussDB(for Redis)支持多个数据库,若源端是单节点 Redis,需要保留多个数据库时,可以在 GaussDB(for Redis)侧开启 namespace 功能,避免将多个数据库的数据迁移到同一空间,造成数据丢失。

  • 如果之前源端不存在从节点,源端会新增 replication-buffer 来缓存增量命令。


问题:redis 主从同步的 replication-buffer 是 ring buffer,若写入 buffer 太快,会覆盖掉未发送给 drs-redis 的数据,源端 Redis 为了数据一致性会主动断开连接,造成迁移失败。


建议:迁移过程中,降低源端 Redis 写入数据的速率,在低压时间段进行迁移。配置 redis 的 client-output-buffer-limit 参数,适量增大 replication-buffer 的大小。

1.5 迁移性能参考


环境:源端单节点 Redis 和迁移工具 drs-redis 部署在华为云 8U32GB 的弹性云服务器上,目标端为 4U16GB,3 节点 GaussDB(for Redis)实例。


  • 场景一:


−     源端 replication buffer 采用默认值(slave 268435456 67108864 60),该默认值表示缓存积压数据超过 268435456bytes(256MB),或超过 67108864bytes(64MB)且持续 60s,源端会主动断开与从节点的连接。


−     源端写入速率 5MB/s,迁移过程可持续进行,不会产生源端 buffer 满造成的同步失败。


−     迁移工具读取数据的速率和源端写入速率一致。


  • 场景二:


−     源端 replication buffer 不做限制(config set"client-output-buffer-limit" "slave 0 0 0")。


−     源端写入速率 10MB/s,容量充足的情况下,迁移持续进行。


−     迁移工具读取数据的速率和源端写入速率一致。


结论: 在华为云环境,使用 8U32GB 弹性云服务器部署迁移工具,若源端 replication buffer 采用默认值,迁移可在源端 5MB/s 的写入速率下进行;若源端对 replication buffer 不做限制,迁移可在源端 10MB/s 的写入速率下进行。

2、Kvrocks 到 GaussDB(for Redis)的迁移

      

Kvrocks 是一款开源的兼容 Redis 生态的 NoSQL key-value 数据库,底层基于 RocksDB 实现,提供 namespace 功能支持数据分区。Kvrocks 集群管理功能相对薄弱,自建集群时需要与外部组件配合。Kvrocks 支持的 redis 命令也不够全面,例如缺少在消息流和统计场景经常使用的 stream 及 hyperloglog 数据结构。

      

GaussDB(for Redis)以不亚于 RedisCluster 的兼容度,使用户在应用时无需修改代码,可直接使用,100%兼容原生接口。GaussDB(for Redis)在适配 Kvrocks 业务的同时,还能克服器管理能力弱、对 Redis 兼容度不高等缺点。

2.1 迁移原理

        

使用开源工具 kvrocks2redis 进行 Kvrocks 到 GaussDB(forRedis)的迁移,在此基础上,从 GaussDB(for Redis)源码层面对 Kvrocks 的 namespace 功能进行适配。

        

迁移过程分为全量和增量两个阶段:迁移开始后,先进行全量迁移,此时对 kvrocks 打快照,并记录对应的数据版本(seq)。然后解析全量数据文件成 redis 命令写入 GaussDB(for Redis)。全量迁移完成后进入持续的增量迁移过程,迁移工具循环给 Kvrocks 发送 PSYNC 命令,将获取到的增量数据不断转发给 GaussDB(forRedis),完成增量迁移 。

2.2 前提条件


  • 部署 kvrocks2redis 到独立主机。

  • 确保源端、目标端、迁移工具之间网络互通。

  • 源端 Kvrocks 实例提前做好数据备份。

  • 目标端 GaussDB(forRedis)实例清空全部数据。

2.3 操作步骤


1.    修改迁移工具配置文件,填入源端 kvrocks 连接信息、目标端 GaussDB (for Redis) 连接信息、源端 kvrocks namespace 到目标端 GaussDB(for Redis) DB 的映射关系。


2.    确保配置文件内容正确。


3.    启动迁移工具。


4.    跟踪日志,确保全量迁移顺利完成,进入持续增量迁移过程。


5.    进行验证。确保数据迁移后,目标端 GaussDB (for Redis) 已正确加载全部数据。


6.    待后续业务侧压力转移到 GaussDB (for Redis) 后,停止增量迁移,即手动停止迁移工具的运行。

2.4 使用须知


  • kvrocks2redis 需要从 Kvrocks 提取数据到本地文件,并从中解析出命令发送到目标端 GaussDB(forRedis) ,该过程中可能影响源端性能,但理论上不会有数据受损风险。


  • 迁移工具运行过程中,若出现问题,迁移工具会自动停止,方便问题定位。


  • GaussDB(for Redis)从安全性角度出发,不提供清库语义命令,因此要在迁移开始前确保无数据。

3、Pika 到 GaussDB(for Redis)的迁移

        

Pika 是一个可持久化的大容量 Redis 存储服务,解决了 Redis 由于存储数据量巨大而导致内存不够用的容量瓶颈。但其集群管理功能较为薄弱,需要使用 twemproxy 或者 codis 实现静态数据分片,数据一致性较弱。同时由于数据全部存储在磁盘中,相比于社区版 Redis,性能明显下降。

        

GaussDB(for Redis)实现了冷热分离,解决了缓存(cache)与数据库(Data Base,DB)之间交互访问的问题,当用户数据量小于内存时可以达到和社区版 redis 相当的性能。通过 proxy 代理,使上层业务可以不感知内核处理扩缩容过程中的数据迁移。

3.1 迁移原理

        

使用开源迁移工具 pika-port 进行 Pika 到 GaussDB(for Redis)的迁移。pika-port 伪装成 Pika 的从节点运行,通过主从复制的方式进行数据迁移。Pika 主节点通过比较 pika-port 和自己的 binlog 偏移量判断做全量迁移还是增量迁移。如果需要做全量迁移,Pika 主节点会将全量数据快照发送给 pika-port,pika-port 将解析后的快照数据发送给 GaussDB(for Redis)。全量迁移结束后进入增量迁移,pika-port 将增量数据解析后以 redis 命令的形式发送给 GaussDB(for Redis)。



3.2 前提条件


  • 部署迁移工具 pika-port

  • 确保源端 Pika 实例、pika-port 和目标端 GaussDB(forRedis)实例网络互通。

3.3 操作步骤


1.    正确修改 pika-port 配置文件;

2.    启动迁移工具 pika-port;

3.    跟踪日志,确保全量迁移完成后停服,进入增量迁移过程;

4.    增量迁移完成后,校验迁移数据的正确性和完备性;

5.    校验完毕将业务切到 GaussDB (for Redis)。

3.4 使用须知


  • pika-port 伪装成源端 Pika 的从节点,只读取全量和增量数据,无数据受损风险。

  • 源端增加了和 pika-port 的主从同步流程,可能会影响源端性能。

  • 全量和增量结合迁移可以不停服,业务切入 GaussDB(for Redis)时短暂停服。

3.5 迁移性能参考


环境Pika(单节点)和 pika-port 同时部署在华为云 8U32GB 的弹性云服务器上,目标端为 8U16GB,3 节点 GaussDB(for Redis)实例。


预置数据:使用 memtier_benchmark 工具预置 200GB 数据。


迁移性能:约 50000qps。

4、结语

       

高斯 Redis 在社区版 Redis 的基础上,结合华为自研强一致存储 DFV Pool,具有强一致、秒扩容、超可用、低成本等优势,保证了计数的准确性、可靠性。


本文作者:华为云高斯 Redis 团队。

杭州西安深圳简历投递:yuwenlong4@huawei.com

更多技术文章,关注高斯 Redis 官方博客

https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 05 月 12 日阅读数: 38
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)