• redis节点管理-新增主节点


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

    集群节点添加

     

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

        1、新增主节点

     

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

           

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    1. Source node #1:all  

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

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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
     
     在CODE上查看代码片派生到我的代码片
    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添加成功。

  • 相关阅读:
    基本类型传递值与引用类型传递值的区别
    01 基本类型的赋值与引用类型赋值的区别
    模仿51cto搜索框
    使用map将字数组里的对象重新组装
    01day 表单组件 动态绑定变量 导航组件 地图组件 view text是否可以复制 button 上下滚动组件
    POJ1321棋盘问题(暴搜)
    Codeforces Round #620 (Div. 2) C. Air Conditioner
    Codeforces Round #620 (Div. 2) B. Longest Palindrome
    Codeforces Round #620 (Div. 2) A. Two Rabbits
    Codeforces Round #619 (Div. 2) Ayoub's function
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5984010.html
Copyright © 2020-2023  润新知