社區版Redis是非常受歡迎的內存數據庫,具有性能高,數據結構豐富等優點。GeminiDB Redis是兼容Redis生態的持久化數據庫,不僅提供優秀的讀寫性能,還提供數據持久化能力,依托超前的系統架構,以極低的成本保證了數據三副本強一致特性,避免了社區版Redis需要Fork、成本高等問題。
遷移原理
使用自研的遷移工具drs-redis進行源端Redis到目標端GeminiDB Redis的遷移。
遷移過程中,drs-redis偽裝成源端Redis的從節點運行,與源端Redis建立連接后,觸發Redis的主從同步。源端Redis生成RDB文件,傳輸給drs-redis完成全量同步。然后發送緩沖區保存的所有寫命令到drs-redis完成增量同步。 drs-redis遷移工具接收并解析源端Redis的RDB文件,將解析后的數據通過redis命令的方式發送到GeminiDB Redis,然后以命令傳播的方式將增量數據也發送到GeminiDB Redis,完成遷移。
使用須知
drs-redis偽裝成源端Redis的從節點,只讀取源端的全量數據和增量命令,無數據受損風險。
源端增加對drs-redis寫數據的流程,因此性能會有輕微影響。
GeminiDB Redis支持多DB,若源端是單節點Redis,需要保留多DB時,可以在GeminiDB Redis側開啟namespace功能,避免將多DB數據遷移到同一空間,造成數據丟失。
如果之前源端不存在從節點,源端會新增replication-buffer來緩存增量命令。
問題 :redis主從同步的replication-buffer是ring buffer,若寫入buffer太快,會覆蓋掉未發送給drs-redis的數據,源端Redis為了數據一致性會主動斷開連接,造成遷移失敗。
建議 :遷移過程中,降低源端Redis寫入數據的速率,在低壓時間段進行遷移。配置redis的client-output-buffer-limit參數,適量增大replication-buffer的大小。
前提條件
部署遷移工具drs-redis。
保證遷移工具drs-redis、源端Redis和目標端GeminiDB Redis網絡互通。
操作步驟
如需進行Redis到GeminiDB Redis的遷移,您可以在管理控制臺右上角,選擇“工單 > 新建工單”,聯系技術支持進行處理。
遷移性能參考
環境:源端單節點Redis和遷移工具drs-redis部署在8U32GB的彈性云服務器上,目標端為4U16GB,3節點GeminiDB 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的寫入速率下進行。