華為雲PB級數據庫GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)遷移系列(上)


摘要:本期將詳細介紹社區版Redis、kvrocks和Pika到GaussDB(for Redis)的遷移

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

GaussDB(for Redis)是一款基於計算存儲分離架構,兼容Redis生態的雲原生NoSQL數據庫,基於共享存儲池的多副本強一致機制,支持持久化存儲。在保障數據庫的高兼容、搞性價比、高可靠、無損擴容等特點的同時,GaussDB(for Redis)團隊針對不同的數據庫產品,為用戶提供了多種數據遷移方案,本期將詳細介紹社區版Redis、kvrocks和Pika到GaussDB(for Redis)的遷移。

1、Redis到GaussDB (for Redis)的遷移

社區版Redis作為非常受歡迎的內存數據庫,因具有性能高,數據結構豐富等優點,得到廣泛使用。GaussDB(for Redis)是兼容Redis生態的持久化數據庫,不僅提供優秀的讀寫性能,還提供數據持久化能力,依托超前的系統架構,以極低的成本保證了數據三副本強一致特性,可以避免社區版Redis需要fork、成本高等問題。

1.1 遷移原理

使用華為雲自研的遷移工具drs-redis進行源端Redis到目標端GaussDB(for Redis)的遷移。遷移過程中,drs-redis偽裝成源端Redis的從節點運行,與源端Redis建立連接后,觸發Redis的主從同步。源端Redis生成RDB文件,傳輸給drs-redis完成全量同步。然后發送緩沖區保存的所有寫命令到drs-redis完成增量同步。 drs-redis遷移工具接收並解析源端Redis的RDB文件,將解析后的數據通過redis命令的方式發送到GaussDB(for Redis),然后以命令傳播的方式將增量數據也發送到GaussDB(for Redis),完成遷移。

1.2 前提條件

  • 部署遷移工具drs-redis。
  • 保證遷移工具drs-redis、源端Redis和目標端GaussDB(for Redis)網絡互通。

1.3 操作步驟

  1. 正確修改drs相關配置文件。
  2. 清理遷移程序中可能的遺留數據。
  3. 啟動drs,跟蹤日志,確保遷移正確進行。

1.4 使用須知

  • drs-redis偽裝成源端Redis的從節點,只讀取源端的全量數據和增量命令,無數據受損風險。
  • 源端增加對drs-redis寫數據的流程,因此性能會有輕微影響。
  • GaussDB(for Redis)支持多個數據庫,若源端是單節點Redis,需要保留多個數據庫時,可以在GaussDB(for Redis)側開啟namespace功能,避免將多個數據庫的數據遷移到同一空間,造成數據丟失。
  • 如果之前源端不存在從節點,源端會新增replication-buffer來緩存增量命令。

問題:redis主從同步的replication-buffer是ring buffer,若寫入buffer太快,會覆蓋掉未發送給drs-redis的數據,源端Redis為了數據一致性會主動斷開連接,造成遷移失敗。

建議:遷移過程中,降低源端Redis寫入數據的速率,在低壓時間段進行遷移。配置redis的client-output-buffer-limit參數,適量增大replication-buffer的大小。

1.5 遷移性能參考

環境:源端單節點Redis和遷移工具drs-redis部署在華為雲8U32GB的彈性雲服務器上,目標端為4U16GB,3節點GaussDB(for Redis)實例。

  • 場景一:

− 源端replication buffer采用默認值(slave 268435456 67108864 60),該默認值表示緩存積壓數據超過268435456bytes(256MB),或超過67108864bytes(64MB)且持續60s,源端會主動斷開與從節點的連接。

− 源端寫入速率5MB/s,遷移過程可持續進行,不會產生源端buffer滿造成的同步失敗。

− 遷移工具讀取數據的速率和源端寫入速率一致。

  • 場景二:

− 源端replication buffer不做限制(config set "client-output-buffer-limit" "slave 0 0 0")。

− 源端寫入速率10MB/s,容量充足的情況下,遷移持續進行。

− 遷移工具讀取數據的速率和源端寫入速率一致。

結論: 在華為雲環境,使用8U32GB彈性雲服務器部署遷移工具,若源端replication buffer采用默認值,遷移可在源端5MB/s的寫入速率下進行;若源端對replication buffer不做限制,遷移可在源端10MB/s的寫入速率下進行。

2、Kvrocks到GaussDB(for Redis)的遷移

Kvrocks是一款開源的兼容Redis生態的NoSQL key-value數據庫,底層基於RocksDB實現,提供namespace功能支持數據分區。Kvrocks集群管理功能相對薄弱,自建集群時需要與外部組件配合。Kvrocks支持的redis命令也不夠全面,例如缺少在消息流和統計場景經常使用的stream及hyperloglog數據結構。

GaussDB(for Redis)以不亞於RedisCluster的兼容度,使用戶在應用時無需修改代碼,可直接使用,100%兼容原生接口。GaussDB(for Redis)在適配Kvrocks業務的同時,還能克服器管理能力弱、對Redis兼容度不高等缺點。

2.1遷移原理

使用開源工具kvrocks2redis進行Kvrocks到GaussDB(for Redis)的遷移,在此基礎上,從GaussDB(for Redis)源碼層面對Kvrocks的namespace功能進行適配。

遷移過程分為全量和增量兩個階段:遷移開始后,先進行全量遷移,此時對kvrocks打快照,並記錄對應的數據版本(seq)。然后解析全量數據文件成redis命令寫入GaussDB(for Redis)。全量遷移完成后進入持續的增量遷移過程,遷移工具循環給Kvrocks發送PSYNC命令,將獲取到的增量數據不斷轉發給GaussDB(for Redis),完成增量遷移 。

2.2 前提條件

  • 部署kvrocks2redis到獨立主機。
  • 確保源端、目標端、遷移工具之間網絡互通。
  • 源端Kvrocks實例提前做好數據備份。
  • 目標端GaussDB(for Redis)實例清空全部數據。

2.3 操作步驟

  1. 修改遷移工具配置文件,填入源端kvrocks連接信息、目標端GaussDB (for Redis) 連接信息、源端kvrocks namespace到目標端GaussDB (for Redis) DB的映射關系。
  2. 確保配置文件內容正確。
  3. 啟動遷移工具。
  4. 跟蹤日志,確保全量遷移順利完成,進入持續增量遷移過程。
  5. 進行驗證。確保數據遷移后,目標端GaussDB (for Redis) 已正確加載全部數據。
  6. 待后續業務側壓力轉移到GaussDB (for Redis) 后,停止增量遷移,即手動停止遷移工具的運行。

2.4 使用須知

  • kvrocks2redis需要從Kvrocks提取數據到本地文件,並從中解析出命令發送到目標端GaussDB(for Redis) ,該過程中可能影響源端性能,但理論上不會有數據受損風險。
  • 遷移工具運行過程中,若出現問題,遷移工具會自動停止,方便問題定位。
  • GaussDB(for Redis)從安全性角度出發,不提供清庫語義命令,因此要在遷移開始前確保無數據。

3、Pika到GaussDB(for Redis)的遷移

Pika是一個可持久化的大容量Redis存儲服務,解決了Redis由於存儲數據量巨大而導致內存不夠用的容量瓶頸。但其集群管理功能較為薄弱,需要使用twemproxy或者codis實現靜態數據分片,數據一致性較弱。同時由於數據全部存儲在磁盤中,相比於社區版Redis,性能明顯下降。

GaussDB(for Redis)實現了冷熱分離,解決了緩存(cache)與數據庫(Data Base,DB)之間交互訪問的問題,當用戶數據量小於內存時可以達到和社區版redis相當的性能。通過proxy代理,使上層業務可以不感知內核處理擴縮容過程中的數據遷移。

3.1遷移原理

使用開源遷移工具pika-port進行Pika到GaussDB(for Redis)的遷移。pika-port偽裝成Pika的從節點運行,通過主從復制的方式進行數據遷移。Pika主節點通過比較pika-port和自己的binlog偏移量判斷做全量遷移還是增量遷移。如果需要做全量遷移,Pika主節點會將全量數據快照發送給pika-port,pika-port將解析后的快照數據發送給GaussDB(for Redis)。全量遷移結束后進入增量遷移,pika-port將增量數據解析后以redis命令的形式發送給GaussDB(for Redis)。

3.2 前提條件

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

3.3 操作步驟

  1. 正確修改pika-port配置文件;
  2. 啟動遷移工具pika-port;
  3. 跟蹤日志,確保全量遷移完成后停服,進入增量遷移過程;
  4. 增量遷移完成后,校驗遷移數據的正確性和完備性;
  5. 校驗完畢將業務切到GaussDB (for Redis).

3.4 使用須知

  • pika-port偽裝成源端Pika的從節點,只讀取全量和增量數據,無數據受損風險。
  • 源端增加了和pika-port的主從同步流程,可能會影響源端性能。
  • 全量和增量結合遷移可以不停服,業務切入GaussDB(for Redis)時短暫停服。

3.5 遷移性能參考

環境:Pika(單節點)和pika-port同時部署在華為雲8U32GB的彈性雲服務器上,目標端為8U16GB,3節點GaussDB(for Redis)實例。

預置數據:使用memtier_benchmark工具預置200GB數據。

遷移性能:約50000qps。

4、結語

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

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

杭州西安深圳簡歷投遞:yuwenlong4@huawei.com

更多技術文章,關注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM