Redis应用学习——Redis Cluster的集群伸缩

1. 集群伸缩原理

    1. 集群伸缩:即集群中节点的增加和减少,在集群伸缩的同时,也伴随着槽位及槽位中数据在节点之间的移动

    2. 集群扩容原理:

  • 首先要准备好新的节点:依据上一篇博客中的集群节点的配置文件模板,然后启动该节点,此时该节点是一个单独的集群节点
  • 将该节点加入集群:
    • 通过集群中任意一个节点的客户端执行cluster meet命令将这两个单独的节点添加进入集群,添加后再执行cluster nodes命令查看集群中所有的节点的相关信息,查看是否有新添加的两个节点;添加的节点如果为主节点就是用于集群扩容,要进行槽位和数据迁移(执行第三步),如果为从节点则用于负责自动故障转移,不会发生数据迁移
    • 通过redis-trib.rb的添加节点的命令:add-node  new_host:new_port existing_host:existing_port  --slave  --master-id   <arg>,使用该命令时,会先检测new_host:new_port所代表的节点是否是一个孤立的节点(即是否处于另一个集群中),existing_host:existing_port该参数就表示目标集群中以存在的节点,new_host:new_portexisting_host:existing_port两个节点会进行一个meet操作来将新节点添加到集群中,而--slave --master-id <arg>这两个参数表示新添加进入的节点是一个从节点,而其主节点就为<arg>参数处所写的集群中存在的主节点的node-id,如果添加的是一个主节点则不需要--slave --master-id <arg>两个命令参数
  • 迁移槽位和槽位中的数据(该操作只针对添加主节点,而添加从节点则无此操作):
    • 在迁移槽位时,要保证各个主节点的槽位数量均衡
    • 迁移数据,当在迁移槽位时,也要讲槽位中的每个数据全部迁移,迁移数据完成后,会将新的槽位所在的节点信息广播到集群中的每一个节点中
    • 使用Redis中的集群原生命令过于复杂,推荐使用redis-trib.rb的命令来执行更为方便,命令为 reshard  host:porthost:port可以是集群中任意一个节点的IP地址和端口号,回车执行该命令后会提示下一个要输入的参数是要转移的槽位个数slots(比如下图中的1000),输入后回车执行,又会提示写一个参数就是接受这些槽位的主节点的node-id,回车执行提示输入这些槽位的来源节点,可以写一个具体的节点id,可以写多个,最后输入一个done来表示输入结束,也可以写一个all,表示从所有其他主节点中的所有槽位中均匀分配出slots个槽位,再按下回车执行直到提示输入yes表示确认执行操作。3c33b1834e441f19efd60b364c7a2e8bb96.jpg2d26f9732e73ef9f4708472e3cfe23fdea6.jpg28e91122f7dc5a9f1dcc139dc5e43616bab.jpg

    3. 集群缩容原理:

  • 首先检查即将下线的节点中是否有槽位,如果有则说明当前节点为主节点,首先应下线其从节点,然后要将槽位及数据迁移到其他节点,然后再下线主节点
    • 槽位迁移:首先迁移节点中的所有槽位到另一个主节点中,使用redis-trib.rb的命令 reshard  host:port,注意尽量将被删除节点中的槽位平均分配到其他主节点中
    • 节点下线:使用redis-trib.rb中的命令del-node  host:port  node_idhost:port可以是集群中任意一个节点的IP地址和端口,而node_id则是要被删除的节点id
  • 将该节点的下线信息告诉其他节点,在执行redis-trib.rb中的del-node命令后会自动通知,并自动关闭该节点
  • 关闭该节点,

转载于:https://my.oschina.net/ProgramerLife/blog/2870686

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值