解讀 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的遷移

摘要:本期將詳細介紹 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis)的遷移。

本文分享自華爲雲社區《華爲雲PB級數據庫GaussDB(for Redis)揭祕第十一期:GaussDB(forRedis)遷移系列(下)》,原文作者:高斯 Redis 官方博客 。

GaussDB(for Redis)是一款基於計算存儲分離架構,兼容 Redis 生態的雲原生 NoSQL 數據庫,基於共享存儲池的多副本強一致機制,支持持久化存儲。在保障數據庫的高兼容、搞性價比、高可靠、無損擴容等特點的同時,GaussDB(forRedis)團隊針對不同的數據庫產品,爲用戶提供了多種數據遷移方案,本期將詳細介紹 SSDBLevelDB  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(forRedis)是一款兼容 Redis 生態的雲原生 NoSQL 數據庫,基於共享存儲池的多副本強一致機制,以保證數據的安全性和可靠性。GaussDB(forRedis)使用 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-portssdb_port.conf 命令啓動進程,進行數據遷移。

3. 跟蹤遷移日誌,評估遷移進度,遷移完成後,在高斯 Redis 實例上校驗遷移數據的正確性和完備性。

4. 校驗完成後將業務切到 GaussDB(for Redis)。

1.4 使用須知

  • ssdb-port 作爲 SSDB 主節點的從節點,只讀取全量和增量數據,無數據受損風險。
  • 由於在源端使用 ssdb-port 遷移工具,源端 SSDB 性能會受到一定的影響。
  • 全量遷移和增量遷移可以不停服,數據全部遷入 GaussDB(forRedis)後需要短暫停服。

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(forRedis)識別的格式,發送到 GaussDB(forRedis) ,具有很高的遷移效率。增量遷移解析 LevelDB 的 wal 文件,將 LevelDB 的操作解析出來,然後對其中的 key 進行分片,多線程進行發送。

2.2 操作步驟

將 leveldb-port 部署在 leveldb 所在服務器上,確保與高斯 Redis 網絡打通。

確保目標端 GaussDB(for Redis) 實例已清空,從安全性考慮,對外不提供 flushall 命令,遷移之前應保證實例內數據已清除。

修改配置文件。

1. 準備工作:

  • 將 leveldb-port 部署在 leveldb 所在服務器上,確保與高斯 Redis 網絡打通。
  • 確保目標端 GaussDB(for Redis) 實例已清空,從安全性考慮,對外不提供 flushall 命令,遷移之前應保證實例內數據已清除。
  • 修改配置文件。

1. 執行命令./leveldb-port./leveldb-port.conf。

2. 跟蹤日誌,判斷遷移狀態:

  • 全量遷移完成,會打印"Fullmigrate finished";
  • 增量遷移定時打印尚未完成的 wal 文件數及尚未發送出去的 kv 數。

1. 數據驗證:對 LevelDB 進行抽樣驗證,確保 GaussDB (forRedis) 加載數據正確。

2. 服務切換:當增量遷移進入尾聲時,將服務切換到 GaussDB(for Redis)。

2.3 使用須知

  • 遷移工具需要部署在源端,對性能有一定消耗,可通過修改配置文件進行一定的控制。
  • 遷移過程讀取 LevelDB 的源數據文件,只讀操作,理論上不會有數據受損風險。
  • 遷移過程不需要停服。
  • 若遷移過程出現故障,需要清理 GaussDB(forRedis)實例,重新啓動遷移。

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(forRedis)識別的格式,發送到 GaussDB(forRedis),具有很高的遷移效率。增量遷移解析 RocksDB 的 wal 文件,將 RocksDB 的操作解析出來,然後對其中的 key 進行分片,多線程進行發送。

3.2 前提條件

  • 部署遷移工具 pika-port
  • 確保源端 Pika 實例、pika-port 和目標端 GaussDB(for Redis)實例網絡互通。

3.3 操作步驟

1. 準備工作:

  • 將 rocksdb-port 部署在 rocksdb 同服務器上,確保與高斯 Redis 網絡打通。
  • 確保目標端 GaussDB(for Redis) 實例已清空,從安全性考慮,對外不提供 flushall 命令,遷移之前應保證實例內數據已清除。
  • 修改配置文件。

1. 啓動遷移:執行命令./rocksdb-port./rocksdb-port.conf

2. 跟蹤日誌,判斷遷移狀態:

  • 全量遷移完成,會打印"Fullmigrate finished";
  • 增量遷移定時打印尚未解析的 wal 文件數及尚未發送出去的 kv 數。

1. 數據驗證:對 RocksDB 進行抽樣驗證,確保 GaussDB (forRedis) 加載數據正確。

2. 服務切換:當增量遷移進入尾聲時,將服務切換到 GaussDB(for Redis) 。

3.4 使用須知

  • 遷移工具需要部署在源端,對性能有一定消耗,可通過修改配置文件進行一定的控制。
  • 遷移過程讀取 RocksDB 的源數據文件,只讀操作,理論上不會有數據受損風險。
  • 遷移過程不需要停服。
  • 若遷移過程出現故障,需要清理 GaussDB(forRedis)實例,重新啓動遷移。

4、結語

高斯 Redis 在社區版 Redis 的基礎上,結合華爲自研強一致存儲 DFV Pool,具有強一致、秒擴容、超可用、低成本等優勢,保證了計數的準確性、可靠性。

本文作者:華爲雲高斯 Redis 團隊。

杭州西安深圳簡歷投遞:[email protected]

更多技術文章,關注高斯 Redis 官方博客:

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

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章