摘要:本期將詳細介紹 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 是一款使用 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 主動限制寫的問題,同時實現了冷熱分離,減少了存儲層的操做對性能形成的影響。安全
ssdb-port 做爲源端 SSDB 數據庫的主節點的從節點(replica)運行,經過主從複製的方式進行數據遷移。將獲取到的數據解析、轉換爲 Redis 支持的格式,併發送到配置文件中指定的 Redis 實例,遷移過程以下圖所示。全量同步完成後,SSDB 中新增的數據也會同步到 Redis 實例中。
服務器
保證遷移工具 ssdb-port、源端 SSDB 和目標端 GaussDB(for Redis)網絡互通。網絡
全量遷移和增量遷移能夠不停服,數據所有遷入 GaussDB(forRedis)後須要短暫停服。數據結構
遷移性能:約 3000qps。多線程
LevelDB 是一個開源的持久化 KV 單機數據庫引擎,具備很高的隨機寫,順序讀/寫性能,適合應用在寫多讀少的場景。其內部沒有設計成 C/S 網絡結構,使用時必須和服務部署在同一臺服務器,對於服務的部署、使用有較大的限制。相比於在 LevelDB 基礎上開發的 RocksDB, LevelDB 存在較多缺點,如沒法很好的使用多核服務器的計算性能,沒法支撐 TB 級數據存儲,不支持從 HDFS 讀取數據等。架構
GaussDB(for Redis)採用 RocksDB 做爲存儲引擎,兼容 Redis 協議,具備豐富的數據類型,能夠知足 LevelDB 的使用需求。同時 GaussDB(for Redis)對 RocksDB 進行深度定製,實現秒級分裂彈性擴容,擴縮容無需搬遷數據,快速而平滑,爲 LevelDB 業務轉到 Redis 生態提供了便利。併發
使用自研遷移工具 leveldb-port,和 LevelDB 部署在相同機器上,準備好配置文件,啓動遷移便可自動完成全量與增量的遷移。全量遷移對 LevelDB 數據進行快照,而後掃描整個數據庫,將數據打包成 GaussDB(forRedis)識別的格式,發送到 GaussDB(forRedis) ,具備很高的遷移效率。增量遷移解析 LevelDB 的 wal 文件,將 LevelDB 的操做解析出來,而後對其中的 key 進行分片,多線程進行發送。工具
將 leveldb-port 部署在 leveldb 所在服務器上,確保與高斯 Redis 網絡打通。
確保目標端 GaussDB(for Redis) 實例已清空,從安全性考慮,對外不提供 flushall 命令,遷移以前應保證明例內數據已清除。
修改配置文件。
全量遷移完成,會打印"Fullmigrate finished";
增量遷移定時打印還沒有完成的 wal 文件數及還沒有發送出去的 kv 數。
RocksDB 是 FaceBook 基於 LevelDB 開發的一個持久化 KV 單機數據庫引擎,具備強大的順序讀寫及隨機寫性能。相對於 LevelDB,RocksDB 作了許多優化,性能有了很大提高, 並且解決了 LevelDB 主動限制寫的問題。做爲一個數據庫引擎,RocksDB 沒有設計成 C/S 網絡結構,直接使用須要和服務部署在同一臺服務器,對於服務的部署、使用有較大的限制。
GaussDB(for Redis)採用 RocksDB 做爲存儲引擎,兼容 Redis 協議具備豐富的數據類型,能夠知足 RocksDB 的使用需求。同時 GaussDB(for Redis)對 RocksDB 進行深度定製,實現秒級分裂彈性擴容,擴縮容無需搬遷數據,快速而平滑,爲 RocksDB 業務轉到 Redis 生態提供了便利。
使用自研遷移工具 rocksdb-port,和 RocksDB 部署在相同機器上,準備好配置文件,啓動遷移便可自動完成全量與增量的遷移。全量遷移對 RocksDB 數據進行快照,而後掃描整個數據庫,將數據打包成 GaussDB(forRedis)識別的格式,發送到 GaussDB(forRedis),具備很高的遷移效率。增量遷移解析 RocksDB 的 wal 文件,將 RocksDB 的操做解析出來,而後對其中的 key 進行分片,多線程進行發送。
確保源端 Pika 實例、pika-port 和目標端 GaussDB(for Redis)實例網絡互通。
高斯 Redis 在社區版 Redis 的基礎上,結合華爲自研強一致存儲 DFV Pool,具備強一致、秒擴容、超可用、低成本等優點,保證了計數的準確性、可靠性。
本文做者:華爲雲高斯 Redis 團隊。
杭州西安深圳簡歷投遞:yuwenlong4@huawei.com
更多技術文章,關注高斯 Redis 官方博客:
https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813