華為云企業級Redis揭秘第十期:從開源Redis、Kvrocks、Pika遷移到高斯Redis
【最新活動】企業級Redis專場熱銷中!首月免費,包年僅需4折!
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????? 操作步驟
正確修改drs相關配置文件。
清理遷移程序中可能的遺留數據。
啟動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????? 操作步驟
修改遷移工具配置文件,填入源端kvrocks連接信息、目標端GaussDB (for Redis) 連接信息、源端kvrocks namespace到目標端GaussDB (for Redis) DB的映射關系。
確保配置文件內容正確。
啟動遷移工具。
跟蹤日志,確保全量遷移順利完成,進入持續增量遷移過程。
進行驗證。確保數據遷移后,目標端GaussDB (for Redis) 已正確加載全部數據。
待后續業務側壓力轉移到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????? 操作步驟
正確修改pika-port配置文件;
啟動遷移工具pika-port;
跟蹤日志,確保全量遷移完成后停服,進入增量遷移過程;
增量遷移完成后,校驗遷移數據的正確性和完備性;
校驗完畢將業務切到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,具有強一致、秒擴容、超可用、低成本等優勢,保證了計數的準確性、可靠性。
杭州/西安/深圳簡歷投遞:yuwenlong4@huawei.com
GaussDB(for Redis)產品主頁:
https://www.huaweicloud.com/product/gaussdbforredis.html
更多技術文章,關注GaussDB(for Redis)官方博客:
https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813
MySQL Redis 云數據庫 GaussDB(for Redis) 數據庫 緩存
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。