redis介紹(6)集群(ruby)


 redis集群:

  redis集群是高可用的一種體現,讓整個redis圈更加穩定,不易出現宕機的情況,

redis原理:

   redis3.0之前是不支持集群的,實現集群要自己去配置實現,很麻煩,在3.0之后就支持了

  原理圖:借助網上很火的一張圖

    

    

  這個圖中,每一個藍色的圈都代表着一個redis的服務器節點。它們任何兩個節點之間都是相互連通的。客戶端可以與任何一個節點相連接,然后就可以訪問集群中的任何一個節點。對其進行存取和其他操作。

  那么redis是怎么做到的呢?首先,在redis的每一個節點上,都有這么兩個東西,一個是插槽(slot)可以理解為是一個可以存儲兩個數值的一個變量這個變量的取值范圍是:0-16383。還有一個就是cluster我個人把這個cluster理解為是一個集群管理的插件。當我們的存取的key到達的時候,redis會根據crc16的算法得出一個結果,然后把結果對 16384 求余數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作

  

   上面這個圖就解釋了,最后在7003中查不到這個key,而能獲取這個key的值,類似於路由的概念

 


   

redis集群配置步驟:  

  下面我簡單實現一下在linux上搭建redis集群的步驟,redis的非集群安裝

  redis集群我采用六個點,三主三從形式,這是為了選舉機制而這樣設計,這個選舉規則和hive,zookeeper類似,都是 少數服從多數的選舉機制.

    由於資源有限,我用一台主機模擬六台實例機器,實現集群的搭建,暫定我的實例端口7001~7006.

    1>在搭建集群之前我簡單介紹一下安裝編譯redis的四步:

      第一步:下載redis.tar包,

      第二步:上傳,並解壓

      第三步:進人解壓后的文件夾輸入make進行編譯

      第四步: 編譯后需要走執行安裝,並指定安裝路徑   make install PREFIX=/usr/local/redis     這樣就可以生成bin目錄了,不用拷貝src,通過執行這個命令就跑到我們指定的文件夾下,並生成bin文件夾: 

    2>redis的安裝編譯按照上面步驟走就應該可以了,記得啟動測試一下,我這就不測試先。

    3>在步驟1中的第四步的bin文件內容如下:此時在任何目錄都可以執行bin文件夾下的命令了

      

     4>退出到上級目錄,並創建一個redis-cluster文件夾,放集群的文件,將bin復制6份分別拷貝到

      

     5>把剛安裝編譯目錄下的redis.conf文件復制到redis-cluster/redis1|2|3|4|5|6文件夾下,並對redis.conf修改端口號:

        

        分別進入各個文件夾下,修改redis.conf     vi redis.conf

          修改port 6379   改為7001  其他同理,改7002,7003.。。。

          

     6>  分別啟動6個redis節點的服務  ,驗證端口修改是否成功 (這步可以不做)

     7>准備集群:

      redis集群的管理工具使用的是ruby腳本語言,安裝集群需要ruby環境。

       

      安裝Ruby的打包系統,主要用gem命令:

      

      還需要連接gem服務器,需要手工安裝:

      

      執行這個命令,加載gem命令:gem install redis-3.0.0.gem 

      

     8>集群的環境准備已經完成,下面在redis.conf配置允許集群:

      把#注釋放開:就行了,其他幾個也是這樣操作

      

      然后再次重啟實例,第六步在這做也行,為了步驟完整,就都寫出來了

     9>集群管理工具在redis解壓文件夾的src的文件夾中,使用redis-cluster的集群管理工具啟動集群

      

    10>啟動集群

      ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006    這個命令可以:

      ./redis-trib.rb create --replicas 1 192.168.146.132:7001 192.168.146.132:7002 192.168.146.132:7003 192.168.146.132:7004 192.168.146.132:7005 192.168.146.132:7006  (需要在etc把ip放出來才可以,我這里搭建的是測試環境,就不操作了)這步我執行這條命令報錯是:

      

    所以執行上面那條命令:集群啟動效果如下:

      

      

      看到ok代表集群啟動成功了。

    11>測試:加-c參數,節點之間就可以互相跳轉

      

      

      雖然查不到key,但是可以獲取到值,說明集群是成功的。

      

 

      存到了7002上,轉到7001,這是主節點,他們對應的slave點也會有這條數據,但是7003和7006上沒有,測試成功:

     


       

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM