原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg11.html

集群节点添加

节点新增包括新增主节点、从节点两种情况。以下分别做一下测试:

1、新增主节点

新增一个节点7007作为主节点修改配置文件

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# cp -r  redis01 redis07
  2. [root@localhost redis-cluster]# cd redis07/
  3. [root@localhost redis07]# sed -i "s/7001/7007/g" ./redis.conf

启动7007redis服务

[plain] view plain copy

 

  1. [root@localhost redis07]# ./redis-server redis.conf
  2. [root@localhost redis07]# netstat -anp | grep 7007
  3. tcp        0      0 127.0.0.1:17007         0.0.0.0:*               LISTEN      13441/./redis-serve
  4. tcp        0      0 127.0.0.1:7007          0.0.0.0:*               LISTEN      13441/./redis-serve
  5. [root@localhost redis07]#

上面可以看到,7007已经启动,现在加入集群中。添加使用redis-trib.rb的add-node命令

[plain] view plain copy

 

  1. ./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7002

add-node是加入集群节点,127.0.0.1:7007为要加入的节点,127.0.0.1:7002 表示加入的集群的一个节点,用来辨识是哪个集群,理论上那个集群的节点都可以。

执行以下add-node

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# ./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7002
  2. >>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7002
  3. >>> Performing Cluster Check (using node 127.0.0.1:7002)
  4. S: 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002
  5. slots: (0 slots) slave
  6. replicates a5db243087d8bd423b9285fa8513eddee9bb59a6
  7. M: f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003
  8. slots:10923-16383 (5461 slots) master
  9. 1 additional replica(s)
  10. M: a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005
  11. slots:5461-10922 (5462 slots) master
  12. 1 additional replica(s)
  13. S: 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004
  14. slots: (0 slots) slave
  15. replicates dd19221c404fb2fc4da37229de56bab755c76f2b
  16. S: 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006
  17. slots: (0 slots) slave
  18. replicates f9886c71e98a53270f7fda961e1c5f730382d48f
  19. M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001
  20. slots:0-5460 (5461 slots) master
  21. 1 additional replica(s)
  22. [OK] All nodes agree about slots configuration.
  23. >>> Check for open slots...
  24. >>> Check slots coverage...
  25. [OK] All 16384 slots covered.
  26. >>> Send CLUSTER MEET to node 127.0.0.1:7007 to make it join the cluster.
  27. [OK] New node added correctly.
  28. [root@localhost redis-cluster]#

可以看到7007加入这个Cluster,并成为一个新的节点。

可以check以下7007节点状态

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# ./redis-trib.rb check 127.0.0.1:7007
  2. >>> Performing Cluster Check (using node 127.0.0.1:7007)
  3. M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007
  4. slots: (0 slots) master
  5. 0 additional replica(s)
  6. S: 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006
  7. slots: (0 slots) slave
  8. replicates f9886c71e98a53270f7fda961e1c5f730382d48f
  9. M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001
  10. slots:0-5460 (5461 slots) master
  11. 1 additional replica(s)
  12. M: f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003
  13. slots:10923-16383 (5461 slots) master
  14. 1 additional replica(s)
  15. S: 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002
  16. slots: (0 slots) slave
  17. replicates a5db243087d8bd423b9285fa8513eddee9bb59a6
  18. M: a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005
  19. slots:5461-10922 (5462 slots) master
  20. 1 additional replica(s)
  21. S: 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004
  22. slots: (0 slots) slave
  23. replicates dd19221c404fb2fc4da37229de56bab755c76f2b
  24. [OK] All nodes agree about slots configuration.
  25. >>> Check for open slots...
  26. >>> Check slots coverage...
  27. [OK] All 16384 slots covered.
  28. [root@localhost redis-cluster]#

M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007
   slots: (0 slots) master
   0 additional replica(s)

上面信息可以看到有4个M节点,3个S节点,7007成为了M主节点,它没有附属的从节点,而且Cluster并未给7007分配哈希卡槽(0 slots)。

可以从客户端连接集群查看一下,集群节点的连接情况

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# cd redis07/
  2. [root@localhost redis07]# ./redis-cli -c -p 7007
  3. 127.0.0.1:7007> cluster nodes
  4. 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006 slave f9886c71e98a53270f7fda961e1c5f730382d48f 0 1462955393326 3 connected
  5. dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001 master - 0 1462955388247 1 connected 0-5460
  6. ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007 myself,master - 0 0 0 connected
  7. f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003 master - 0 1462955390270 3 connected 10923-16383
  8. 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002 slave a5db243087d8bd423b9285fa8513eddee9bb59a6 0 1462955394334 7 connected
  9. a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005 master - 0 1462955392309 7 connected 5461-10922
  10. 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004 slave dd19221c404fb2fc4da37229de56bab755c76f2b 0 1462955389663 1 connected
  11. 127.0.0.1:7007>

redis-cluster在新增节点时并未分配卡槽,需要我们手动对集群进行重新分片迁移数据,需要重新分片命令 reshard

redis-trib.rb reshard 127.0.0.1:7005

这个命令是用来迁移slot节点的,后面的127.0.0.1:7005是表示是哪个集群,端口填[7000-7007]都可以,执行结果如下:

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# ./redis-trib.rb reshard 127.0.0.1:7005
  2. >>> Performing Cluster Check (using node 127.0.0.1:7005)
  3. M: a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005
  4. slots:5461-10922 (5462 slots) master
  5. 1 additional replica(s)
  6. S: 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004
  7. slots: (0 slots) slave
  8. replicates dd19221c404fb2fc4da37229de56bab755c76f2b
  9. M: f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003
  10. slots:10923-16383 (5461 slots) master
  11. 1 additional replica(s)
  12. S: 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002
  13. slots: (0 slots) slave
  14. replicates a5db243087d8bd423b9285fa8513eddee9bb59a6
  15. M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007
  16. slots: (0 slots) master
  17. 0 additional replica(s)
  18. M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001
  19. slots:0-5460 (5461 slots) master
  20. 1 additional replica(s)
  21. S: 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006
  22. slots: (0 slots) slave
  23. replicates f9886c71e98a53270f7fda961e1c5f730382d48f
  24. [OK] All nodes agree about slots configuration.
  25. >>> Check for open slots...
  26. >>> Check slots coverage...
  27. [OK] All 16384 slots covered.
  28. How many slots do you want to move (from 1 to 16384)?

它提示我们需要迁移多少slot到7007上,我们平分16384个哈希槽给4个节点:16384/4 = 4096,我们需要移动4096个槽点到7007上。

[plain] view plain copy

 

  1. [OK] All 16384 slots covered.
  2. How many slots do you want to move (from 1 to 16384)? 4096
  3. What is the receiving node ID?

需要输入7007的节点id,ee3efb90e5ac0725f15238a64fc60a18a71205d7

[plain] view plain copy

 

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

redis-trib 会向你询问重新分片的源节点(source node),即,要从特点的哪个节点中取出 4096 个哈希槽,还是从全部节点提取4096个哈希槽, 并将这些槽移动到7007节点上面。

如果我们不打算从特定的节点上取出指定数量的哈希槽,那么可以向redis-trib输入 all,这样的话, 集群中的所有主节点都会成为源节点,redis-trib从各个源节点中各取出一部分哈希槽,凑够4096个,然后移动到7007节点上:

[plain] view plain copy

 

  1. Source node #1:all

然后开始从别的主节点迁移哈希槽,并且确认。

[plain] view plain copy

 

  1. Moving slot 1343 from dd19221c404fb2fc4da37229de56bab755c76f2b
  2. Moving slot 1344 from dd19221c404fb2fc4da37229de56bab755c76f2b
  3. Moving slot 1345 from dd19221c404fb2fc4da37229de56bab755c76f2b
  4. Moving slot 1346 from dd19221c404fb2fc4da37229de56bab755c76f2b
  5. Moving slot 1347 from dd19221c404fb2fc4da37229de56bab755c76f2b
  6. Moving slot 1348 from dd19221c404fb2fc4da37229de56bab755c76f2b
  7. Moving slot 1349 from dd19221c404fb2fc4da37229de56bab755c76f2b
  8. Moving slot 1350 from dd19221c404fb2fc4da37229de56bab755c76f2b
  9. Moving slot 1351 from dd19221c404fb2fc4da37229de56bab755c76f2b
  10. Moving slot 1352 from dd19221c404fb2fc4da37229de56bab755c76f2b
  11. Moving slot 1353 from dd19221c404fb2fc4da37229de56bab755c76f2b
  12. Moving slot 1354 from dd19221c404fb2fc4da37229de56bab755c76f2b
  13. Moving slot 1355 from dd19221c404fb2fc4da37229de56bab755c76f2b
  14. Moving slot 1356 from dd19221c404fb2fc4da37229de56bab755c76f2b
  15. Moving slot 1357 from dd19221c404fb2fc4da37229de56bab755c76f2b
  16. Moving slot 1358 from dd19221c404fb2fc4da37229de56bab755c76f2b
  17. Moving slot 1359 from dd19221c404fb2fc4da37229de56bab755c76f2b
  18. Moving slot 1360 from dd19221c404fb2fc4da37229de56bab755c76f2b
  19. Moving slot 1361 from dd19221c404fb2fc4da37229de56bab755c76f2b
  20. Moving slot 1362 from dd19221c404fb2fc4da37229de56bab755c76f2b
  21. Moving slot 1363 from dd19221c404fb2fc4da37229de56bab755c76f2b
  22. Moving slot 1364 from dd19221c404fb2fc4da37229de56bab755c76f2b
  23. Do you want to proceed with the proposed reshard plan (yes/no)? yes

确认之后,redis-trib就开始执行分片操作,将哈希槽一个一个从源主节点移动到7007目标主节点。

重新分片结束后我们可以check以下节点的分配情况。

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# ./redis-trib.rb check 127.0.0.1:7001
  2. >>> Performing Cluster Check (using node 127.0.0.1:7001)
  3. M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001
  4. slots:1365-5460 (4096 slots) master
  5. 1 additional replica(s)
  6. M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007
  7. slots:0-1364,5461-6826,10923-12287 (4096 slots) master
  8. 0 additional replica(s)
  9. M: a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005
  10. slots:6827-10922 (4096 slots) master
  11. 1 additional replica(s)
  12. S: 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006
  13. slots: (0 slots) slave
  14. replicates f9886c71e98a53270f7fda961e1c5f730382d48f
  15. M: f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003
  16. slots:12288-16383 (4096 slots) master
  17. 1 additional replica(s)
  18. S: 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002
  19. slots: (0 slots) slave
  20. replicates a5db243087d8bd423b9285fa8513eddee9bb59a6
  21. S: 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004
  22. slots: (0 slots) slave
  23. replicates dd19221c404fb2fc4da37229de56bab755c76f2b
  24. [OK] All nodes agree about slots configuration.
  25. >>> Check for open slots...
  26. >>> Check slots coverage...
  27. [OK] All 16384 slots covered.
  28. [root@localhost redis-cluster]#

slots:0-1364,5461-6826,10923-12287 (4096 slots) master

可以看到7007节点分片的哈希槽片不是连续的,间隔的移动。

[plain] view plain copy

 

  1. [root@localhost redis-cluster]# cd redis07/
  2. [root@localhost redis07]# ./redis-cli -c 7007
  3. Could not connect to Redis at 127.0.0.1:6379: Connection refused
  4. [root@localhost redis07]# ./redis-cli -c -p 7007
  5. 127.0.0.1:7007> keys *
  6. 1) "name"
  7. 2) "age"
  8. 127.0.0.1:7007>
  9. 127.0.0.1:7007>

可以看到将7001的age[741]和name[5798]移动到7007节点上,

主节点7007添加成功。

redis节点管理-新增主节点的更多相关文章

  1. redis节点管理-新增从节点

    原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg12.html 新增从节点 新增一个节点7008节点,使用add-node --slave命令. [pl ...

  2. redis节点管理-节点的移除

    原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg13.html 节点的移除 和节点添加一样,移除节点也有移除主节点,从节点. 1.移除主节点 移除节点使 ...

  3. 编译安装redis之快速增加redis节点

    #: 下载安装包 [root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.14.tar.gz #:解压 [root@l ...

  4. redis 集群新增节点,slots槽分配,删除节点, [ERR] Calling MIGRATE ERR Syntax error, try CLIENT (LIST | KILL | GET...

    redis reshard 重新分槽(slots) https://github.com/antirez/redis/issues/5029 redis 官方已确认该bug redis 集群重新(re ...

  5. Redis客户端管理

    1.客户端管理 Redis提供了客户端相关API对其状态进行监控和管理,本节将深入介绍各个API的使用方法以及在开发运维中可能遇到的问题. 1.1 客户端API 1.client list clien ...

  6. redis的管理工具

    phpredisadmin工具 rdbtools管理工具 saltstack管理redis 通过codis完成redis管理 一:phpredisadmin工具:类似于mysqladmin管理mysq ...

  7. redis cluster管理工具redis-trib.rb详解

    redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...

  8. cachecloud:Redis云管理平台

    https://github.com/sohutv/cachecloud 一.CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standal ...

  9. element-ui组件,全选树节点,新增数据子节点数据,出现回填问题

    案情分析:全选后父节点被选中保存,在这个树节点下新增数据时,就会出现,也被选中,事实上数据是没有被选中,也就意味着权限未被配置,而显示是已经配置了,显然这个是一个bug 1.处理前,直接用下面的方法很 ...

随机推荐

  1. iOS WKWebView ios9以上版本配置 与 设置UserAgent(用户代理), 解决点击web, 客户端接收不到web事件问题

    项目运行在ios9上需要在info.plist文件中配置加入如下信息, App Transport Security Settings Allow Arbitrary Loads = YES < ...

  2. JS面试题第一弹

    1.javascript的typeof返回哪些数据类型  alert(typeof [1, 2]); //object     alert(typeof 'leipeng'); //string   ...

  3. 安装sysstat出现软件包依赖问题

    需要使用Linux性能分析工具iostat 和sar等, 这就需要安装软件包sysstat 在Ubuntu 12.04下运行sudo apt-get install sysstat,出现如下问题: 开 ...

  4. 《深入浅出MyBatis技术原理与实战》——7. 插件

    在第6章讨论了四大运行对象的运行过程,在Configuration对象的创建方法里我们看到了MyBatis用责任链去封装它们. 7.1 插件接口 在MyBatis中使用插件,我们必须使用接口Inter ...

  5. jstree无限级菜单ajax按需动态加载子节点

    业余时间研究了一下jstree,更新非常快已经是3.0了,首先看一下效果截图: 1.页面引入样式和脚本(注意路径根据实际情况) <link href="~/Scripts/vakata ...

  6. CentOS上使用yum安装Apache

    关键词 CentOS上使用yum安装Apache 摘要 Apache在Linux系统中,其实叫“httpd”,它“无耻的”占据了官方名义!CentOS可以使用yum命令,非常简单和容易的安装Apach ...

  7. ubuntu使用命令更新ubuntu系统

    我们都知道ubuntu是一款linux系统,它不像WINDOWS系统,它是一个开源的系统,它随时都在更新它系统,所以人们都说Linux系统要比WINDOWS系统安全.为了我们电脑安全,我们如何利用ub ...

  8. 字符串hash-RK算法讲解二

    算法分析:预处理时间Θ(m),即求h,p,t的时间为,匹配时间在最坏情况下为Θ((n-m-1)m),因为可能出现每次都是可能命中点的情况.如T=a^n,P=a^m,此种情况下验证时间为Θ((n-m-1 ...

  9. CodeForces 734E Anton and Tree

    $dfs$缩点,树形$dp$. 首先将连通块缩点,缩点后形成一个黑白节点相间的树.接下来的任务就是寻找一个$root$,使这棵树以$root$为根,树的高度是最小的(也就是一层一层染色).树形$dp$ ...

  10. 51nod 1052 (dp)

    最大M子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M >= N个数中正数的个数,那么输出所有正数的和 ...