关于华为云:华为云PB级数据库GaussDBfor-Redis揭秘第十期GaussDBfor-Redis迁移系列上

38次阅读

共计 4361 个字符,预计需要花费 11 分钟才能阅读完成。

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

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

GaussDB(for Redis) 是一款基于计算存储拆散架构,兼容 Redis 生态的云原生 NoSQL 数据库,基于共享存储池的多正本强统一机制,反对长久化存储。在保障数据库的高兼容、搞性价比、高牢靠、无损扩容等特点的同时,GaussDB(for Redis) 团队针对不同的数据库产品,为用户提供了多种数据迁徙计划,本期将具体介绍社区版 Redis、kvrocks 和 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 的映射关系。
  1. 确保配置文件内容正确。
  1. 启动迁徙工具。
  1. 跟踪日志,确保全量迁徙顺利完成,进入继续增量迁徙过程。
  1. 进行验证。确保数据迁徙后,指标端 GaussDB (for Redis) 已正确加载全副数据。
  1. 待后续业务侧压力转移到 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

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0