一、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. 迁移原理

2. 前提条件
部署迁移工具ssdb-port。
保证迁移工具ssdb-port、源端SSDB和目标端GaussDB(for Redis)网络互通。
3. 操作步骤
3.1 正确修改ssdb-port的配置文件conf。
3.2 使用./ssdb-port ssdb_port.conf命令启动进程,进行数据迁移。
3.3 跟踪迁移日志,评估迁移进度,迁移完成后,在高斯Redis实例上校验迁移数据的正确性和完备性。
3.4 校验完成后将业务切到GaussDB(for Redis)。
4. 使用须知
ssdb-port作为SSDB主节点的从节点,只读取全量和增量数据,无数据受损风险。
由于在源端使用ssdb-port迁移工具,源端SSDB性能会受到一定的影响。
全量迁移和增量迁移可以不停服,数据全部迁入GaussDB(for Redis)后需要短暂停服。
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生态提供了便利。
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.2 执行命令./leveldb-port ./leveldb-port.conf。
2.3 跟踪日志,判断迁移状态:
全量迁移完成,会打印"Full migrate finished";
增量迁移定时打印尚未完成的 wal 文件数及尚未发送出去的 kv 数。
2.4 数据验证:对 LevelDB 进行抽样验证,确保GaussDB(for Redis)加载数据正确。
2.5 服务切换:当增量迁移进入尾声时,将服务切换到GaussDB(for Redis)。
3. 使用须知
迁移工具需要部署在源端,对性能有一定消耗,可通过修改配置文件进行一定的控制。
迁移过程读取LevelDB的源数据文件,只读操作,理论上不会有数据受损风险。
迁移过程不需要停服。
若迁移过程出现故障,需要清理GaussDB(for Redis)实例,重新启动迁移。
三、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生态提供了便利。
1. 迁移原理
使用自研迁移工具rocksdb-port,和RocksDB部署在相同机器上,准备好配置文件,启动迁移即可自动完成全量与增量的迁移。全量迁移对RocksDB数据进行快照,然后扫描整个数据库,将数据打包成GaussDB(for Redis)识别的格式,发送到GaussDB(for Redis),具有很高的迁移效率。增量迁移解析RocksDB的wal文件,将RocksDB的操作解析出来,然后对其中的key进行分片,多线程进行发送。
2. 前提条件
部署迁移工具pika-port
确保源端Pika实例、pika-port和目标端GaussDB(for Redis)实例网络互通。
3. 操作步骤
3.1 准备工作:
将 rocksdb-port 部署在 rocksdb 同服务器上,确保与高斯 Redis 网络打通。
确保目标端GaussDB(for Redis)实例已清空。
修改配置文件。
3.2 启动迁移:执行命令./rocksdb-port ./rocksdb-port.conf
3.3 跟踪日志,判断迁移状态:
全量迁移完成,会打印"Full migrate finished";
增量迁移定时打印尚未解析的 wal 文件数及尚未发送出去的 kv 数。
3.4 数据验证:对 RocksDB 进行抽样验证,确保GaussDB(for Redis)加载数据正确。
3.5 服务切换:当增量迁移进入尾声时,将服务切换到GaussDB(for Redis)。
4. 使用须知
迁移工具需要部署在源端,对性能有一定消耗,可通过修改配置文件进行一定的控制。
迁移过程读取RocksDB的源数据文件,只读操作,理论上不会有数据受损风险。
迁移过程不需要停服。
若迁移过程出现故障,需要清理GaussDB(for Redis)实例,重新启动迁移。
四、结语
高斯 Redis 在社区版 Redis 的基础上,结合华为自研强一致存储DFV Pool,具有强一致、秒扩容、超可用、低成本等优势,保证了计数的准确性、可靠性。
本文作者:华为云高斯Redis团队。
杭州西安深圳简历投递:yuwenlong4@huawei.com



想看更多内容,点击“阅读原文”,立即观看





