十一、Redis集群的水平扩展、伸缩

前言

Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群是如何做水平扩展、伸缩的。不了解如何部署Redis集群的,可以参考我的另外一篇文章:《十、Redis 有了主从复制, 为什么还需要搭建集群?以及如何搭建Redis集群详细图解》

环境准备

  • 三台云服务器(106.14.157.4849.232.112.117101.34.253.57)。大家也可以使用一台云服务器,部署多个Redis 实例也是可以的。 我这里是使用三台云服务器。想购买的小伙伴可以看下,挺便宜的 【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元
  • 每台服务器都运行了三个Redis 实例, 由此实现如下图的Redis 集群。

Redis集群的水平扩展

Redis集群的水平扩展

一、Redis集群的水平扩展

现在要将原集群的9个节点基础上新增3个节点,由原来的3主6从变成4主8从,如下图:

Redis集群的水平扩展

  1. 首选需要一台新的服务器(同一台服务器上运行也是可以的),运行三个节点,配置文件和集群配置一样。
    Redis集群的水平扩展

  2. 查看Redis集群的帮助命令 redis-cli --cluster help
    Redis集群的水平扩展

  3. 使用 add-node 命令新增一个主节点 101.34.253.57:6488 (master),前面的 ip:port 为新增节点,后面的 ip:port 为集群中已存在节点。

    # 增加节点 
    redis-cli --cluster add-node 101.34.253.57:6488 101.34.253.57:6485
    

    Redis集群的水平扩展

  4. 查看集群信息 redis-cli -c -h 101.34.253.57 -p 6485,可以看到 101.34.253.57:6488 节点已经被添加进集群, 但是Redis 并没有给该节点分配“哈希槽”。所以需要我们自己手动分配。
    Redis集群的水平扩展

  5. 使用redis-cli命令为 101.34.253.57:6488 节点分配slots槽位,找到集群中的任意一个节点,对其进行重新分片工作。

    # 从新分配 slots
    redis-cli --cluster reshard 101.34.253.57:6485
    

    分配 slots 节点, 系统会有几个询问, 需要输入对应内容, 才可下一步。以下是具体内容

    1. How many slots do you want to move (from 1 to 16384)? 2000
      解释:需要多少个hash槽移动到新的节点上,自己设置,比如2000个hash槽

    2. What is the receiving node ID? b1d00df093710f483525cb4d601123e11611ad21
      解释:把这2000个hash槽移动到哪个节点上去,需要指定节点id,这里填写上面新增主节点的ID

    3. Please enter all the source node IDs.
      Type ‘all’ to use all the nodes as source nodes for the hash slots.
      Type ‘done’ once you entered all the source nodes IDs.
      Source node 1:all
      解释::输入all为从所有主节点中分别抽取相应的hash槽到指定到新节点中,抽取的总槽数为2000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为2000个

    4. Do you want to proceed with the proposed reshard plan (yes/no)? yes
      解释:输入yes确认开始执行分片任务

  6. 查询集群节点信息
    Redis集群的水平扩展

  7. 到这里 主节点(master)就添加完成了, 现在开始添加 从节点(slave), 重复第三步的操作,先将节点添加到集群

    # 增加节点 
    redis-cli --cluster add-node 101.34.253.57:6489 101.34.253.57:6485
    

    Redis集群的水平扩展
    可以看到,刚刚添加的从节点的角色是 master, 并且没有分配任何的hash 槽, 所以我们只需要执行 replicate 命令将该节点指向一个master 主节点, 让其成为一个从节点即可。

  8. 将 101.34.253.57:6489 节点设置成 101.34.253.57:6488 的从节点

    # 登录从节点
    [root@TR ~]# redis-cli -c -h  101.34.253.57 -p 6489
    # 将该节点设置成那个节点的从节点
    101.34.253.57:6489> cluster replicate b1d00df093710f483525cb4d601123e11611ad21
    OK
    101.34.253.57:6489> 
    
  9. 查看集群信息 cluster nodes
    Redis集群的水平扩展

二、Redis集群的水平伸缩

现在要将原集群的12个节点基础上减少3个节点,由原来的4主8从变成3主6从,如下图:
Redis集群的水平伸缩

  1. 删除101.34.253.57:6489从节点,用 del-node 删除 101.34.253.57:6489 从节点 ,指定删除节点ip和端口,以及要删除节点的ID

    redis-cli --cluster del-node 101.34.253.57:6489 4ddba09063f05aa226d412a71d2e289d6d580574
    

    Redis集群的水平伸缩
    删除之后, 可以发现集群中已经没有 101.34.253.57:6489 从节点了。

  2. 下面就需要删除 101.34.253.57:6488 主节点了,这个步骤相对麻烦一些,因为主节点的里面是有分配了slots槽位( 0-665、5461-6127、10923-11588 ),所以必须先把 101.34.253.57:6488 里的slots槽位分配到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)。这一步和水平扩展的第五步是一样的。只不过是反过来了。

    # 从新分配 slots
    redis-cli --cluster reshard 101.34.253.57:6488
    

    分配 slots 节点, 系统会有几个询问, 需要输入对应内容, 才可下一步。以下是具体内容

    1. How many slots do you want to move (from 1 to 16384)? 2000
      解释:需要多少个hash槽移动到新的节点上,自己设置,比如2000个hash槽

    2. What is the receiving node ID? 1edef2b7b831bd14347e860b1dc32a576fc5fdc8
      解释:把这2000个hash槽移动到哪个节点上去,需要指定节点id,这里填写上面新增主节点的ID

    3. Please enter all the source node IDs.
      Type ‘all’ to use all the nodes as source nodes for the hash slots.
      Type ‘done’ once you entered all the source nodes IDs.
      Source node 1:b1d00df093710f483525cb4d601123e11611ad21
      Source node 2:done

      解释::输入all为从所有主节点中分别抽取相应的hash槽到指定到新节点中,抽取的总槽数为2000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为2000个

    4. Do you want to proceed with the proposed reshard plan (yes/no)? yes
      解释:输入yes确认开始执行分片任务
      Redis集群的水平伸缩

  3. 下一步删除 101.34.253.57:6488 主节点即可。

    [root@TR ~]# redis-cli --cluster del-node 101.34.253.57:6488 b1d00df093710f483525cb4d601123e11611ad21
    >>> Removing node b1d00df093710f483525cb4d601123e11611ad21 from cluster 101.34.253.57:6488
    >>> Sending CLUSTER FORGET messages to the cluster...
    >>> Sending CLUSTER RESET SOFT to the deleted node.
    [root@TR ~]#	
    
  4. 查询集群信息,看是否已经移除
    Redis集群的水平伸缩

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值