天天看點

從零開始搭建Redis 叢集 ,三主三從模式

文章引用 https://www.cnblogs.com/mafly/p/redis_cluster.html

Redis 叢集簡介

Redis 是一個開源的 key-value 存儲系統,由于出衆的性能,大部分網際網路企業都用來做伺服器端緩存。Redis 在3.0版本前隻支援單執行個體模式,雖然支援主從模式、哨兵模式部署來解決單點故障,但是現在網際網路企業動辄大幾百G的資料,可完全是沒法滿足業務的需求,是以,Redis 在 3.0 版本以後就推出了叢集模式。

Redis 叢集采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 個 slot,每個 Redis 執行個體負責其中一部分 slot 。叢集中的所有資訊(節點、端口、slot等),都通過節點之間定期的資料交換而更新。

Redis 用戶端可以在任意一個 Redis 執行個體送出請求,如果所需資料不在該執行個體中,通過重定向指令引導用戶端通路所需的執行個體。

随随便便搭建一個叢集

安裝部署任何一個應用其實都很簡單,隻要安裝步驟一步一步來就行了。下面說一下 Redis 叢集搭建規劃,由于叢集至少需要6個節點(3主3從模式),是以,沒有這麼多機器給我玩,我本地也起不了那麼多虛拟機(電腦太爛),現在計劃是在一台機器上模拟一個叢集,當然,這和生産環境的叢集搭建沒本質差別。

我現在就要在已經有安裝了 Redis 的一個 CentOS 下開始進行叢集搭建,如果你還不是很清楚 Linux 下如何安裝 Redis ,可以去看這一篇文章《了解一下 Redis 并在 CentOS 下進行安裝配置》。請注意,下面所有叢集搭建環境都基于已安裝好的 Redis 做的。

1.建立檔案夾

我們計劃叢集中 Redis 節點的端口号為 9001-9006 ,端口号即叢集下各執行個體檔案夾。資料存放在 端口号/data 檔案夾中。

mkdir_9001-9006

mkdir /usr/local/redis-cluster

cd redis-cluster/

mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

2.複制執行腳本

在 /usr/local/redis-cluster 下建立 bin 檔案夾,用來存放叢集運作腳本,并把安裝好的 Redis 的 src 路徑下的運作腳本拷貝過來。看指令:

mkdir redis-cluster/bin

cd /usr/local/redis/src

cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

3.複制一個新 Redis 執行個體

我們現在從已安裝好的 Redis 中複制一個新的執行個體到 9001 檔案夾,并修改 redis.conf 配置。

mv9001

cp /usr/local/redis/* /usr/local/redis-cluster/9001

注意,修改 redis.conf 配置和單點唯一差別是下圖部分,其餘還是正常的這幾項:

port 9001(每個節點的端口号)

daemonize yes

bind 192.168.119.131(綁定目前機器 IP)

dir /usr/local/redis-cluster/9001/data/(資料檔案存放位置)

pidfile /var/run/redis_9001.pid(pid 9001和port要對應)

cluster-enabled yes(啟動叢集模式)

cluster-config-file nodes_9001.conf(9001和port要對應)

cluster-node-timeout 15000

appendonly yes

叢集搭建配置重點就是取消下圖中的這三個配置的注釋:

cluster_conf

4.再複制出五個新 Redis 執行個體

我們已經完成了一個節點了,其實接下來就是機械化的再完成另外五個節點,其實可以這麼做:把 9001 執行個體 複制到另外五個檔案夾中,唯一要修改的就是 redis.conf 中的所有和端口的相關的資訊即可,其實就那麼四個位置。開始操作,看圖:

cp9001-9006

\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9002

\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9003

\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9004

\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9005

\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9006

\cp -rf 指令是不使用别名來複制,因為 cp 其實是别名 cp -i,操作時會有互動式确認,比較煩人。

5.修改 9002-9006 的 redis.conf 檔案

其實非常簡單了,你通過搜尋會發現其實隻有四個點需要修改,我們全局替換下吧,進入相應的節點檔案夾,做替換就好了。指令非常簡單,看圖:

%s-9001-9002g

vim redis.conf

:%s/9001/9002g

回車後,就會有替換幾個地方成功的提示,不放心可以手工檢查下:

%s-success

其實我們也就是替換了下面這四行:

port 9002

dir /usr/local/redis-cluster/9002/data/

cluster-config-file nodes-9002.conf

pidfile /var/run/redis_9002.pid

到這裡,我們已經把最基本的環境搞定了,接下來就是啟動了。

其實我們已經幾乎搭建好了

1.啟動 9001-9006 六個節點

少廢話,直接看圖:

redis-server_start

/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf 

/usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf 

/usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf 

/usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf 

/usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf 

/usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf

可以檢查一下是否啟動成功:ps -el | grep redis

看的出來,六個節點已經全部啟動成功了。

2.随便找一個節點測試試

/usr/local/redis-cluster/bin/redis-cli -h 192.168.119.131 -p 9001

set name mafly

redis-server_start_test

連接配接成功了,但好像報錯了阿???

(error) CLUSTERDOWN Hash slot not served(不提供叢集的散列槽),這是什麼鬼?

這是因為雖然我們配置并啟動了 Redis 叢集服務,但是他們暫時還并不在一個叢集中,互相直接發現不了,而且還沒有可存儲的位置,就是所謂的slot(槽)。

3.安裝叢集所需軟體

由于 Redis 叢集需要使用 ruby 指令,是以我們需要安裝 ruby 和相關接口。

yum install ruby

yum install rubygems

gem install redis 

yum_ruby

這才是真正的建立叢集

先不廢話,直接敲指令:

/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.119.131:9001 192.168.119.131:9002 192.168.119.131:9003 192.168.119.131:9004 192.168.119.131:9005 192.168.119.131:9006

cluster_create

簡單解釋一下這個指令:調用 ruby 指令來進行建立叢集,--replicas 1 表示主從複制比例為 1:1,即一個主節點對應一個從節點;然後,預設給我們配置設定好了每個主節點和對應從節點服務,以及 solt 的大小,因為在 Redis 叢集中有且僅有 16383 個 solt ,預設情況會給我們平均配置設定,當然你可以指定,後續的增減節點也可以重新配置設定。

M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 為主節點Id

S: 9ce697e49f47fec47b3dc290042f3cc141ce5aeb 192.168.119.131:9004 replicates 10222dee93f6a1700ede9f5424fccd6be0b2fb73 從節點下對應主節點Id

目前來看,9001-9003 為主節點,9004-9006 為從節點,并向你确認是否同意這麼配置。輸入 yes 後,會開始叢集建立。

cluster_create_success

上圖則代表叢集搭建成功啦!!!

驗證一下:

依然是通過用戶端指令連接配接上,通過叢集指令看一下狀态和節點資訊等。

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.131 -p 9001

cluster info

cluster nodes

cluster_info

通過指令,可以詳細的看出叢集資訊和各個節點狀态,主從資訊以及連接配接數、槽資訊等。這麼看到,我們已經真的把 Redis 叢集搭建部署成功啦!

設定一個 mafly:

你會發現,當我們 set name mafly 時,出現了 Redirected to slot 資訊并自動連接配接到了9002節點。這也是叢集的一個資料配置設定特性,這裡不詳細說了。

redirected_9002

總結一下

這一篇 Redis 叢集部署搭建的文章真的是一步一步的走下來的,隻要你安裝我的步驟來,就保證你能成功搭建一個 Redis 叢集玩玩,也可以這麼說,除了步驟繁瑣外,幾乎不存在技術含量,估計能看完的人都感覺累(說真的,寫這種文章真的很累人)。

接下來可能就是動态擴容、增加節點和減少節點,重新配置設定槽大小等,當然,還有最重要的就是怎麼和我們程式結合起來,以及如何更好的把 Redis 緩存叢集發揮出應有的效果,這些才是最重要的。

繼續閱讀