前篇介紹的redis replication方法,操作步驟多,而且容易出錯。在git上看到一些開源工具也能實現同步遷移功能,而且步驟簡單,比如redis-port,redis-migrate-tool等工具。實驗演示使用redis-migrate-tool,將redis cluster 遷移到一個單實例redis中。
1.redis-migrate-tool的安裝
需要注意的是安裝redis-migrate-tool依賴automake, libtool, autoconf and bzip2這些包
2..運行環境
源節點:10.86.30.37:36379/10.86.30.37:36380/10.86.30.37:36381
[root@10_86_30_37_10.86.30.37 redis-migrate-tool]# redis-cli -c -p 36379 -h 10.86.30.37 cluster nodes
7fab85269fe72d68414ffd15a54605d45f280aff 10.86.30.37:36381 master - 0 1477555329981 7 connected 10001-16383
e0c45fe484e55967c968814076b0a5f67f4f6821 10.86.30.37:36380 master - 0 1477555330984 8 connected 5001-10000
ba3d6a50ef6bdf6212c0360baec97f29f3b25385 10.86.30.37:36379 myself,master - 0 0 6 connected 0-5000
目標節點:10.86.30.37:6389
3.遷移過程
- redis cluster向redis單實例遷移配置文件
[source] type: redis cluster servers: - 10.86.30.37:36379 [target] type: single servers: - 10.86.30.37:6389 [common] listen: 0.0.0.0:8888
- 執行命令進行同步
/usr/local/redis-migrate-tool/src/redis-migrate-tool -c mgr.conf -d
- 查看同步后的文件
[root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 6389 keys \* 1) "5" 2) "2" 3) "1" 4) "10" 5) "12" 6) "3" 7) "4" 8) "13" 9) "11" [root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 36379 keys \* 1) "10" 2) "11" 3) "3" [root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 36380 keys \* 1) "12" 2) "1" 3) "2" 4) "5" [root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 36381 keys \* 1) "13" 2) "4"
所有節點數據同步到了但實例節點中,插入數據測試
[root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 36379 -c 10.86.30.37:36379> set 30 30 -> Redirected to slot [9877] located at 10.86.30.37:36380 OK 10.86.30.37:36380> set 31 31 -> Redirected to slot [14004] located at 10.86.30.37:36381 OK 10.86.30.37:36381> set 32 32 -> Redirected to slot [1751] located at 10.86.30.37:36379 OK [root@10_86_30_37_10.86.30.37 redis]# redis-cli -h 10.86.30.37 -p 6389 keys \* 1) "5" 2) "30" 3) "31" 4) "2" 5) "1" 6) "10" 7) "21" 8) "12" 9) "3" 10) "4" 11) "13" 12) "32" 13) "11"
可以看到新增數據也同步到了redis單實例節點中
4.利用redis-migrate-tool的工具進行更全面的驗證
- 利用redis-migrate-tool提供的命令進行一致性校驗:
[root@10_86_30_37_10.86.30.37 redis]# /usr/local/redis-migrate-tool/src/redis-migrate-tool -c mgr.conf log -C redis_check Check job is running... Checked keys: 1000 Inconsistent value keys: 0 Inconsistent expire keys : 0 Other check error keys: 0 Checked OK keys: 1000 All keys checked OK! Check job finished, used 0.047s
- 利用redis-migrate-tool提供的命令進行插入校驗:
[root@10_86_30_37_10.86.30.37 redis]# /usr/local/redis-migrate-tool/src/redis-migrate-tool -c mgr.conf log -C redis_testinsert Test insert job is running... Insert string keys: 200 Insert list keys : 200 Insert set keys : 200 Insert zset keys : 200 Insert hash keys : 200 Insert total keys : 1000 Correct inserted keys: 1000 Test insert job finished, used 0.417s
需要注意的是,插入校驗生成的數據並不會清除,如果只是為了測試功能,那么可以減少插入的key。