1. 程式人生 > >Linux系統搭建Redis叢集(redis-cluster)

Linux系統搭建Redis叢集(redis-cluster)

工具準備

Linux圖形化工具為Xftp,shell工具為Xshell
#Redis叢集相關概念

  • redis-cluster架構圖
    這裡寫圖片描述
    redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護
    redis 叢集中內建了 16384 個雜湊槽,當需要在 redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點
    例如:
    這裡寫圖片描述

    Key:a
    計算a的Hash值,若為100,這個槽在server1上,所以a應存放於server1
    Key:hello
    hello的Hash值,若為10032,這個槽在server2上,則hello應存放於server2
    #叢集搭建
    ##1. 叢集結構
    叢集中有三個節點,每個節點有一主一備,需要6臺虛擬機器。
    由於條件有限,所以搭建一個偽分散式的叢集,使用6個redis例項來模擬

2. 搭建叢集需要的環境

搭建叢集需要使用到官方提供的ruby指令碼。
需要安裝ruby的環境

2.1 安裝ruby

第一步:

yum -y install ruby
或
yum install ruby
  • 1
  • 2
  • 3

若使用yum install xxxx,找到安裝包之後,會詢問Is this ok [y/d/N]:,需要手動進行選擇,如下圖:
這裡寫圖片描述
如果加上引數-y,則會自動選擇y,不需要再手動選擇,下載自動完成
第二步:

yum -y install rubygems
或
yum install rubygems

   
  • 1
  • 2
  • 3

2.2 上傳安裝包

第一步:
官方網站下載Redis的Linux系統安裝包,字尾 .tar.gz,使用XFtp上傳到Linux伺服器
這裡寫圖片描述
第二步: 解壓:

tar -zxf redis-4.0.10.tar.gz
或
tar -zxvf redis-4.0.10.tar.gz
  • 1
  • 2
  • 3

-zxvf顯示解壓進度,-zxf不顯示

2.3 下載指令碼依賴

Redis叢集需要使用官方提供的叢集管理指令碼工具redis-trib.rb
此工具位於redis安裝包下的src目錄
這裡寫圖片描述
使用此指令碼需要安裝其所依賴的ruby包,執行命令:

gem install redis

   
  • 1

問題來了!
Linux報錯:
Fetching: redis-4.0.2.gem (100%) ERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
2.2.2的報錯,是CentOS預設支援ruby到2.0.0,可gem 安裝redis需要最低是2.2.2
解決辦法:提升ruby版本

  1. 安裝curl

     sudo yum install curl
    
         
    • 1
  2. 安裝rvm

     curl -L get.rvm.io | bash -s stable
    
         
    • 1

    執行這一步可能會有特殊情況:

    這裡寫圖片描述
    按提示執行所述的命令即可

     gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
     command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
    
         
    • 1
    • 2

    重新執行第二步的命令
    這裡寫圖片描述
    成功!繼續以下步驟

  3. 重新整理資源

     source /usr/local/rvm/scripts/rvm
    
         
    • 1
  4. 檢視rvm庫中已知的ruby版本

     rvm list known
    
         
    • 1
  5. 安裝一個ruby版本

     rvm install  2.4.0
    
         
    • 1

    可自行選擇,最低版本2.2.2

  6. 使用一個ruby版本

     rvm use  2.4.0
    
         
    • 1
  7. 解除安裝一個已知版本

     rvm remove 2.0.0
    
         
    • 1
  8. 檢視版本

     ruby  --version
    
         
    • 1

    這裡寫圖片描述

問題解決,重新執行下載指令碼依賴的命令:

gem install redis

   
  • 1

這裡寫圖片描述
依賴下載完成,準備工作結束
##3. 開始搭建叢集(下面的命令都給出了相對路徑,方便大家參考)
**第一步:**安裝redis

  1. 安裝的前提條件:需要安裝gcc

    
         

    yum install gcc-c++
    ```
    2. 進入解壓好的redis安裝包,由於redis使用C語言編寫,所以要先編譯再安裝

    ```
    
       
    • 1

    cd redis-4.0.10
    [[email protected] redis-4.0.10]# make //編譯
    [[email protected] redis-4.0.10]# make install PREFIX=/usr/local/redis //安裝,PREFIX指定安裝路徑,沒有的路徑自動建立
    ```
    3. 將redis安裝包中的 redis.conf 檔案拷貝到redis的 bin 目錄下:

    ```
    
       
    • 1

    [[email protected] redis-4.0.10]# cp redis.conf /usr/local/redis/bin/
    ```
    4. 拷貝六份redis/bin到新目錄下

    ```
    
       
    • 1

    [[email protected] redis]# cp -r bin /usr/local/redis-cluster/redis01
    [[email protected] redis-cluster]# cp -r redis01 redis02
    [[email protected] redis-cluster]# cp -r redis01 redis03
    [[email protected] redis-cluster]# cp -r redis01 redis04
    [[email protected] redis-cluster]# cp -r redis01 redis05
    [[email protected] redis-cluster]# cp -r redis01 redis06
    ```

    第二步: 修改配置檔案(每個redis例項都需要修改)

    [[email protected] redis-cluster]# vim redis01/bin/redis.conf
    
       
    • 1
    1. 開啟後端啟動
      這裡寫圖片描述
    2. 修改埠號,預設6379,叢集埠號從7001~7006
      若是同一臺主機,埠必須不同,不同主機可以相同
      這裡寫圖片描述
    3. 開啟cluster-enable前面的註釋
      這裡寫圖片描述
    4. 修改繫結ip
      這裡寫圖片描述
      **注意:**這裡的ip需要通過ifconfig命令檢視,是伺服器的內網ip,不是公網ip,如果是虛擬 機的話,就是自己所設定的ip,否則的話,會出現即使啟動redis服務,通過ps -ef|grep redis命令找不到相關程序的情況
    5. 關閉保護模式
      這裡寫圖片描述

    **第三步:**把建立叢集的ruby指令碼複製到redis-cluster目錄下

    [[email protected] src]# cp redis-trib.rb /usr/local/redis-cluster/
    
       
    • 1

    **第四步:**啟動6個redis例項

    1. 通過編寫指令碼啟動,redis-cluster目錄下:

      
           

      [[email protected] redis-cluster]# vim startall.sh
      ```

      ```
      
         
      • 1

      cd redis01
      ./redis-server redis.conf
      cd …
      cd redis02
      ./redis-server redis.conf
      cd …
      cd redis03
      ./redis-server redis.conf
      cd …
      cd redis04
      ./redis-server redis.conf
      cd …
      cd redis05
      ./redis-server redis.conf
      cd …
      cd redis06
      ./redis-server redis.conf
      cd …
      ```
      這裡寫圖片描述
      2. 賦予指令碼執行許可權

      ```
      
         
      • 1

      [[email protected] redis-cluster]# chmod +x startall.sh
      ```

      **第五步:**啟動6個redis例項

      [[email protected] redis-cluster]# ./startall.sh
      
         
      • 1

      這裡寫圖片描述
      檢視redis程序

      [[email protected]_175_68_centos redis-cluster]# ps -ef|grep redis
      
         
      • 1

      這裡寫圖片描述
      若出現找不到程序的情況,檢查第二步、第三步配置操作是否正確。若無誤還不能啟動,關閉防火牆(不建議)或者防火牆開放埠(7001~7006)
      CentOS7開放埠:

      firewall-cmd --zone=public --add-port=80/tcp --permanent //單獨開放
      firewall-cmd --permanent --zone=public --add-port=7001-7006/tcp //批量開發
      firewall-cmd --reload //更改完成,重新載入
      
         
      • 1
      • 2
      • 3

      **第六步:**建立叢集

      [[email protected]_175_68_centos redis-cluster]# ./redis-trib.rb create --replicas 1 10.135.175.68:7001 10.135.175.68:7002 10.135.175.68:7003 10.135.175.68:7004 10.135.175.68:7005 10.135.175.68:7006
      
         
      • 1

      這裡寫圖片描述
      M:b4fb23576acc8eef0eec83bf3b76df3955081a1d 為主節點Id
      S: 112d377b8d70b6dedf2355ca4e6c325ccc818003 10.135.175.68:7005
      replicates b4fb23576acc8eef0eec83bf3b76df3955081a1d 為從節點下所對應主節點Id
      目前來看,7001-7003 為主節點,7004-7006 為從節點,並詢問你是否同意這麼配置,輸入 yes 後,會開始叢集建立
      這裡寫圖片描述
      建立成功!
      #叢集測試

      [[email protected]_175_68_centos redis-cluster]# redis01/redis-cli -c -h 10.135.175.68 -p 7002
      
         
      • 1

      這裡要注意命令中的-c引數,必須要有,否則能夠連線叢集,但卻不能進行叢集中redis的跳轉
      這裡寫圖片描述
      連線成功!
      存入一個鍵值
      這裡寫圖片描述
      可以看到,redis對a進行了計算得出a應該存放於埠為7003的redis伺服器中,自動進行了跳轉並儲存a
      取出a的值
      這裡寫圖片描述
      可以看出a確實是存入7003這個redis中了,叢集搭建成功!
      #總結
      到此,Redis叢集的搭建就完成了,希望我的文章對你有所幫助

              </div>