华为云企业级redis揭秘第十一期:从ssdb、leveldb、rocksdb迁移到高斯redis-4008云顶国际网站

高斯redis官方博客 发表于 2021/05/11 15:07:40 2021/05/11
【摘要】 云数据库gaussdb(for redis)作为华为云旗下企业级redis,致力于为客户提供稳定可靠、超高并发,且能够极速弹性扩容的kv存储服务。


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

        ssdb是一款使用c/c 语言开发的高性能nosql数据库,和redis具有相似的api,支持kvlistmap(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实例中。



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      迁移性能参考

  • 环境:源端ssdbssdb-port同时部署在华为云4u16gb的弹性云服务器上,目标端为8u16gb3节点gaussdb(for redis)实例。
  • 预置数据:使用memtier_benchmark工具预置100gb数据。
  • 迁移性能:约3000qps

        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) ,具有很高的迁移效率。增量迁移解析leveldbwal文件,将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)实例,重新启动迁移。

        rocksdbfacebook基于leveldb开发的一个持久化kv单机数据库引擎,具有强大的顺序读写及随机写性能。相对于leveldbrocksdb做了许多优化,性能有了很大提升, 而且解决了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),具有很高的迁移效率。增量迁移解析rocksdbwal文件,将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)实例,重新启动迁移。

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


本文作者:华为云数据库gaussdb(for redis)团队

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

gaussdb(for redis)产品4008云顶国际网站主页:

更多技术文章,关注gaussdb(for redis)官方博客:

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

【4008云顶国际集团的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。