Redis的cluster中的槽道迁移

2018-10-12  本文已影响0人  空城空忆亦空心

环境:

一:空槽道迁移

1 .初始槽道分配状态

image.png

2. 目标节点(8001)导入槽道10923,源节点为8002(目标节点的二级制不会变,数组当前10023槽道变为导入状态)

  • 在8001上登录:redis-cli -c -p 8001
  • cluster setslot 10923 importing 源节点id
  • cluster setslot 10923 importing be50665e4b57a603ab3bf766c8adfa0646457840

3.查看节点槽道状态(此时8001节点槽道会变化,但是其他节点中并没有变化)

4.源节点(8002)导出槽道10923(源节点二进制不变,数组当前10023槽道变为导出状态)

在8002上登录操作:redis-cli -c -p 8002
cluster setslot 10923 migrating 目标节点
cluster setslot 10923 migrating 7f8dca727d91b8bc31fdc2c58e04cee293904c7c

5.查看节点槽道状态(此时8002节点槽道会变化,其他节点并没有变化)

image.png
image.png
image.png

6.取消槽道迁移(在没有通知集群中具有槽道管理权的节点迁移之前可以取消槽道迁移)

cluster setslot 10923 stable

7.通知所有集群具有槽道管理权主节点槽道迁移了(所有的节点,数组发生变化)

cluster setslot 10923 node 7f8dca727d91b8bc31fdc2c58e04cee293904c7c


image.png

cluster setslot 10923 node 7f8dca727d91b8bc31fdc2c58e04cee293904c7c


image.png
image.png

二:非空槽道迁移

1、目标节点8002导入槽道

cluster setslot 5798 importing 7f8dca727d91b8bc31fdc2c58e04cee293904c7c

2、源节点8001导出槽道

cluster setslot 10923 migrating bf708c933a39e9da69a6325230bc2161f3edae46

3、将槽道的数据迁移到目标节点(需要登录到源节点迁移数据)

cluster getkeysinslot 5798 500 查看5798上500个范围内所有的key


image.png

migrate 目标节点ip 目标端口 "" 0 500 keys name(如果是多个key直接拼接,空格隔开)

  • "":表示key的匹配,可以使用正则
  • 0:表示迁移到目标节点的database(0-15)
  • 500:表示超时时间,单位毫秒
  • keys:标签确定迁移的key值名称
  • name:key值
    本例中:migrate 10.9.58.60 8002 "" 0 500 keys name

4.所有主节点通知更新数据(槽道迁移)

cluster setslot 5798 node bf708c933a39e9da69a6325230bc2161f3edae46

cluster setslot 5798 node bf708c933a39e9da69a6325230bc2161f3edae46

cluster setslot 5798 node bf708c933a39e9da69a6325230bc2161f3edae46

5.最后测试:可以看出获取数据会转向8002节点,迁移成功

image.png
上一篇 下一篇

猜你喜欢

热点阅读