迁移步骤:
(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都按原路迁移回去,数据迁移就完成了。