怎么搭建Redis集群

這篇文章主要介紹“怎么搭建redis集群”,在日常操作中,相信很多人在怎么搭建Redis集群?jiǎn)栴}上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么搭建Redis集群”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、成都全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式網(wǎng)站建設(shè)公司、移動(dòng)網(wǎng)站建設(shè)、微商城、網(wǎng)站托管及網(wǎng)站維護(hù)、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為雨棚定制行業(yè)客戶提供了網(wǎng)站推廣服務(wù)。


  • 準(zhǔn)備節(jié)點(diǎn)

既然是搭建集群那么節(jié)點(diǎn)一定是多節(jié)點(diǎn)的,通常來(lái)說(shuō)節(jié)點(diǎn)數(shù)量至少為6個(gè)才能保證高可用的集群。除此之外每個(gè)節(jié)點(diǎn)還需要配置cluster-enabled yes。由于每個(gè)節(jié)點(diǎn)的配置除了端口不同其它的配置均相同,所以我們已一個(gè)節(jié)點(diǎn)的配置為例,來(lái)介紹一個(gè)集群節(jié)點(diǎn)的配置。具體配置如下:

# 節(jié)點(diǎn)端口
port 6379
# 開(kāi)啟集群模式
cluster-enabled yes
# 節(jié)點(diǎn)超時(shí)時(shí)間,單位為毫秒
cluster-node-timeout 15000
# 集群內(nèi)部配置文件
cluster-config-file "nodes-6379.conf"


下面我們啟動(dòng)6個(gè)節(jié)點(diǎn):

./src/redis-server redis-6379.conf
./src/redis-server redis-6380.conf
./src/redis-server redis-6381.conf
./src/redis-server redis-6382.conf
./src/redis-server redis-6383.conf
./src/redis-server redis-6384.conf


當(dāng)節(jié)點(diǎn)啟動(dòng)成功后,如果沒(méi)有集群配置文件,Redis會(huì)自動(dòng)創(chuàng)建一份,文件名就是我們Redis配置文件中cluster-config-file參數(shù)指定的名字。如果啟動(dòng)時(shí)存在集群配置文件,節(jié)點(diǎn)會(huì)使用配置文件中的內(nèi)容初始化集群信息。具體的啟動(dòng)過(guò)程如下圖所示:

怎么搭建Redis集群

集群模式的Redis除了原有的配置文件外還有一份集群配置文件。這是因?yàn)楫?dāng)集群內(nèi)節(jié)點(diǎn)信息發(fā)生變化時(shí),如添加節(jié)點(diǎn)、節(jié)點(diǎn)下線、故障轉(zhuǎn)移等。節(jié)點(diǎn)會(huì)自動(dòng)保存集群狀態(tài)到配置文件中。并且集群配置文件不需要用戶修改,而是由Redis自動(dòng)維護(hù)。


由于我們剛剛啟動(dòng)了6379節(jié)點(diǎn),所以Redis默認(rèn)在Redis根路徑生了nodes-6379.conf文件。下面我們看一下該文件中的內(nèi)容。

nodes-6379.conf:

3f9fa1009630b24e8049117b8492503af64dbabb :6379@16379 myself,master - 0 0 0 connected 3612 5257 7743 8021 8280 9558 11276 12216 12539 14895
vars currentEpoch 0 lastVoteEpoch 0


文件內(nèi)容記錄了集群的初始狀態(tài)。包括節(jié)點(diǎn)ID。它是一個(gè)40位16進(jìn)制的字符串構(gòu)成的,也是用來(lái)區(qū)分集群節(jié)點(diǎn)的唯一標(biāo)識(shí)。上面提到的是節(jié)點(diǎn)ID并不是運(yùn)行ID。它們有著很大的不同的。因?yàn)楣?jié)點(diǎn)ID是集群初始化時(shí)只會(huì)創(chuàng)建一次,節(jié)點(diǎn)重啟時(shí)會(huì)加載集群配置文件重用,而Redis的運(yùn)行ID每次重啟都會(huì)發(fā)生變化。除此之外我們也可以通過(guò)cluster nodes命令獲取集群節(jié)點(diǎn)的信息。

怎么搭建Redis集群

每個(gè)節(jié)點(diǎn)暫時(shí)只能識(shí)別出自己的節(jié)點(diǎn)信息。雖然我們啟動(dòng)了6個(gè)節(jié)點(diǎn),但它們彼此之間并不知道對(duì)方的存在。所以接下來(lái)我們要通過(guò)節(jié)點(diǎn)握手讓它們彼此之間建立聯(lián)系從而組成一個(gè)集群。


  • 節(jié)點(diǎn)握手

節(jié)點(diǎn)握手是指一批運(yùn)行在集群模式下的節(jié)點(diǎn)通過(guò)Gossip協(xié)議彼此通信,從而可以感知其它節(jié)點(diǎn)的存在。節(jié)點(diǎn)握手是集群彼此通信的和一步,具體操作是在客戶端發(fā)起下面命令:

cluster meet {ip} {port}
怎么搭建Redis集群

上圖中的執(zhí)行邏輯是:cluster meet 127.0.0.1 6380讓節(jié)點(diǎn)6379和6380節(jié)點(diǎn)進(jìn)行握手通信。cluster meet命令是一個(gè)異步命令,執(zhí)行之后立刻返回。在Redis內(nèi)部發(fā)起與目標(biāo)節(jié)點(diǎn)進(jìn)行握手通信。
下面我們執(zhí)行下面命令讓其它節(jié)點(diǎn)加入到集群中并可以使用cluster nodes命令查看其它節(jié)點(diǎn)是否加入了集群中。

怎么搭建Redis集群

我們?cè)诩褐腥我夤?jié)點(diǎn)執(zhí)行cluster meet命令加入新節(jié)點(diǎn)時(shí),握手狀態(tài)會(huì)通過(guò)消息在集群內(nèi)傳播,這樣其它節(jié)點(diǎn)會(huì)自動(dòng)發(fā)現(xiàn)新節(jié)點(diǎn)并發(fā)起握手流程。節(jié)點(diǎn)建立握手之后集群還不能工作,因?yàn)榧禾幱谙戮€狀態(tài),所有的數(shù)據(jù)讀寫(xiě)都被禁止了。

怎么搭建Redis集群

我們看提示信息,提供槽沒(méi)有提供服務(wù)。這是因?yàn)槲覀冞€沒(méi)有為Redis分配槽。


  • 分配槽

Redis集群把所有的數(shù)據(jù)映射到16384個(gè)槽中。每個(gè)key會(huì)映射為一個(gè)固定的槽,只有當(dāng)節(jié)點(diǎn)分配了槽,才能響應(yīng)和這些槽關(guān)聯(lián)的鍵命令。在Redis中可以通過(guò)cluster addslots命令為節(jié)點(diǎn)分配槽。具體命令如下:

怎么搭建Redis集群

按照上面的命令我們已經(jīng)將16384個(gè)slot平均分配給了6379、6380、6381三個(gè)節(jié)點(diǎn)。我們可以通過(guò)cluster info命令查看集群狀態(tài)。 

怎么搭建Redis集群

通過(guò)上圖我們知道集群的狀態(tài)是ok的,說(shuō)明集群已經(jīng)進(jìn)入了在一狀態(tài)。并且所有的槽已經(jīng)分配了節(jié)點(diǎn),執(zhí)行cluster nodes命令可以看到節(jié)點(diǎn)和槽的分配關(guān)系:

怎么搭建Redis集群

因?yàn)槲覀儗⒉鄯峙涞搅饲?個(gè)前點(diǎn),還有其它的3個(gè)節(jié)點(diǎn)而沒(méi)有使用。這是因?yàn)橐粋€(gè)完整的集群,每個(gè)負(fù)責(zé)的處理槽都應(yīng)該具有從節(jié)點(diǎn)為,以保障出現(xiàn)故障時(shí)自動(dòng)進(jìn)行故障轉(zhuǎn)移。在集群模式下,Redis的節(jié)點(diǎn)會(huì)被分為主節(jié)點(diǎn)和從節(jié)點(diǎn)。因?yàn)槲覀儗⒉鄯峙涞搅酥鞴?jié)點(diǎn),所以從節(jié)點(diǎn)主要復(fù)制主節(jié)點(diǎn)的槽信息和相關(guān)的數(shù)據(jù)即可。在Redis中我們可以通過(guò)cluster replicate {nodeId}命令讓一個(gè)節(jié)點(diǎn)成為從節(jié)點(diǎn)。上述命令只能在從節(jié)點(diǎn)上執(zhí)行,并且nodeId是主節(jié)點(diǎn)的ID,而不是運(yùn)行ID。

怎么搭建Redis集群

Redis集群模式下的主從復(fù)制使用了之前文章中介紹的復(fù)制流程,依然支持全量和部分復(fù)制。我們依然可以通過(guò)cluster nodes命令查看集群狀態(tài)和復(fù)制關(guān)系。

怎么搭建Redis集群

上述內(nèi)容就是使用Redis中的Gossip協(xié)議手動(dòng)的搭建了一個(gè)集群環(huán)境。通過(guò)上述的搭建我們知道手動(dòng)搭建集群雖然可以加深我們對(duì)Redis集群流程的理解和細(xì)節(jié),但是它的弊端也是有的,就是有很多個(gè)步驟,當(dāng)集群節(jié)點(diǎn)過(guò)多時(shí),我們手動(dòng)搭建集群的復(fù)雜度和時(shí)間成本也就越大了。所以Redis為了幫助我們快速的搭建一個(gè)集群環(huán)境,于是提供了redis-trib.rb工具。通過(guò)此工具我們可以很快的搭建一個(gè)Redis集群。在下一篇中,我們將介紹redis-trib.rb工具的詳細(xì)使用。

到此,關(guān)于“怎么搭建Redis集群”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站標(biāo)題:怎么搭建Redis集群
文章位置:http://muchs.cn/article14/ishode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、全網(wǎng)營(yíng)銷(xiāo)推廣、建站公司網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)