當前位置:
首頁 > 知識 > Redis 集群搭建詳細指南

Redis 集群搭建詳細指南

先有雞還是先有蛋?

最近有朋友問了一個問題,說畢業後去大城市還是小城市?去大公司還是小公司?我的回答都是大城市!大公司!

為什麼這麼說呢,你想一下,無論女孩男孩找朋友都喜歡找個子高胸大的。同樣的道理嘛,「大」總有大的好。

當然,如果你要有能力找一個胸大個子高就更完美了。

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 /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配置。

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 nodes9001.conf(9001和port要對應)
cluster-node-timeout 15000
appendonly yes

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

Redis 集群搭建詳細指南

4.再複製出五個新 Redis 實例

我們已經完成了一個節點了,其實接下來就是機械化的再完成另外五個節點,其實可以這麼做:把 9001 實例複製到另外五個文件夾中,唯一要修改的就是redis.conf中的所有和埠的相關的信息即可,其實就那麼四個位置。開始操作,看圖:

Redis 集群搭建詳細指南

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 文件

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

Redis 集群搭建詳細指南

vim redis.conf
:%s/9001/9002g

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

Redis 集群搭建詳細指南

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

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 集群搭建詳細指南

/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

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

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

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

3.安裝集群所需軟體

由於 Redis 集群需要使用 ruby 命令,所以我們需要安裝 ruby 和相關介面。

yum install ruby
yum install rubygems
gem install redis

Redis 集群搭建詳細指南

這才是真正的創建集群

先不廢話,直接敲命令:

/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

Redis 集群搭建詳細指南

簡單解釋一下這個命令:調用 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後,會開始集群創建。

Redis 集群搭建詳細指南

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

驗證一下:

依然是通過客戶端命令連接上,通過集群命令看一下狀態和節點信息等。

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

Redis 集群搭建詳細指南

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

設置一個 mafly:

你會發現,當我們 set name mafly時,出現了Redirected to slot信息並自動連接到了9002節點。這也是集群的一個數據分配特性,這裡不詳細說了。

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

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

今晚上的颱風並不是很厲害呀,還有好像好久沒有不是在一天中睡覺與醒來了...

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

Mina 報文監聽器NioDatagramAcceptor一
Grunt壓縮HTML和CSS
select源碼分析及小結
設置虛擬機網路連接方式

TAG:科技優家 |

您可能感興趣

Redis集群搭建
如何搭建 Redis 集群
Redis集群配置詳解
構建 Hadoop 集群
Storm集群搭建小結
基於Codis的Redis集群部署
離線環境快速搭建ElasticSearch集群
Hadoop集群配置細節說明
Kettle集群環境搭建和部署
Docker Compose搭建MySQL主從複製集群
Docker環境下搭建DNS LVS(keepAlived) OpenResty伺服器簡易集群
ganglia集群版搭建(支持hadoop和spark)
大規模集群下的Hadoop NameNode
docker zookeeper 集群搭建
快速安裝與配置kubernetes集群搭建
集群服務間通信之RoutingMesh
集群管理工具KafkaAdminClient——原理與示例
滴滴Elasticsearch多集群架構實踐
Tomcat集群實現Session共享
搭建Elasitc stack集群需要注意的日誌問題