【摘要】云数据库 GaussDB(for Redis)作为华为云旗下企业级 Redis,致力于为客户提供稳固牢靠、超高并发,且可能极速弹性扩容的 KV 存储服务。
GaussDB(for Redis)是一款基于计算存储拆散架构,兼容 Redis 生态的云原生 NoSQL 数据库,基于共享存储池的多正本强统一机制,反对长久化存储。在保障数据库的高兼容、搞性价比、高牢靠、无损扩容等特点的同时,GaussDB(for Redis)团队针对不同的数据库产品,为用户提供了多种数据迁徙计划,本期将具体介绍 SSDB、LevelDB 和RocksDB到 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 实例中。
1.2 前提条件
- 部署迁徙工具 ssdb-port。
- 保障迁徙工具 ssdb-port、源端 SSDB 和指标端 GaussDB(for Redis)网络互通。
1.3 操作步骤
- 正确批改 ssdb-port 的配置文件 conf。
- 应用./ssdb-port ssdb_port.conf 命令启动过程,进行数据迁徙。
- 跟踪迁徙日志,评估迁徙进度,迁徙实现后,在高斯 Redis 实例上校验迁徙数据的正确性和齐备性。
- 校验实现后将业务切到 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 公布