每日聚焦:【Redis 技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰指南(scan模式遷移)

2023-01-09 14:17:34 來源:51CTO博客

數據遷移方式

對于大多數場景下的Redis的數據遷移,還是比較推薦大家參考我之前的前兩篇文章。

【Redis 技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰指南(在線同步數據)【Redis 技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰指南(離線同步數據)

scan模式在線數據遷移的場景和原因

但是還有一種常見是前兩篇文章無法實現的,就是當云廠商出于種種考慮禁用了Redis的 psync 命令時,前述方案不可用。 對于這種情況可以使用redis-shake的scan模式來進行數據遷移。


(資料圖片僅供參考)

scan模式的簡單原理

原理是調用scan命令來獲取 Redis 中的 key,然后使用 dump 命令獲取 key 的內容,最終使用 restore 命令恢復 key 至目的端。

scan模式的局限性

如果某個 key 在遷移過程中一直存在,scan 模式能保證他一定被遷移如果某個 key 在遷移過程中不是一直存在,scan 模式不保證其一定被遷移如果某個 key 在遷移過程中被修改,scan 模式不保證修改能同步到對端可見 scan 模式會有許多缺點,所以推薦 sync 模式,其次 restore 模式。

redis-shake 的 scan 模式來遷移數據案例

使用redis-shake的scan在線遷移操作,主要通過scan.toml文件進行配置和執行遷移操作,如下圖所示。

實例信息

單機實例1
地址:ip1端口:6379密碼:123456
單機實例2
地址:ip2端口:6379無密碼
集群實例1
地址:192.168.0.1:6379192.168.0.2:6379192.168.0.3:6379192.168.0.4:6379密碼:123456
集群實例2
地址:192.168.1.1:6379192.168.1.2:6379192.168.1.3:6379192.168.1.4:6379密碼:123456
源Redis單機實例(1)到目標Redis單機實例(2)

修改 scan.toml,改為如下配置:

type = "scan"[source]address = "ip1:6379"password = "123456"[target]type = "standalone"address = "ip2:6379"password =
啟動 redis-shake:
./redis-shake scan.toml
源Redis單機實例(1)到目標Redis集群實例(2)

修改 scan.toml,改為如下配置:

type = "scan"[source]address = "ip1:6379"password = "r-aaaaa:xxxxx"[target]type = "cluster"address = "192.168.0.1:6379" # 這里寫集群中的任意一個節點的地址即可,redis-shake可以根據這個ip地址,拉取集群的其他節點的ip和端口信息。password = "123456"
啟動 redis-shake:
./redis-shake scan.toml
源Redis集群實例(1)到目標Redis集群實例(2)
方案1-手動起多個redis-shake,集群1有四個節點:
192.168.0.1:6379192.168.0.2:6379192.168.0.3:6379192.168.0.4:6379

把4個節點當成 4 個單機實例,參照前文部署 4 個 redis-shake 進行數據同步

方案2-借助 cluster_helper.py 啟動

腳本cluster_helper.py方便啟動多個 redis-shake 從集群遷移數據,效果等同于方法1。

注意

源端有多少個分片,cluster_helper.py 就會起多少個 redis-shake 進程,所以如果源端分片數較多的時候,需要評估當前機器是否可以承擔這么多進程。

cluster_helper.py 異常退出的時候,可能沒有正常退出 redis-shake 進程,需要 ps aux | grep redis-shake 檢查。

每個 redis-shake 進程的執行日志記錄在 RedisShake/cluster_helper/data/xxxxx 中,反饋問題請提供相關日志。

依賴

Python 需要 python3.6 及以上版本,安裝 Python 依賴:

cd RedisShake/cluster_helperpip3 install -r requirements.txt
配置

修改 scan.toml:

type = "scan"[source]address = "192.168.0.1:6379" # 集群 C 中任意一個節點地址password = "r-ccccc:xxxxx"[target]type = "cluster"address = "192.168.1.1:6380" # 集群 D 中任意一個節點地址password = "r-ddddd:xxxxx"
運行
cd RedisShake/cluster_helperpython3 cluster_helper.py ../redis-shake ../scan.toml
參數 1 是 redis-shake 可執行程序的路徑參數 2 是配置文件路徑
Redis哨兵模式

sentinel 節點,將哨兵拓撲當成普通的主從節點即可,參照單機到單機:A->B配置文件:

source 的 address 寫源端的 master 或 slave 節點地址,推薦 slave 節點。target 的 address 些目的端的 master 節點地址。

標簽: 數據遷移 手把手教你 配置文件

上一篇:【技術分享】Windows平臺低延遲RTMP、RTSP播放器接口設計探討
下一篇:最新消息:掃雷程序:基礎版