Redis进阶实践之十二 Redis的Cluster集群动态扩容

1、引言

      上一篇文章咱们一步一步的教你们搭建了Redis的Cluster集群环境,造成了3个主节点和3个从节点的Cluster的环境。固然,你们可使用 Cluster info 命令查看Cluster集群的状态,也可使用Cluster Nodes 命令来详细了解Cluster集群每一个节点的详细信息和关系。咱们能够在主节点上增长数据、操做数据,也能够在从节点上读取数据,这些操做固然都没有问题。咱们今天这篇文章主要是讲解一下如何在不停掉Cluster集群环境的状况下,动态的往集群环境中增长主、从节点和动态的从集群环境中删除节点。好了,废话很少说,开始咱们今天的讲解。在开始以前,先要说明一下,由于redis的动态扩容操做都是经过redis-trib.rb脚本文件来完成的,因此咱们先来看看对这个脚本文件的说明,效果如图:node

    [root@linux redis] # ruby redis-trib.rb

    

2、Cluster集群增长操做

       如今正好开始咱们的操做,我把增长节点和删除节点分开来写,而且增长或者删除节点,我都分了两个方面来讲,一个方面是主节点的操做,另外一个方面是从节点的操做,由于主、从节点在操做上会有差别,因此分来来讲。增长节点的顺序是先增长Master主节点,而后在增长Slave从节点。固然这篇文章是在上一篇文章所讲的Cluster集群模式的基础之上来说的,那就让咱们先来看看上一篇文章所创建的Cluster集群模式的详细信息。效果如图:

       

     

      一、动态增长Master主服务器节点

            1.一、建立目录7006(Master主节点文件夹)和7007(Slave从节点文件夹),并从之前Cluster集群节点7000-7005任一节点中拷贝配置文件redis.conf到7006和7007目录下。linux

                [root@linux redis-cluster]# pwd
                [root@linux redis-cluster]# /root/application/program/redis-cluster/

                [root@linux redis-cluster]# mkdir 7006 7007

                [root@linux redis-cluster]# ls
                7000 7001 7002 7003 7004 7005 7006 7007

                   [root@linux redis-cluster]# cp 7000/redis.conf 7006
                   [root@linux redis-cluster]# cp 7000/redis.conf 7007


                  一、建立目录:

              redis

             二、拷贝配置文件:

              

            1.二、修改配置文件,将7006和7007目录下面的redis.conf配置文件的端口进行相应修改,与本身的目录名称保持一致,修改项目以下:(在linux环境下能够执行以下命令进行全局替换::%s/7000/7006/g,%s/7000/7007/g,保存并退出则可)

                  1.2.一、7006节点的配置文件:redis.confruby

                      bind 192.168.127.130

                      port 7006
    
                      daemonize yes

                      pidfile /var/run/redis-7006.pid

                      logfile /root/application/program/redis-cluster/7006/redis.log
    
                      dir /root/application/program/redis-cluster/7006/

                      cluster-enabled yes

                      cluster-config-file nodes-7006.conf


                      cluster-node-timeout 15000

                      appendonly yes

                      appendfsync always


                  1.2.二、7007节点的配置文件:redis.conf服务器

                      bind 192.168.127.130

                      port 7007

                      daemonize yes

                      pidfile /var/run/redis-7007.pid

                      logfile /root/application/program/redis-cluster/7007/redis.log
    
                      dir /root/application/program/redis-cluster/7007/

                      cluster-enabled yes

                      cluster-config-file nodes-7007.conf


                      cluster-node-timeout 15000

                      appendonly yes

                      appendfsync always


           1.三、启动7006和7007目录下Redis实例,并查看效果。app

                [root@linux redis]# pwd
                [root@linux redis]# /root/application/program/redis/


                [root@linux redis]# redis-server ../redis-cluster/7006/redis.conf
                [root@linux redis]# redis-server ../redis-cluster/7007/redis.conf


                          效果如图:

          
      
          

             1.四、将7006主节点加入到Cluster集群。spa

                [root@linux redis]# pwd
                [root@linux redis]# /root/application/program/redis/

                [root@linux redis]# ruby redis-trib.rb add-node 192.168.127.130:7006 192.168.127.130:7000

                  注意:当添加新节点成功之后,新的节点不会有任何数据,由于他没有分配任何的数据Slot(哈希slots),这一步须要手动操做。

                   1.4.一、增长7006:(192.168.127.130:7006,截图地址错误,端口号是7006,不是9006)
           

           1.4.二、节点增长成功。3d

            

          1.4.三、cluster info 验证:code

           

         1.4.四、cluster nodes验证:server

          

             1.五、为7006Master主节点分配数据Slots,分配方法是从集群中知道任何一个主节点(由于只有Master主节点才有数据slots),而后对其进行从新分片工做。

                [root@linux redis]# pwd
                [root@linux redis]# /root/application/program/redis/

                [root@linux redis]# ruby redis-trib.rb reshard 192.168.127.130:7000

                  1.5.一、分配数据槽:

            

                  1.5.二、选择接收数据槽的节点和数据槽产生的方式:
          

                  1.5.三、执行分配计划:
          

                  1.5.四、数据槽分配成功:
          
           
      二、动态增长Slave从服务器节点

              在增长主节点7006的时候,前面的3步是共有的,也就是从1.1-1.3,以后才是创建主节点的内容,前面的3步骤针对从节点7007也是必须的,我只是把这些步骤写到了建立主节点7006的步骤里,你们请知晓。

              2.一、将7007节点增长到集群中

                  [root@linux redis]# pwd
                  [root@linux redis]# /root/application/program/redis/

                  [root@linux redis]# ruby redis-trib.rb add-node 192.168.127.130:7007 192.168.127.130:7000


                效果如图:

          

              2.二、指定7007节点做为7006的从节点,实现主从的配置。

                  [root@linux redis]# pwd
                  [root@linux redis]# /root/application/program/redis/

                  [root@linux redis]# redis-cli -c -h 192.168.127.130 -p 7007  //登录7007
                  192.168.127.130::7007>cluster replicate 71ecd970838e9b400a2a6a15cd30a94ab96203bf(主节点的ID,这里是7006)
                  192.168.127.130::7007>OK

                  效果如图:
           


3、Cluster集群删除操做

        因为咱们在上面的步骤里面建立7006和7007两个主从的节点,下面接下来的操做,我就是从这个Cluster集群模式中动态的删除掉这两个节点。删除的顺序是先删除Slave从节点,而后在删除Master主节点,最后还原到咱们上一篇文章创建的Cluster集群模式,也就是3个主节点和3个从节点。如今是4个主节点和4个从节点。效果如图:

      
    
      一、动态删除Slave从服务器节点

            1.一、删除7007从节点,输入del-node命令,指定删除节点的IP地址和Port端口号,同时还要提供该从节点ID名称。

                [root@linux redis]# pwd
                [root@linux redis]# /root/application/program/redis/

                [root@linux redis]# ruby redis-trib.rb del-node 192.168.127.130:7007 991ed242102aaa08873eb9404a18e0618a4e37bd


                  删除成功如图:        
          

                 删除前如图:
          

                 删除后如图:
          

      二、动态删除Master主服务器节点

              要想删除Master主节点,可能要繁琐一些。由于在Master主节点上有数据槽(slots),为了保证数据的不丢失,必须把这些数据槽迁移到其余Master主节点上,而后在删除主节点。

              2.一、从新分片,把要删除的Master主节点的数据槽移动到其余Master主节点上,以避免数据丢失。

              [root@linux redis]# pwd
              [root@linux redis]# /root/application/program/redis/

              [root@linux redis]# ruby redis-trib.rb reshard 192.168.127.130:7006


                    2.1.一、移除多少槽如图:建立输入200,这里要输入199,由于计数是从0开始的,切记。

                        

                    2.1.二、接受槽的Master主节点ID:这个节点能够是任意一个主节点均可以,我选择7002,ID是:3b025b3ecfa65f462de639c7a412be443cf1dd1c
                        

                   2.1.三、从哪一个主节点移除,该主节点是7006,ID是:71ecd970838e9b400a2a6a15cd30a94ab96203bf
            

                   2.1.四、执行分区计划,选择yes。分区完成,效果如图:
                              

                   2.1.五、当前7006主节点已经没有数据槽了。
                        

              2.二、删除7006主节点,提供要删除节点的IP地址和Port端口,固然还有要删除的节点的ID名称。

                  [root@linux redis]# pwd
                  [root@linux redis]# /root/application/program/redis/

                  [root@linux redis]# ruby redis-trib.rb del-node 192.168.127.130:7006 71ecd970838e9b400a2a6a15cd30a94ab96203bf


                    2.2.一、删除成功
                        

                    2.2.二、查看节点效果
                        


4、总结      今天就写到这里了,作一个小小的总结。主从复制和哨兵模式这两个集群模式因为不能动态扩容,并且主节点之间(有多个主节点的状况)数据彻底同样,致使了主节点的容量成了整个集群的瓶颈,若是想扩展集群容量,必须扩展主节点的容量。因为以上的问题,redis在3.0开始Cluster集群模式,这个模式在主节点之间数据是不同的,数据也能够根据需求自动转向其余节点。这样就能够实现横向动态扩容,新增长的主从节点,用于存储新的数据则可,对之前的节点的数据不会有任何影响。再者说,配置也很简单,这才是咱们所须要的集群模式。

相关文章
相关标签/搜索