Redis单实例数据迁移到集群

迁移步骤:

(1)停掉项目,停止对redis单实例的数据写入。

(2)登录单实例redis客户端通过命令keys *查看当前单实例缓存的所有数据条数,记录下来。

(3)假如单实例redis同时开启了RDB和AOF,只要AOF文件就可以了,因为当AOF和RDB同时存在的时候,Redis还是会先加载AOF文件的,在单实例redis上执行BGREWRITEAOF保存数据,如果没有开启AOF只开了RDB则执行SAVE,SAVE 命令执行完之后会返回OK。

本项目的Redis只开了RDB,故执行save

 Redis单实例数据迁移到集群

(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

该过程会先让你输入迁出多少个卡槽,然后输入迁到哪个卡槽再输入从哪迁

 Redis单实例数据迁移到集群

 Redis单实例数据迁移到集群

 

同上将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] 一份不完整的redis迁移方案记录


下一篇:【Python进阶】5-4 __slots__ / __call__