redis-migrate-tool工具實現異構redis集羣的數據遷移

redis-migrate-tool

redis-migrate-tool是唯品會開源的redis遷移工具,可以實現熱遷移,實現aof/rdb文件遷移,可以全量或增量遷移,可以異構集羣遷移,可以輔助check遷移後的數據質量,簡直好用!
git地址:https://github.com/vipshop/redis-migrate-tool

遷移任務描述

兩個測試服務器集羣,需要將8億數據從3節點集羣遷移到5節點集羣。
源集羣:3主0從 172.18.5.9:6010 172.18.5.10:6020 172.18.5.11:6030
目的集羣:5主0從 172.18.5.14:6060 172.18.5.15:6070 172.18.5.16:6080 172.18.5.35:6090 172.18.5.36:6100

因爲特殊需求,測試服務器的配置比較高,物理機、全SSD盤、1T內存。

遷移過程

集羣參數修改

首先該工具必須保持到源集羣和目的集羣的長連接,如果設置了redis的timeout參數,請將其關閉:

redis-cli -c -p 6010 -h 172.18.5.9 config set timeout 0
redis-cli -c -p 6020 -h 172.18.5.10 config set timeout 0
redis-cli -c -p 6030 -h 172.18.5.11 config set timeout 0

redis-cli -c -p 6060 -h 172.18.5.14 config set timeout 0
redis-cli -c -p 6070 -h 172.18.5.15 config set timeout 0
redis-cli -c -p 6080 -h 172.18.5.16 config set timeout 0
redis-cli -c -p 6090 -h 172.18.5.35 config set timeout 0
redis-cli -c -p 6100 -h 172.18.5.36 config set timeout 0

啓動遷移任務

將遷移工具安裝在172.18.5.14:/app/redis-migrate-tool
注意該工具耗用內存,不能安裝在源集羣的服務器上
配置文件/app/redis-migrate-tool/rmt.conf:

[source]
type: redis cluster
servers : 
-172.18.5.9:6010

[target]
type: redis cluster
servers :
-172.18.5.14:6060

[common]
listen: 0.0.0.0:8888
step: 3
threads: 30
mbuf_size: 1024

啓動遷移任務:src/redis-migrate-tool -c rmt.conf -o log -d
執行後遷移任務會作爲後臺服務運行

監控遷移狀態

# 看日誌
vim log

# 看遷移任務的狀態
redis-cli -c -p 8888 info

檢查數據一致性

# 源數據量
redis-cli -c -p 6010 -h 172.18.5.9 dbsize
redis-cli -c -p 6020 -h 172.18.5.10 dbsize
redis-cli -c -p 6030 -h 172.18.5.11 dbsize

# 目的數據量
redis-cli -c -p 6060 -h 172.18.5.14 dbsize
redis-cli -c -p 6070 -h 172.18.5.15 dbsize
redis-cli -c -p 6080 -h 172.18.5.16 dbsize
redis-cli -c -p 6090 -h 172.18.5.35 dbsize
redis-cli -c -p 6100 -h 172.18.5.36 dbsize

# 抽樣檢查數據質量
src/redis-migrate-tool -c rmt.conf -o log -C redis_check

遷移結果

遷移8億數據,耗時79分鐘。

運行無誤,最後的日誌輸出:

[2019-03-26 12:58:21.941] rmt_redis.c:1643 rdb file node172.18.5.10:6020-1553575005969542-590513.rdb write complete
[2019-03-26 13:18:28.633] rmt_redis.c:6601 Rdb file for node[172.18.5.11:6030] parsed finished, use: 1387 s.
[2019-03-26 13:18:33.586] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(0).
[2019-03-26 13:21:26.079] rmt_redis.c:6601 Rdb file for node[172.18.5.9:6010] parsed finished, use: 1391 s.
[2019-03-26 13:21:31.791] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(1).
[2019-03-26 13:25:13.356] rmt_redis.c:6601 Rdb file for node[172.18.5.10:6020] parsed finished, use: 1611 s.
[2019-03-26 13:25:18.501] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(2).

注意

  • 只有源和目的都是redis節點或者redis集羣的時候才能使用redis_check做數據質量檢查,並不支持aof和rdb
  • redis節點必須將timeout設置爲0,否則報錯
  • 該工具的報錯非常簡潔,不利於debug
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章