共计 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 操作步骤
- 正确批改 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(forRedis) 的迁徙,在此基础上,从 GaussDB(for Redis) 源码层面对 Kvrocks 的 namespace 性能进行适配。
迁徙过程分为全量和增量两个阶段:迁徙开始后,先进行全量迁徙,此时对 kvrocks 打快照,并记录对应的数据版本(seq)。而后解析全量数据文件成 redis 命令写入 GaussDB(for Redis)。全量迁徙实现后进入继续的增量迁徙过程,迁徙工具循环给 Kvrocks 发送 PSYNC 命令,将获取到的增量数据一直转发给 GaussDB(forRedis),实现增量迁徙。
2.2 前提条件
- 部署 kvrocks2redis 到独立主机。
- 确保源端、指标端、迁徙工具之间网络互通。
- 源端 Kvrocks 实例提前做好数据备份。
- 指标端 GaussDB(forRedis) 实例清空全副数据。
2.3 操作步骤
- 批改迁徙工具配置文件,填入源端 kvrocks 连贯信息、指标端 GaussDB (for Redis) 连贯信息、源端 kvrocks namespace 到指标端 GaussDB(for Redis) DB 的映射关系。
- 确保配置文件内容正确。
- 启动迁徙工具。
- 跟踪日志,确保全量迁徙顺利完成,进入继续增量迁徙过程。
- 进行验证。确保数据迁徙后,指标端 GaussDB (for Redis) 已正确加载全副数据。
- 待后续业务侧压力转移到 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 操作步骤
- 正确批改 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
点击关注,第一工夫理解华为云陈腐技术~