1. 程式人生 > >Linux下搭建Redis分散式叢集(詳細圖解演示)

Linux下搭建Redis分散式叢集(詳細圖解演示)

一 環境搭建. 

      1.1 環境準備.三臺虛擬機器.redis的版本是3.2.9.redis的各個版本下載地址:連結. 三個主節點三個從節點.

          ①:192.168.199.133.(部署兩個Redis服務.)分別在目錄redis_cluster7001和7002下.(作為叢集控制端,需要編譯安裝redis,並且安裝Ruby環境).

          ②:192.168.199.136.(部署兩個Redis服務.)分別在目錄redis_cluster7003和7004下.

          ③:192.168.199.137.(部署兩個Redis服務.)分別在目錄redis_cluster7005和7006下.

     其中192.168.199.133下載了Redis並且編譯安裝了.

分別完成另外兩臺的目錄建立.

   ①:192.168.199.136.

 ②:192.168.199.137.

    1.2 配置檔案複製.

      192.168.199.133下執行:

      scp -r /usr/local/redis/bin [email protected]:/usr/local/redis(-r遞迴複製目錄)

      scp -r /usr/local/redis/bin [email protected]:/usr/local/redis

1.3 檢視複製結果.

複製redis下的redis.conf目錄至redis_cluster下的對應目錄下.

  ①:199.168.199.133.

  cp redis.conf /usr/local/redis_cluster/7001

  cp redis.conf /usr/local/redis_cluster/7002

②:192.168.199.136.

scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7003

scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7004

③:192.168.199.137.(同上)

scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7005

scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7006

二.修改配置檔案.

      2.1修改下面幾個配置項.

           port 7001  //六個節點配置檔案分別是7001-7003

           bind 192.168.1.109    //預設ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則建立叢集時無法訪,和單機叢集有區別

           daemonize yes        //redis後臺執行

          pidfile /var/run/redis_7001.pid   //pidfile檔案對應7001-7003

          cluster-enabled yes   //開啟叢集

          cluster-config-file nodes_7001.conf  //儲存節點配置,自動建立,自動更新對應7001-7003

          cluster-node-timeout 5000    //叢集超時時間,節點超過這個時間沒反應就斷定是宕機

          appendonly yes   //儲存方式,aof,將寫操作記錄儲存到日誌中

           7001~7006的6個配置檔案都修改一下.根據所在目錄修改即可.

      2.2 192.168.199.133做為建立叢集的主控制端,安裝Ruby環境.(建立叢集環境的指令碼是Ruby語言編寫的,需要Ruby的環境).

           ①:安裝Curl.

          sudo yum install curl

  檢視Curl的版本.curl --version

  

        ②:RVM的安裝.(直接yum安裝會出 現這樣的錯誤.RVM是Ruby的包管理器)

        gem install redis

        ERROR: Error installing redis:

        redis requires Ruby version >= 2.2.2.)

    參考這篇文章的解決方式:連結.

    下面是自己按照文章中的解決方式走了一遍,是可行的.

     gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

    curl -sSL https://get.rvm.io | bash -s stable

find / -name rvm -print

source /usr/local/rvm/scripts/rvm

rvm list known(列出已知的rvm的版本)

rvm install 2.4.1(安裝rvm 2.4.1).

rvm use 2.4.1(使用2.4.1的版本).

rvm use 2.4.1 --default(設定ruby的預設版本)

rvm remove 2.0.0(移除ruby2.0.0的版本).

ruby --version(檢視ruby的版本).

安裝redis.

三:啟動Redis叢集.

     3.1我三臺虛擬機器由於沒有啟動防火牆,如果啟動了,做一下這些埠的對映.首先是啟動6個Redis服務.

    ①:192.168.199.133的7001和7002服務.

 ./redis-server /usr/local/redis_cluster/7001/redis.conf

./redis-server /usr/local/redis_cluster/7002/redis.conf

ps -ef | grep -i redis

 ② 192.168.199.136

./redis-server /usr/local/redis_cluster/7003/redis.conf

./redis-server /usr/local/redis_cluster/7004/redis.conf

ps -ef | grep -i redis

③ 192.168.199.137

./redis-server /usr/local/redis_cluster/7005/redis.conf

./redis-server /usr/local/redis_cluster/7006/redis.conf

ps -ef | grep -i redis

至此6臺Redis服務均已成功啟動了.

       3.2 Redis的Ruby指令碼建立叢集.

         redis-3.2.9的src目錄下有redis-trib.rb指令碼.

       

     ./redis-trib.rb create --replicas 1  192.168.199.133:7001 192.168.199.136:7003 192.168.199.137:7005 192.168.199.133:7002 192.168.199.136:7004 192.168.199.137:7006   (這裡說明一下,按照順序,前面的是主節點後面三個是從節點,--replicates 1表示一個主節點有三個從節點的.)

三個主節點的Hash槽範圍是:一共有16384的hash solt。(0~16383)

       7001:(0~5460)

       7003:(5461~10922)

       7005:(10923~16383)

至此,完成了Linux下的三臺機器上三主三從節點的分散式Redis的叢集搭建.這裡是在虛擬機器裡面搭建,如果是雲伺服器上,肯定是開啟了防火牆的,注意新增叢集的埠開放,以及安全組的相應埠開放,否則會一直Join...新增服務中的.

四 測試Redis叢集.

      4.1.首先是Redis客戶端連線一下Redis服務.key值的測試.

       ./redis-cli -h 192.168.199.136 -p 7003 -c(-h是IP,-p是埠,-c是連線叢集)

     連線集群后和單臺操作redis的key一樣,這裡是設定了一個key,沒有跳轉是因為分配hash槽是就分配在這個7003主節點上了.

Redis Cluster值分配規則,所以分配key的時候,它會使用CRC16(‘my_name’)%16384演算法,來計算,將這個key 放到哪個節點,這裡分配到了15118slot 就分配到了7005(10923~16383)這個節點上。所以有這樣一個跳轉:

-> Redirected to slot [15118] located at 192.168.199.137:7005

看一下下面刪除這兩個key時,會更清楚一些.7005主節點跳轉之7003主節點.5798屬於(5461~10922).

   4.2 叢集宕機測試.

       ①:首先是幹掉一個主節點,例如7003.(當這個主節點有從節點的時候

   ./redis-trib.rb check 192.168.199.133:7001(check檢查叢集)7003對應的主節點掛了,則從節點7002升為主節點

cluster nodes(這裡連線一個從節點7004).

②:再次幹掉一個主節點(當這個主節點沒有從節點的時候).直接說就是7002節點.

再次檢測叢集.

./redis-trib.rb check 192.168.199.133:7001

至此完成了,Linux下的分散式Redis的叢集搭建的完整過程.遇到了一些問題,多思考一下,還是比較簡單的.