遷移步驟:
(1)停掉項目,停止對redis單實例的數據寫入。
(2)登錄單實例redis客戶端通過命令keys *查看當前單實例緩存的所有數據條數,記錄下來。
(3)假如單實例redis同時開啟了RDB和AOF,只要AOF文件就可以了,因為當AOF和RDB同時存在的時候,Redis還是會先加載AOF文件的,在單實例redis上執行BGREWRITEAOF保存數據,如果沒有開啟AOF只開了RDB則執行SAVE,SAVE 命令執行完之后會返回OK。
本項目的Redis只開了RDB,故執行save
(4)先把集群的所有slot分配到一個主節點
查看集群當前卡槽分配情況
# /opt/redis-4.0.10/src/redis-trib.rb check 192.168.8.238:6381
>>> Performing Cluster Check (using node 192.168.8.238:6381)
M: bb3536e32589f063563b2dfb8572151a05615e5d 192.168.8.238:6381
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 603335a86d29cadbd5823b046be09594d115f16a 192.168.8.238:6383
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 9fec5d7d62ee564e2f4ee1e293891a86ea21b05b 192.168.8.238:6385
slots: (0 slots) slave
replicates 603335a86d29cadbd5823b046be09594d115f16a
M: a5a1858f829423dc42703f6340dcdc48f9381d55 192.168.8.238:6382
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: b2da0f647af50dadc93ddf08093a36507cc2ec29 192.168.8.238:6384
slots: (0 slots) slave
replicates bb3536e32589f063563b2dfb8572151a05615e5d
S: 5302abfb43ca2efe12dc04903b3c8225f119d0e2 192.168.8.238:6386
slots: (0 slots) slave
replicates a5a1858f829423dc42703f6340dcdc48f9381d55
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
可以看到192.168.8.238:6381分配的卡槽是10923-16383
192.168.8.238:6383分配的卡槽是5461-10922
192.168.8.238:6382分配的卡槽是0-5460
我們現在要將192.168.8.238:6383和192.168.8.238:6381的卡槽遷移到192.168.8.238:6382上面去
先將192.168.8.238:6383的卡槽遷移到192.168.8.238:6382
# /opt/redis-4.0.10/src/redis-trib.rb reshard 192.168.8.238:6381
該過程會先讓你輸入遷出多少個卡槽,然后輸入遷到哪個卡槽再輸入從哪遷
同上將192.168.8.238:6381的卡槽遷移到192.168.8.238:6382
都遷移完成后所有的槽位都會在192.168.8.238:6382上
可以用一下命令查看
# /opt/redis-4.0.10/src/redis-trib.rb check 192.168.8.238:6381
(5)因為本項目Redis采用的是RDB持久化,所以把單實例的數據備份dump.rdb文件拷貝到192.168.8.238:6381的數據目錄里,重啟192.168.8.238:6381,然后登錄該節點客戶端通過keys *查看總條數跟之前記錄的總條數對比看是否全部遷移過來,如果有全部遷移即可。
(6)參照步驟(4)把遷移出來的slot都按原路遷移回去,數據遷移就完成了。
三、參考資料:
單實例redis數據遷移到集群參考