1. 程式人生 > >Centos7 單機搭建redis叢集(三主三從)

Centos7 單機搭建redis叢集(三主三從)

概要:本文主要介紹如何在Centos7中單機搭建redis叢集三主三從,按照本文絕對可以實現該需求,至於先搭建單機版主要為了方便理解redis叢集,為下一步開發或生產上redis叢集做鋪墊。同時本人在搭建過程中也做了點總結,希望對沒有接觸過redis叢集或剛接觸redis叢集的小夥伴有些許幫助,同時也建議在檢視本文前能先了解redis單節點的部署。下面進入正題。

1、使用yum安裝所需要的工具

yum -y install wget vim tcl gcc make

2、下載redis並解壓

cd /usr/local

wget http://download.redis.io/releases/redis-3.2.8.tar.gz         (獲取redis)

tar -zxvf redis-3.2.8.tar.gz

3、編譯安裝redis原始檔

    cd redis-3.2.8

    make    (若安裝報錯,可以改為這一句:make MALLOC=libc)

    make install

        (如果 /usr/local/bin/ 資料夾內沒有 redis-server 那幾個檔案,就從 /usr/local/redis-3.2.8/src/ 中拷貝過去,命令:cp         redis-server redis-cli redis-sentinel redis-trib.rb redis-benchmark redis-check-aof redis-check-rdb /usr/local/bin/)

4、配置核心引數(可以省略)

    --配置 vm.overcommit_memory 為1,這可以避免資料被截斷

        systcl -w vm.overcommit_memory=1

5、建立多例項的資料夾

    cd /usr/local/

    mkdir cluster

    cd cluster

    mkdir 7000 7001 7002  8001 8002 8003 

6、修改配置檔案

    vim /usr/local/redis/redis.conf

    bind  0.0.0.0   (0.0.0.0表示所有節點都可以訪問該redis)

    protected-mode no 

    daemonize yes (設定後臺執行redis)

    cluster-enabled yes(開啟叢集,把#去掉)

    cluster-node-timeout 15000 (設定請求超時時間,預設為15秒,可以自行修改)

    appendonly yes (aop日誌開啟,會每次進行寫操作都記錄一條日誌)

    --根據不同的埠需要設定的地方

        port 7000

        pidfile /var/run/redis_7000.pid

        dbfilename dump_7000.rdb

        appendfilename "appendonly_7000.aof"

        cluster-config-file nodes_7000.conf

7、複製配置檔案到各個例項資料夾,並且對相應的埠號和引數進行配置。

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7000/

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7001/

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7002/

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8001/

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8002/

    cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8003/

8、啟動各個節點

    redis-server /usr/local/cluster/7000/redis.conf

                              ...

    redis-server /usr/local/cluster/8003/redis.conf

    --使用ps -ef|grep redis | grep cluster檢視是否都啟動成功,ip和埠號是否都正確。

9、安裝ruby、redis環境

yum -y install ruby rubygems

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

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

source /usr/local/rvm/scripts/rvm

rvm install ruby-2.3.3   (此過程耗時過長,耐心等待~)

rvm use 2.3.3 --default

gem install redis

10、建立叢集

    (redis官方提供了redis-trib.rb 這個工具,就在解壓目錄src目錄中,第3步中已將它複製到/usr/local/bin目錄中,可以直接在命令列中使用,如果沒複製的話自行復制過去即可)

    redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003   (redis-trib.rb建立叢集時會嘗試連線列出來的redis節點,如果這裡報錯你就要檢查一下你列出來的redis節點是否都正常執行或者所有節點直接是否都網路互通)

    留意一下螢幕,會有一句(type 'yes' or accept),輸入yes,回車。(意思是:接受自主分配三主三從)

    如果最後出現

      >>> Check for open slots...

      >>> Check slots coverage...

    說明搭建成功。

11、驗證叢集

redis-cli -h 127.0.0.1 -c -p 7000  (加引數 -c 可以連線到叢集,因為redis.conf將bind改為了ip地址,所以 -h 不可以省略)

連線到7000埠使用set存測試值

再連線到7001埠取值,redis叢集可用

提示:在使用cli連線到redis後可以使用info replication命令來檢視主從關係等資訊。

12、其餘測試

搭建完成後可以做些其餘測試,比如在主節點A上存資料,看資料是存到A節點內還是會隨機存到任一主節點?

再比如down掉主節點A,看A的從節點是否會搶佔A節點等等。

這篇文章只是給大家入了個門,保證了該叢集是可用的,但幾乎所有redis的配置都是預設的。接下來一篇文章研究的重心就放在瞭如何調優和redis叢集在生產上的應用。

13、總結(必看):

  1. redis叢集至少33
  2. Redis 叢集沒有使用一致性hash, 而是引入了雜湊槽的概念,Redis 叢集有16384個雜湊槽,每個key通過CRC16校驗後對16384取模來決定放置哪個槽.叢集的每個節點負責一部分hash槽。如果是33從,A掛了的話從節點A1就會頂替A來掌管它的雜湊槽,如果A1再掛了,其雜湊槽就會沒有節點來掌管,即cluster就會不可用。
  3. 寫操作會隨機到3個主節點上,即使是在從節點上進行的寫操作,也會被隨機重定向到某個主節點中,在主節點上操作也一樣會隨機重定向到一箇中,當然覆蓋原有key除外。
  4. 資料是分開儲存的,主節點不進行資料的相互同步與複製,資料的複製發生在主節點和其從節點之間。
  5. 資料a存在節點A中,在節點B中查詢資料a,redis會自動重定向到節點A中進行查詢
  6. Redis 並不能保證資料的強一致性. 這意味這在實際中叢集在特定的條件下可能會丟失寫操作。比如寫入A節點的資料,A在同步給從節點A1的過程中A出現宕機,這樣未同步過去的資料就出現了丟失的情況。

     7、預設主節點A宕機後從節點A1成為master,但當A重新啟用後並不會重新搶佔為master。