• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

RedisCluster集群模式扩容节点

武飞扬头像
黄月望
帮助1

如下图,上一章讲到搭建了3组集群,端口号依次为7000-7005,现在我们要扩容一组端口号为7006-7007

学新通

1,新增7006和7007节点

上面我们已经创建了redis7006/redis7007文件夹和redis.conf文件,接下来我们直接启动这2个节点

  1.  
    /application/redis/bin/redis-server /application/rediscluster/redis7006/redis.conf
  2.  
    /application/redis/bin/redis-server /application/rediscluster/redis7007/redis.conf

2,把7006节点增加到集群中

  1.  
    #最后面7000节点不是一定的,可以写7000-7005任意一节点皆可
  2.  
    /application/redis/bin/redis-cli --cluster add-node 172.16.166.122:7006 172.16.166.122:7000

3,扩容从节点

先查看7006在集群中的ID

  1.  
    /application/redis/bin/redis-cli -h 172.16.166.122 -p 7000 -c
  2.  
    cluster nodes

学新通

 找到7006的集群ID,那么执行add-node即可

  1.  
    #172.16.166.122:7000 不是一定的,可以填7000-7005任意一端口
  2.  
    /application/redis/bin/redis-cli --cluster add-node 172.16.166.122:7007 172.16.166.122:7000 --cluster-slave --cluster-master-id beb327340e04d25fb6a0bf0b52a0440c1e170ad2

OK,到这里扩容2个节点7006和7007已经完成一半,但还没有分配哈希槽,无法进行写操作,继续往下看

4,分配哈希槽给7006

问题来了,总哈希槽是16384,平均分给3组,每组是5461,现在加多一组到集群,变成4组,平均每组 16384/4=4096,那么每组要抽取多少哈希槽给7006呢?4096/3=1365

这是道比较简单的数学题。

执行reshard进行从3组中抽取1365哈希缓存分配给7006

/application/redis/bin/redis-cli --cluster reshard  172.16.166.122:7000

执行后会弹出“您要移动多少个插槽(从 1 到 16384)” 输入上面算出来的结果4096

学新通

 输入4096后会弹出接收者ID,我们输入上面找到的7006的集群ID

学新通

然后会弹出分配方式,是平均分配还是从其中一台抽取,我们使用平均分配 all

学新通

后面输入 yes即可 

学新通

到这里扩容分哈希槽就完成了,接下来看分配的结果:

  1.  
    /application/redis/bin/redis-cli -h 172.16.166.122 -p 7000 -c
  2.  
    cluster nodes

下图这3段哈希槽就是那3组分配给7006的

学新通

 到这里扩容完成

最关键时刻来了,测试集群,先连接到7000端口

  1.  
    #连接到集群
  2.  
    /application/redis/bin/redis-cli -h 172.16.166.122 -p 7000 -c
  3.  
     
  4.  
    #查看集群节点
  5.  
    cluster nodes

测试写的操作:

测试 set aaa 1 数据存到 [10439]哈希槽,属于7001节点

测试 set bbb 2 数据存到 [5287]哈希槽,属于7000节点

测试 set ccc 3 数据存到 [135]哈希槽,属于7006节点

测试 set ddd 4 该key已经存在,修改不提示在哪个节点

测试 set eee 5 数据存到 [14407]哈希槽,属于7002节点

至此测试完成,集群共有4组,只有master才有写的权限,而上面测试数据分别存到7000,7001,7002,7006 master节点,测试结果通过

看下图:

学新通

 测试读的操作:

测试get aaa 从7001节点的哈希槽[10439]找到该key结果为 1

测试get ccc 从7006节点的哈希槽[135]找到该key结果为 3

学新通

测试通过。

底层原理是什么呢?怎么找到该key是否存在集群中?然后从中读取出对应的哈希槽和值呢?

通过 cluster help 查看帮助

cluster help

看下图有个 keyslot <key> 命令

学新通

 输入  cluster keyslot aaa 我们看到结果是 10439 就是该key所在的哈希槽 [10439]

学新通

 那么通过 cluster nodes我们可以看到[10439]属于 7001节点 

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfigfag
系列文章
更多 icon
同类精品
更多 icon
继续加载