华为云企业级Redis:从SSDB、LevelDB、RocksDB迁移到高斯Redis

【摘要】 云数据库GaussDB(for Redis)作为华为云旗下企业级Redis,致力于为客户提供稳定可靠、超高并发,且能够极速弹性扩容的KV存储服务。
GaussDB(for Redis)是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,支持持久化存储。在保障数据库的高兼容、搞性价比、高可靠、无损扩容等特点的同时,GaussDB(for Redis)团队针对不同的数据库产品,为用户提供了多种数据迁移方案,本期将详细介绍SSDBLevelDBRocksDB到GaussDB(for Redis)的迁移。

1 SSDB到GaussDB(for Redis)的迁移

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

1.1 迁移原理

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

1.2 前提条件

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

1.3 操作步骤

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

1.4 使用须知

  • ssdb-port作为SSDB主节点的从节点,只读取全量和增量数据,无数据受损风险。
  • 由于在源端使用ssdb-port迁移工具,源端SSDB性能会受到一定的影响。
  • 全量迁移和增量迁移可以不停服,数据全部迁入GaussDB(for Redis)后需要短暂停服。

1.5 迁移性能参考

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

2 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(for Redis)识别的格式,发送到GaussDB(for Redis) ,具有很高的迁移效率。增量迁移解析LevelDB的wal文件,将LevelDB的操作解析出来,然后对其中的key进行分片,多线程进行发送。

2.2 操作步骤

  1. 准备工作:
  • 将 leveldb-port 部署在 leveldb 所在服务器上,确保与高斯 Redis 网络打通。
  • 确保目标端GaussDB (for Redis) 实例已清空。
  • 修改配置文件。

2. 执行命令./leveldb-port ./leveldb-port.conf。

3. 跟踪日志,判断迁移状态:

  • 全量迁移完成,会打印"Full migrate finished";
  • 增量迁移定时打印尚未完成的 wal 文件数及尚未发送出去的 kv 数。

4. 数据验证:对 LevelDB 进行抽样验证,确保GaussDB (for Redis) 加载数据正确。

5. 服务切换:当增量迁移进入尾声时,将服务切换到GaussDB (for Redis)。

2.3 使用须知

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

3 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(for Redis)识别的格式,发送到GaussDB(for Redis),具有很高的迁移效率。增量迁移解析RocksDB的wal文件,将RocksDB的操作解析出来,然后对其中的key进行分片,多线程进行发送。

3.2 前提条件

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

3.3 操作步骤

1. 准备工作:

  • 将 rocksdb-port 部署在 rocksdb 同服务器上,确保与高斯 Redis 网络打通。
  • 确保目标端GaussDB (for Redis) 实例已清空。
  • 修改配置文件。

2. 启动迁移:执行命令./rocksdb-port ./rocksdb-port.conf

3. 跟踪日志,判断迁移状态:

  • 全量迁移完成,会打印"Full migrate finished";
  • 增量迁移定时打印尚未解析的 wal 文件数及尚未发送出去的 kv 数。

4. 数据验证:对 RocksDB 进行抽样验证,确保 GaussDB (for Redis) 加载数据正确。

5. 服务切换:当增量迁移进入尾声时,将服务切换到 GaussDB (for Redis) 。

3.4 使用须知

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

4 结语

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

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容