溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么搭建Redis集群

發(fā)布時間:2021-07-13 15:01:23 來源:億速云 閱讀:159 作者:chen 欄目:大數(shù)據(jù)

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


  • 準備節(jié)點

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

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


下面我們啟動6個節(jié)點:

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


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

怎么搭建Redis集群

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


由于我們剛剛啟動了6379節(jié)點,所以Redis默認在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é)點ID。它是一個40位16進制的字符串構(gòu)成的,也是用來區(qū)分集群節(jié)點的唯一標識。上面提到的是節(jié)點ID并不是運行ID。它們有著很大的不同的。因為節(jié)點ID是集群初始化時只會創(chuàng)建一次,節(jié)點重啟時會加載集群配置文件重用,而Redis的運行ID每次重啟都會發(fā)生變化。除此之外我們也可以通過cluster nodes命令獲取集群節(jié)點的信息。

怎么搭建Redis集群

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


  • 節(jié)點握手

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

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

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

怎么搭建Redis集群

我們在集群中任意節(jié)點執(zhí)行cluster meet命令加入新節(jié)點時,握手狀態(tài)會通過消息在集群內(nèi)傳播,這樣其它節(jié)點會自動發(fā)現(xiàn)新節(jié)點并發(fā)起握手流程。節(jié)點建立握手之后集群還不能工作,因為集群處于下線狀態(tài),所有的數(shù)據(jù)讀寫都被禁止了。

怎么搭建Redis集群

我們看提示信息,提供槽沒有提供服務(wù)。這是因為我們還沒有為Redis分配槽。


  • 分配槽

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

怎么搭建Redis集群

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

怎么搭建Redis集群

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

怎么搭建Redis集群

因為我們將槽分配到了前3個前點,還有其它的3個節(jié)點而沒有使用。這是因為一個完整的集群,每個負責的處理槽都應(yīng)該具有從節(jié)點為,以保障出現(xiàn)故障時自動進行故障轉(zhuǎn)移。在集群模式下,Redis的節(jié)點會被分為主節(jié)點和從節(jié)點。因為我們將槽分配到了主節(jié)點,所以從節(jié)點主要復(fù)制主節(jié)點的槽信息和相關(guān)的數(shù)據(jù)即可。在Redis中我們可以通過cluster replicate {nodeId}命令讓一個節(jié)點成為從節(jié)點。上述命令只能在從節(jié)點上執(zhí)行,并且nodeId是主節(jié)點的ID,而不是運行ID。

怎么搭建Redis集群

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

怎么搭建Redis集群

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

到此,關(guān)于“怎么搭建Redis集群”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI