
對于大多數場景下的Redis的數據遷移,還是比較推薦大家參考我之前的前兩篇文章。
【Redis 技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰指南(在線同步數據)【Redis 技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰指南(離線同步數據)但是還有一種常見是前兩篇文章無法實現的,就是當云廠商出于種種考慮禁用了Redis的 psync 命令時,前述方案不可用。 對于這種情況可以使用redis-shake的scan模式來進行數據遷移。
(資料圖片僅供參考)
原理是調用scan命令來獲取 Redis 中的 key,然后使用 dump 命令獲取 key 的內容,最終使用 restore 命令恢復 key 至目的端。
使用redis-shake的scan在線遷移操作,主要通過scan.toml文件進行配置和執行遷移操作,如下圖所示。
修改 scan.toml,改為如下配置:
type = "scan"[source]address = "ip1:6379"password = "123456"[target]type = "standalone"address = "ip2:6379"password =
./redis-shake scan.toml
修改 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 scan.toml
把4個節點當成 4 個單機實例,參照前文部署 4 個 redis-shake 進行數據同步。
腳本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 是配置文件路徑
sentinel 節點,將哨兵拓撲當成普通的主從節點即可,參照單機到單機:A->B配置文件:
source 的 address 寫源端的 master 或 slave 節點地址,推薦 slave 節點。target 的 address 些目的端的 master 節點地址。