redis遷移工具redis-migrate-tool測試

1、 部署
依賴:
yum -y install automake
yum -y install libtool
yum -y install autoconf
yum -y install bzip2

安裝redis-migrate-tool
unzip redis-migrate-tool-master.zip
cd redis-migrate-tool-master
autoreconf -fvi
./configure
make

檢查安裝是否成功,如下圖所示即爲正確
src/redis-migrate-tool -h
redis遷移工具redis-migrate-tool測試

參數說明:
-d 以守護進程執行
-I 輸出有用的信息
-n 不接收目標redis的迴應
-v 設置日誌等級,默認5,最小0,最大11
-o 輸出到日誌
-c 配置文件
-p 進程文件,默認沒有
-m 存儲器緩衝大小,默認512字節,和機器磁盤一個扇區一樣,我猜的
-C 默認redis_migrate,就是遷移命令
-r 源類型,默認single,還可以是twemproxy或者redis_cluster
-R 目標類型,默認single,還可以是twemproxy或者redis_cluster
-T 線程數,使用多少線程來跑這個job,默認1
-b 默認可以使用128T的緩存來運行這個job
-f 源ip:port
-t 目標ip:port
-S 默認1,用於解析請求的步驟,數值越大,遷移越快,內存佔用也就越大

使用:
可以將這些設置寫入到配置文件中
vim /tmp/rmt.conf
[source]
type:single
servers:

  • 192.168.1.150:6379

[target]
type:single
servers:

  • 192.168.1.172:6379

[common]
listen:0.0.0.0:8910
threads:2
mbuf_size:512

運行測試:
從150遷到172,並且在遷移過程中,150繼續寫入
150
redis遷移工具redis-migrate-tool測試
172
redis遷移工具redis-migrate-tool測試
./redis-migrate-tool -c /tmp/rmt.conf -o log -d
redis遷移工具redis-migrate-tool測試
可以看到遷移程序運行中
結果什麼都沒有發生,查看log,發現報錯了
[2018-08-30 11:24:04.392] rmt_redis.c:6446 ERROR: Can't handle RDB format version -1219911672
[2018-08-30 11:24:04.392] rmt_redis.c:6715 ERROR: Rdb file for node[192.168.1.150:6379] parsed failed
因爲redis每個版本的rdb都不一樣,所以原因可能是不支持redis4.0.1的rdb解析

沒辦法了,換3.2.12試試
我在172上設置了3.2版本的6379和6380
修改下配置文件
[source]
type:single
servers:

  • 192.168.1.172:6379

[target]
type:single
servers:

  • 192.168.1.172:6380

[common]
listen:0.0.0.0:8910
threads:2
mbuf_size:512
還是之前的數據
6379
redis遷移工具redis-migrate-tool測試
6380
redis遷移工具redis-migrate-tool測試
執行migrate
redis遷移工具redis-migrate-tool測試
查看6380,如下圖,已經同步
redis遷移工具redis-migrate-tool測試
接着再在6379上寫入
redis遷移工具redis-migrate-tool測試
查看6380,如下圖已複製過來。
redis遷移工具redis-migrate-tool測試
證明redis-migrate-tool是實時的
上面這些操作,我均沒有添加認證,那麼我添加認證會如何呢?
6379,6380同時添加認證
redis遷移工具redis-migrate-tool測試
看,認證已生效
redis遷移工具redis-migrate-tool測試
再來測試,是否會實時同步
6379寫入
redis遷移工具redis-migrate-tool測試
6380查看,如下圖,顯然沒有同步過來。
redis遷移工具redis-migrate-tool測試
日誌循環報如下報錯:
redis遷移工具redis-migrate-tool測試
那麼能不能通過配置文件加認證呢?不清楚,但可以試試
答案是可以,在配置文件中的[source][target]下加入redis_auth:111111
redis遷移工具redis-migrate-tool測試
重啓migrate,再查看6380,已經遷移過來
redis遷移工具redis-migrate-tool測試

上面測試的是同一個庫下的,那麼不同庫下的呢?
6379
redis遷移工具redis-migrate-tool測試
查看6380
redis遷移工具redis-migrate-tool測試
結果,在6379的2庫和3庫中的數據都插入到了6380的0庫
這個看已解決的issues中,是要改一個文件。
我進行了改完,但結果也只是把db 0改成了db n,並沒有將源多個庫中的數據一一對應到目標數據庫中。所以源存在多庫時候慎用。

遷移cluster和single一樣,區別是type,所以不過多敘述
type:redis cluster

2、 總結
A、 不適用4.0.x版本。
B、 源中存在多庫時,禁用,避免發生鍵值覆蓋。

3、 多源配置:
文檔源自測試結果,達到了目的,但是有限制,由於沒有別的文檔可查閱
[source]
type:single
servers:

  • 192.168.1.172:6379
  • 192.168.1.172:6381
    redis_auth:111111

[target]
type:single
servers:

  • 192.168.1.172:6380
    redis_auth:111111

[common]
listen:0.0.0.0:8910
threads:2
mbuf_size:512

多源設置如上配置,要不都不帶密碼,要不源是同一個密碼,否則無法啓動,在線變更密碼可以通過config set requirepass 密碼 來進行操作
6379的所有key 共11個
redis遷移工具redis-migrate-tool測試
redis遷移工具redis-migrate-tool測試
6381的所有Key 共7個
redis遷移工具redis-migrate-tool測試
目標6381 自帶1個重複的測覆蓋用
redis遷移工具redis-migrate-tool測試

我的爲啥是10號庫,因爲我改文件了……

執行之後如下圖,看到6379,6381的全部過來了,並且把原本的ttl6的值給覆蓋了
redis遷移工具redis-migrate-tool測試
同時6379和6381繼續寫入
redis遷移工具redis-migrate-tool測試
查看結果,已經追加過來了
redis遷移工具redis-migrate-tool測試

4、 測試過濾器
說是過濾器,其實是這個過濾器指定哪個,哪個才能被遷移過來。
限制:沒有找到可以同時過濾多個的寫法,只能寫1個
看測試結果
先清空6380
過濾條件加入filter:ttl,也就是ttl開頭的都遷移過來
[common]
listen:0.0.0.0:8910
threads:2
mbuf_size:512
filter:ttl

查看結果:
redis遷移工具redis-migrate-tool測試
可以看到只遷移過來了ttl開頭的key
6379,6381繼續寫一些包含ttl開頭還有其他
redis遷移工具redis-migrate-tool測試
redis遷移工具redis-migrate-tool測試
查看6380,都已經遷移過來
redis遷移工具redis-migrate-tool測試

一個想法,我要是啓多個migrate呢?是不是能過濾多個條件?
再啓動一個migrate,換個端口,再添加個配置文件,修改filter:name*
redis遷移工具redis-migrate-tool測試
哎呦,都追加過來了
再在6379上同時寫入1個ttl開頭,1個name開頭的
redis遷移工具redis-migrate-tool測試
查看6380,都已經追加過來
redis遷移工具redis-migrate-tool測試
但是這種雙開的方法我不確定靠不靠譜哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章