1. 程式人生 > >redis叢集搭建(非常詳細,適合新手)

redis叢集搭建(非常詳細,適合新手)

redis叢集搭建

在開始redis叢集搭建之前,我們先簡單回顧一下redis單機版的搭建過程

  1. 下載redis壓縮包,然後解壓壓縮檔案;
  2. 進入到解壓縮後的redis檔案目錄(此時可以看到Makefile檔案),編譯redis原始檔;
  3. 把編譯好的redis原始檔安裝到/usr/local/redis目錄下,如果/local目錄下沒有redis目錄,會自動新建redis目錄;
  4. 進入/usr/local/redis/bin目錄,直接./redis-server啟動redis(此時為前端啟動redis);
  5. 將redis啟動方式改為後端啟動,具體做法:把解壓縮的redis檔案下的redis.conf檔案複製到/usr/local/redis/bin目錄下,然後修改該redis.conf檔案->daemonize:no 改為daemonize:yse;
  6. 在/bin目錄下通過./redis-server redis.conf啟動redis(此時為後臺啟動)。
    綜上redis單機版安裝啟動完成。
    具體詳細帶圖步驟請參考 -> redis入門
    請原諒我的囉嗦,ok,接著咱們回到本次話題----redis叢集搭建!

一、Redis Cluster(Redis叢集)簡介

  • redis是一個開源的key value儲存系統,受到了廣大網際網路公司的青睞。redis3.0版本之前只支援單例模式,在3.0版本及以後才支援叢集,我這裡用的是redis3.0.0版本;
  • redis叢集採用P2P模式,是完全去中心化的,不存在中心節點或者代理節點;
  • redis叢集是沒有統一的入口的,客戶端(client)連線叢集的時候連線叢集中的任意節點(node)即可,叢集內部的節點是相互通訊的(PING-PONG機制),每個節點都是一個redis例項;
  • 為了實現叢集的高可用,即判斷節點是否健康(能否正常使用),redis-cluster有這麼一個投票容錯機制:如果叢集中超過半數的節點投票認為某個節點掛了,那麼這個節點就掛了(fail)。這是判斷節點是否掛了的方法;
  • 那麼如何判斷叢集是否掛了呢? -> 如果叢集中任意一個節點掛了,而且該節點沒有從節點(備份節點),那麼這個叢集就掛了。這是判斷叢集是否掛了的方法;
  • 那麼為什麼任意一個節點掛了(沒有從節點)這個叢集就掛了呢? -> 因為叢集內建了16384個slot(雜湊槽),並且把所有的物理節點對映到了這16384[0-16383]個slot上,或者說把這些slot均等的分配給了各個節點。當需要在Redis叢集存放一個數據(key-value)時,redis會先對這個key進行crc16演算法,然後得到一個結果。再把這個結果對16384進行求餘,這個餘數會對應[0-16383]其中一個槽,進而決定key-value儲存到哪個節點中。所以一旦某個節點掛了,該節點對應的slot就無法使用,那麼就會導致叢集無法正常工作。
  • 綜上所述,每個Redis叢集理論上最多可以有16384個節點。

二、叢集搭建需要的環境
2.1 Redis叢集至少需要3個節點,因為投票容錯機制要求超過半數節點認為某個節點掛了該節點才是掛了,所以2個節點無法構成叢集。
2.2 要保證叢集的高可用,需要每個節點都有從節點,也就是備份節點,所以Redis叢集至少需要6臺伺服器。因為我沒有那麼多伺服器,也啟動不了那麼多虛擬機器,所在這裡搭建的是偽分散式叢集,即一臺伺服器虛擬執行6個redis例項,修改埠號為(7001-7006),當然實際生產環境的Redis叢集搭建和這裡是一樣的。
2.3 安裝ruby
三、叢集搭建具體步驟如下(注意要關閉防火牆)
3.1 在usr/local目錄下新建redis-cluster目錄,用於存放叢集節點
新建Redis叢集目錄
3.2 把redis目錄下的bin目錄下的所有檔案複製到/usr/local/redis-cluster/redis01目錄下,不用擔心這裡沒有redis01目錄,會自動建立的。操作命令如下(注意當前所在路徑):

cp -r redis/bin/ redis-cluster/redis01

在這裡插入圖片描述
3.3 刪除redis01目錄下的快照檔案dump.rdb,並且修改該目錄下的redis.cnf檔案,具體修改兩處地方:一是埠號修改為7001,二是開啟叢集建立模式,開啟註釋即可。分別如下圖所示:
刪除dump.rdb檔案
刪除dump.rdb檔案
修改埠號為7001,預設是6379
在這裡插入圖片描述
將cluster-enabled yes 的註釋開啟
在這裡插入圖片描述
3.4 將redis-cluster/redis01檔案複製5份到redis-cluster目錄下(redis02-redis06),建立6個redis例項,模擬Redis叢集的6個節點。然後將其餘5個檔案下的redis.conf裡面的埠號分別修改為7002-7006。分別如下圖所示:
建立redis02-06目錄
在這裡插入圖片描述

分別修改redis.conf檔案埠號為7002-7006
在這裡插入圖片描述
3.5 接著啟動所有redis節點,由於一個一個啟動太麻煩了,所以在這裡建立一個批量啟動redis節點的指令碼檔案,命令為start-all.sh,檔案內容如下:

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 ..

3.6 建立好啟動指令碼檔案之後,需要修改該指令碼的許可權,使之能夠執行,指令如下:

chmod +x start-all.sh

在這裡插入圖片描述
3.7 執行start-all.sh指令碼,啟動6個redis節點
在這裡插入圖片描述
3.8 ok,至此6個redis節點啟動成功,接下來正式開啟搭建叢集,以上都是準備條件。大家不要覺得圖片多看起來冗長所以覺得麻煩,其實以上步驟也就一句話的事情:建立6個redis例項(6個節點)並啟動。
要搭建叢集的話,需要使用一個工具(指令碼檔案),這個工具在redis解壓檔案的原始碼裡。因為這個工具是一個ruby指令碼檔案,所以這個工具的執行需要ruby的執行環境,就相當於java語言的執行需要在jvm上。所以需要安裝ruby,指令如下:

yum install ruby

然後需要把ruby相關的包安裝到伺服器,我這裡用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致。
將Ruby包安裝到伺服器:需要先下載再安裝,如圖
在這裡插入圖片描述
安裝命令如下:

gem install redis-3.0.0.gem

在這裡插入圖片描述

3.9 上一步中已經把ruby工具所需要的執行環境和ruby包安裝好了,接下來需要把這個ruby指令碼工具複製到usr/local/redis-cluster目錄下。那麼這個ruby指令碼工具在哪裡呢?之前提到過,在redis解壓檔案的原始碼裡,即redis/src目錄下的redis-trib.rb檔案。
在這裡插入圖片描述
在這裡插入圖片描述
3.10 將該ruby工具(redis-trib.rb)複製到redis-cluster目錄下,指令如下:

cp redis-trib.rb /usr/local/redis-cluster

然後使用該指令碼檔案搭建叢集,指令如下:

./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006

注意:此處大家應該根據自己的伺服器ip輸入對應的ip地址!
在這裡插入圖片描述

中途有個地方需要手動輸入yes即可
在這裡插入圖片描述
至此,Redi叢集搭建成功!大家注意最後一段文字,顯示了每個節點所分配的slots(雜湊槽),這裡總共6個節點,其中3個是從節點,所以3個主節點分別映射了0-5460、5461-10922、10933-16383solts。

3.11 最後連線叢集節點,連線任意一個即可:

redis01/redis-cli -p 7001 -c 

注意:一定要加上-c,不然節點之間是無法自動跳轉的!如下圖可以看到,儲存的資料(key-value)是均勻分配到不同的節點的:
在這裡插入圖片描述

四、結語
呼~~~長舒一口氣…終於搭建好了Redis叢集。
整個過程其實挺簡單,本篇主要正對入門級別的小夥伴,插入了很多圖片,所以顯得冗長,希望大家多多理解,如果不當之處,還望及時指正~

最後,加上兩條redis叢集基本命令:
1.檢視當前叢集資訊

cluster info

2.檢視叢集裡有多少個節點

cluster nodes