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集羣模式,這個模式在主節點之間數據是不同的,數據也能夠根據需求自動轉向其餘節點。這樣就能夠實現橫向動態擴容,新增長的主從節點,用於存儲新的數據則可,對之前的節點的數據不會有任何影響。再者說,配置也很簡單,這纔是咱們所須要的集羣模式。

相關文章
相關標籤/搜索