華為云企業級Redis揭秘第十期:從開源Redis、Kvrocks、Pika遷移到高斯Redis

      網友投稿 1341 2022-05-29

      【最新活動】企業級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。

      華為云企業級Redis揭秘第十期:從開源Redis、Kvrocks、Pika遷移到高斯Redis

      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小時內刪除侵權內容。

      上一篇:青春,從無畏起步
      下一篇:linux目錄操作
      相關文章
      亚洲另类无码专区首页| 亚洲av极品无码专区在线观看| 亚洲中文字幕久久精品无码A| 亚洲成人一级电影| 亚洲av永久无码精品秋霞电影影院| 国产成人亚洲精品91专区手机| 男人的天堂av亚洲一区2区| 亚洲精品V天堂中文字幕| 亚洲av中文无码字幕色不卡| 亚洲人成色77777在线观看| 亚洲午夜理论片在线观看| 亚洲欧洲专线一区| 亚洲а∨精品天堂在线| 亚洲av无码成人精品区一本二本| 亚洲AV无码之国产精品| 成人亚洲国产精品久久| 亚洲精品视频免费观看| 亚洲中文久久精品无码ww16| 亚洲精品国产精品乱码不卡√ | 亚洲成色WWW久久网站| 亚洲国产精品一区二区成人片国内 | 日韩亚洲Av人人夜夜澡人人爽 | 91亚洲国产成人久久精品网站| 久久精品国产精品亚洲毛片| 亚洲黄色网站视频| 亚洲乱码中文论理电影| 亚洲综合无码一区二区痴汉| 亚洲午夜精品一区二区麻豆| 国产亚洲精品精品精品| 久久亚洲精品无码观看不卡| 亚洲国产一成人久久精品| 亚洲精品福利视频| 亚洲成a人不卡在线观看| 亚洲情A成黄在线观看动漫软件| 亚洲区日韩精品中文字幕| 亚洲国产精品成人一区| 亚洲欧洲∨国产一区二区三区| 亚洲国产精品自在线一区二区| 亚洲日韩乱码中文无码蜜桃臀 | 国产亚洲AV无码AV男人的天堂| 亚洲电影国产一区|