解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移

摘要:本期将详细介绍 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis)的迁移。

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

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

一、SSDB 到 GaussDB(for Redis)的迁移

SSDB 是一款使用 C/C++语言开发的高性能 NoSQL 数据库,和 Redis 具备类似的 API,支持 KV,list,map(hash),zset(sorted set),qlist(队列)等数据结构,所以获得了普遍的应用。SSDB 是一个持久化的 KV 存储系统,底层使用 leveldb 做为存储引擎。其业务直接与 LevelDB 交互,Compaction 等操做会对业务读写形成直接的影响。 GaussDB(forRedis)是一款兼容 Redis 生态的云原生 NoSQL 数据库,基于共享存储池的多副本强一致机制,以保证数据的安全性和可靠性。GaussDB(forRedis)使用 RocksDB 做为存储引擎,其性能与 leveldb 相比有了很大的提高, 并解决了 leveldb 主动限制写的问题,同时实现了冷热分离,减少了存储层的操做对性能形成的影响。安全

1.1 迁移原理

ssdb-port 做为源端 SSDB 数据库的主节点的从节点(replica)运行,经过主从复制的方式进行数据迁移。将获取到的数据解析、转换为 Redis 支持的格式,并发送到配置文件中指定的 Redis 实例,迁移过程以下图所示。全量同步完成后,SSDB 中新增的数据也会同步到 Redis 实例中。
image.png服务器

1.2 前提条件

  • 部署迁移工具 ssdb-port。
  • 保证迁移工具 ssdb-port、源端 SSDB 和目标端 GaussDB(for Redis)网络互通。网络

    1.3 操做步骤

  • 正确修改 ssdb-port 的配置文件 conf。
  1. 使用./ssdb-portssdb_port.conf 命令启动进程,进行数据迁移。
  2. 跟踪迁移日志,评估迁移进度,迁移完成后,在高斯 Redis 实例上校验迁移数据的正确性和完备性。
  3. 校验完成后将业务切到 GaussDB(for Redis)。

1.4 使用须知

  • ssdb-port 做为 SSDB 主节点的从节点,只读取全量和增量数据,无数据受损风险。
  • 因为在源端使用 ssdb-port 迁移工具,源端 SSDB 性能会受到必定的影响。
  • 全量迁移和增量迁移能够不停服,数据所有迁入 GaussDB(forRedis)后须要短暂停服。数据结构

    1.5 迁移性能参考

  • 环境:源端 SSDB 和 ssdb-port 同时部署在华为云 4U16GB 的弹性云服务器上,目标端为 8U16GB,3 节点 GaussDB(for Redis)实例。
  • 预置数据:使用 memtier_benchmark 工具预置 100GB 数据。
  • 迁移性能:约 3000qps。多线程

    二、LevelDB 到 GaussDB(for Redis)的迁移

    LevelDB 是一个开源的持久化 KV 单机数据库引擎,具备很高的随机写,顺序读/写性能,适合应用在写多读少的场景。其内部没有设计成 C/S 网络结构,使用时必须和服务部署在同一台服务器,对于服务的部署、使用有较大的限制。相比于在 LevelDB 基础上开发的 RocksDB, LevelDB 存在较多缺点,如没法很好的使用多核服务器的计算性能,没法支撑 TB 级数据存储,不支持从 HDFS 读取数据等。架构

GaussDB(for Redis)采用 RocksDB 做为存储引擎,兼容 Redis 协议,具备丰富的数据类型,能够知足 LevelDB 的使用需求。同时 GaussDB(for Redis)对 RocksDB 进行深度定制,实现秒级分裂弹性扩容,扩缩容无需搬迁数据,快速而平滑,为 LevelDB 业务转到 Redis 生态提供了便利。并发

2.1 迁移原理

使用自研迁移工具 leveldb-port,和 LevelDB 部署在相同机器上,准备好配置文件,启动迁移便可自动完成全量与增量的迁移。全量迁移对 LevelDB 数据进行快照,而后扫描整个数据库,将数据打包成 GaussDB(forRedis)识别的格式,发送到 GaussDB(forRedis) ,具备很高的迁移效率。增量迁移解析 LevelDB 的 wal 文件,将 LevelDB 的操做解析出来,而后对其中的 key 进行分片,多线程进行发送。工具

2.2 操做步骤

将 leveldb-port 部署在 leveldb 所在服务器上,确保与高斯 Redis 网络打通。

确保目标端 GaussDB(for Redis) 实例已清空,从安全性考虑,对外不提供 flushall 命令,迁移以前应保证明例内数据已清除。

修改配置文件。

  1. 准备工做:
  • 将 leveldb-port 部署在 leveldb 所在服务器上,确保与高斯 Redis 网络打通。
  • 确保目标端 GaussDB(for Redis) 实例已清空,从安全性考虑,对外不提供 flushall 命令,迁移以前应保证明例内数据已清除。
  • 修改配置文件。
  • 执行命令./leveldb-port./leveldb-port.conf。
  1. 跟踪日志,判断迁移状态:

全量迁移完成,会打印"Fullmigrate finished";
增量迁移定时打印还没有完成的 wal 文件数及还没有发送出去的 kv 数。

  1. 数据验证:对 LevelDB 进行抽样验证,确保 GaussDB (forRedis) 加载数据正确。
  2. 服务切换:当增量迁移进入尾声时,将服务切换到 GaussDB(for Redis)。

2.3 使用须知

  • 迁移工具须要部署在源端,对性能有必定消耗,可经过修改配置文件进行必定的控制。
  • 迁移过程读取 LevelDB 的源数据文件,只读操做,理论上不会有数据受损风险。
  • 迁移过程不须要停服。
  • 若迁移过程出现故障,须要清理 GaussDB(forRedis)实例,从新启动迁移。

三、RocksDB 到 GaussDB(for Redis)的迁移

RocksDB 是 FaceBook 基于 LevelDB 开发的一个持久化 KV 单机数据库引擎,具备强大的顺序读写及随机写性能。相对于 LevelDB,RocksDB 作了许多优化,性能有了很大提高, 并且解决了 LevelDB 主动限制写的问题。做为一个数据库引擎,RocksDB 没有设计成 C/S 网络结构,直接使用须要和服务部署在同一台服务器,对于服务的部署、使用有较大的限制。

GaussDB(for Redis)采用 RocksDB 做为存储引擎,兼容 Redis 协议具备丰富的数据类型,能够知足 RocksDB 的使用需求。同时 GaussDB(for Redis)对 RocksDB 进行深度定制,实现秒级分裂弹性扩容,扩缩容无需搬迁数据,快速而平滑,为 RocksDB 业务转到 Redis 生态提供了便利。

3.1 迁移原理

使用自研迁移工具 rocksdb-port,和 RocksDB 部署在相同机器上,准备好配置文件,启动迁移便可自动完成全量与增量的迁移。全量迁移对 RocksDB 数据进行快照,而后扫描整个数据库,将数据打包成 GaussDB(forRedis)识别的格式,发送到 GaussDB(forRedis),具备很高的迁移效率。增量迁移解析 RocksDB 的 wal 文件,将 RocksDB 的操做解析出来,而后对其中的 key 进行分片,多线程进行发送。

3.2 前提条件

  • 部署迁移工具 pika-port
  • 确保源端 Pika 实例、pika-port 和目标端 GaussDB(for Redis)实例网络互通。

    3.3 操做步骤

  • 准备工做:
  • 将 rocksdb-port 部署在 rocksdb 同服务器上,确保与高斯 Redis 网络打通。
  • 确保目标端 GaussDB(for Redis) 实例已清空,从安全性考虑,对外不提供 flushall 命令,迁移以前应保证明例内数据已清除。
    修改配置文件。
  • 启动迁移:执行命令./rocksdb-port./rocksdb-port.conf
  1. 跟踪日志,判断迁移状态:
  • 全量迁移完成,会打印"Fullmigrate finished";
  • 增量迁移定时打印还没有解析的 wal 文件数及还没有发送出去的 kv 数。
  • 数据验证:对 RocksDB 进行抽样验证,确保 GaussDB (forRedis) 加载数据正确。
  1. 服务切换:当增量迁移进入尾声时,将服务切换到 GaussDB(for Redis) 。

3.4 使用须知

  • 迁移工具须要部署在源端,对性能有必定消耗,可经过修改配置文件进行必定的控制。
  • 迁移过程读取 RocksDB 的源数据文件,只读操做,理论上不会有数据受损风险。
  • 迁移过程不须要停服。
  • 若迁移过程出现故障,须要清理 GaussDB(forRedis)实例,从新启动迁移。

四、结语

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

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

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

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

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

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

相关文章
相关标签/搜索