华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)
摘要:本期将详细介绍社区版Redis、kvrocks和Pika到GaussDB(for Redis)的迁移
本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)》,原文作者:高斯Redis官方博客 。
GaussDB(for Redis)是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,支持持久化存储。在保障数据库的高兼容、搞性价比、高可靠、无损扩容等特点的同时,GaussDB(for Redis)团队针对不同的数据库产品,为用户提供了多种数据迁移方案,本期将详细介绍社区版Redis、kvrocks和Pika到GaussDB(for Redis)的迁移。
1、Redis到GaussDB (for Redis)的迁移
社区版Redis作为非常受欢迎的内存数据库,因具有性能高,数据结构丰富等优点,得到广泛使用。GaussDB(for Redis)是兼容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(for Redis),完成迁移。
1.2 前提条件
- 部署迁移工具drs-redis。
- 保证迁移工具drs-redis、源端Redis和目标端GaussDB(for Redis)网络互通。
1.3 操作步骤
- 正确修改drs相关配置文件。
- 清理迁移程序中可能的遗留数据。
- 启动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(for Redis)的迁移,在此基础上,从GaussDB(for Redis)源码层面对Kvrocks的namespace功能进行适配。
迁移过程分为全量和增量两个阶段:迁移开始后,先进行全量迁移,此时对kvrocks打快照,并记录对应的数据版本(seq)。然后解析全量数据文件成redis命令写入GaussDB(for Redis)。全量迁移完成后进入持续的增量迁移过程,迁移工具循环给Kvrocks发送PSYNC命令,将获取到的增量数据不断转发给GaussDB(for Redis),完成增量迁移 。
2.2 前提条件
- 部署kvrocks2redis到独立主机。
- 确保源端、目标端、迁移工具之间网络互通。
- 源端Kvrocks实例提前做好数据备份。
- 目标端GaussDB(for Redis)实例清空全部数据。
2.3 操作步骤
- 修改迁移工具配置文件,填入源端kvrocks连接信息、目标端GaussDB (for Redis) 连接信息、源端kvrocks namespace到目标端GaussDB (for Redis) DB的映射关系。
- 确保配置文件内容正确。
- 启动迁移工具。
- 跟踪日志,确保全量迁移顺利完成,进入持续增量迁移过程。
- 进行验证。确保数据迁移后,目标端GaussDB (for Redis) 已正确加载全部数据。
- 待后续业务侧压力转移到GaussDB (for Redis) 后,停止增量迁移,即手动停止迁移工具的运行。
2.4 使用须知
- kvrocks2redis需要从Kvrocks提取数据到本地文件,并从中解析出命令发送到目标端GaussDB(for Redis) ,该过程中可能影响源端性能,但理论上不会有数据受损风险。
- 迁移工具运行过程中,若出现问题,迁移工具会自动停止,方便问题定位。
- 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(for Redis)实例网络互通。
3.3 操作步骤
- 正确修改pika-port配置文件;
- 启动迁移工具pika-port;
- 跟踪日志,确保全量迁移完成后停服,进入增量迁移过程;
- 增量迁移完成后,校验迁移数据的正确性和完备性;
- 校验完毕将业务切到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
华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)的更多相关文章
- 华为云PB级数据库GaussDB(for Redis)揭秘第八期:用高斯 Redis 进行计数
摘要:高斯Redis,计数的最佳选择! 一.背景 当我们打开手机刷微博时,就要开始和各种各样的计数器打交道了.我们注册一个帐号后,微博就会给我们记录一组数据:关注数.粉丝数.动态数-:我们刷帖时,关注 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致
摘要:在KV数据库领域,"强一致性"不仅是一个技术名词,它更是业务与运维的重要需求. 清明刚过,五一假期就要来了.大好春光,不如去婺源看油菜花吧!小云迅速打开APP刷出余票2张,赶 ...
- 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务
摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...
- 揭秘华为云GaussDB(for Influx)最佳实践:hint查询
摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...
- 升级的华为云“GaussDB”还能战否?
摘要:芯片.操作系统.数据库是现代信息技术领域的三大核心基础,做数据库,不仅需要技术和投入,对华为这种做通讯起家的企业,更需要的是一种并非玩票性质的态度. GaussDB,不仅蕴含着华为对数学和科学的 ...
- 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...
- 重磅!华为云社区·CSDN【寻找黑马程序员】有奖征文活动奖项公布!!
华为云社区·CSDN[寻找黑马程序员]第一期有奖征文活动在大家的鼎力支持下顺利落幕啦,非常感谢大家一直以来的支持~现在小宅就要隆重公布本次活动的奖项了!! 请各位获奖的伙伴在8月18日前私信联系提供联 ...
- 华为云Volcano:让企业AI算力像火山一样爆发
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 华为云MySQL金融版正式商用,高可靠的金融级数据库来了
摘要:全新三节点架构,基于深度优化的MGR组复制技术,提供金融级的数据一致性. 日前,华为云数据库MySQL 金融版正式商业化发布,MySQL金融版采用MGR技术,基于Paxos协议,采用一主两备三节 ...
- 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...
随机推荐
- VS Code C# 开发工具包正式发布
前言 微软于本月正式发布Visual Studio Code C#开发工具包,此前该开发套件已经以预览版的形式在6月份问世.经过4个月的测试和调整,微软修复了350多个问题,其中大部分是用户反馈导致的 ...
- K8s - 安装部署Kafka、Zookeeper集群教程(支持从K8s外部访问)
本文演示如何在K8s集群下部署Kafka集群,并且搭建后除了可以K8s内部访问Kafka服务,也支持从K8s集群外部访问Kafka服务.服务的集群部署通常有两种方式:一种是 StatefulSet,另 ...
- undefined reference to vtable for问题解决(QT)
主要在运行时出现 原因是在自定义类使用信号与槽,在创建文件时,未继承QObject类并且没有添加Q_OBJECT: 解决: 在需要的类中,添加Q_OBJECT,继承QObject类. 然后使用QTCr ...
- C# WebBrowser document.execCommand()解析
// // Summary: // 对文档执行指定的命令. // // Parameters: ...
- JavaScript:垃圾收集机制
JavaScript具有自动垃圾收集机制.也就是说,执行环境会负责管理代码执行过程中使用的内存.开发人员不必关心内存分配和回收问题. 垃圾收集机制的原理:找到不再继续使用的变量,然后进行释放其占用的内 ...
- QT(8)-QSpinBox
QSpinBox 1 介绍 QSpinBox 是 Qt 中的一种数字输入控件,支持整数和浮点数输入.它允许用户通过上下箭头或键盘输入来选择数字.您可以设置最小值.最大值和步长,以限制用户输入的范围.Q ...
- (int argc, char *argv[])在MCU中的调试使用
这里主要讲了基于RTT的 finsh->MSH_CMD_EXPORT 方法,在串口终端中调用自定义函数,并传入参数的方法. 在传统的MCU开发中 当我们需要测试一个函数在传入不同参数时的运算结果 ...
- Kafka 集群如何实现数据同步?
哈喽大家好,我是咸鱼 最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T 刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢 ...
- bool数据类型用法
1 来自百度 1.bool为布尔型用作逻辑判断 2 2.bool只有一个字节 3 3.bool取值false和true,0为false,非0为true.(例如-1和2都是true). 4 4.bool ...
- mysql group by 执行原理及千万级别count 查询优化
大家好,我是蓝胖子,前段时间mysql经常碰到慢查询报警,我们线上的慢sql阈值是1s,出现报警的表数据有 7000多万,经常出现报警的是一个group by的count查询,于是便开始着手优化这块, ...