您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么搭建Redis集群”,在日常操作中,相信很多人在怎么搭建Redis集群問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么搭建Redis集群”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
準備節點
既然是搭建集群那么節點一定是多節點的,通常來說節點數量至少為6個才能保證高可用的集群。除此之外每個節點還需要配置cluster-enabled yes。由于每個節點的配置除了端口不同其它的配置均相同,所以我們已一個節點的配置為例,來介紹一個集群節點的配置。具體配置如下:
# 節點端口
port 6379
# 開啟集群模式
cluster-enabled yes
# 節點超時時間,單位為毫秒
cluster-node-timeout 15000
# 集群內部配置文件
cluster-config-file "nodes-6379.conf"
下面我們啟動6個節點:
./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
當節點啟動成功后,如果沒有集群配置文件,Redis會自動創建一份,文件名就是我們Redis配置文件中cluster-config-file參數指定的名字。如果啟動時存在集群配置文件,節點會使用配置文件中的內容初始化集群信息。具體的啟動過程如下圖所示:
集群模式的Redis除了原有的配置文件外還有一份集群配置文件。這是因為當集群內節點信息發生變化時,如添加節點、節點下線、故障轉移等。節點會自動保存集群狀態到配置文件中。并且集群配置文件不需要用戶修改,而是由Redis自動維護。
由于我們剛剛啟動了6379節點,所以Redis默認在Redis根路徑生了nodes-6379.conf文件。下面我們看一下該文件中的內容。
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
文件內容記錄了集群的初始狀態。包括節點ID。它是一個40位16進制的字符串構成的,也是用來區分集群節點的唯一標識。上面提到的是節點ID并不是運行ID。它們有著很大的不同的。因為節點ID是集群初始化時只會創建一次,節點重啟時會加載集群配置文件重用,而Redis的運行ID每次重啟都會發生變化。除此之外我們也可以通過cluster nodes命令獲取集群節點的信息。
每個節點暫時只能識別出自己的節點信息。雖然我們啟動了6個節點,但它們彼此之間并不知道對方的存在。所以接下來我們要通過節點握手讓它們彼此之間建立聯系從而組成一個集群。
節點握手
節點握手是指一批運行在集群模式下的節點通過Gossip協議彼此通信,從而可以感知其它節點的存在。節點握手是集群彼此通信的和一步,具體操作是在客戶端發起下面命令:
cluster meet {ip} {port}
上圖中的執行邏輯是:cluster meet 127.0.0.1 6380讓節點6379和6380節點進行握手通信。cluster meet命令是一個異步命令,執行之后立刻返回。在Redis內部發起與目標節點進行握手通信。
下面我們執行下面命令讓其它節點加入到集群中并可以使用cluster nodes命令查看其它節點是否加入了集群中。
我們在集群中任意節點執行cluster meet命令加入新節點時,握手狀態會通過消息在集群內傳播,這樣其它節點會自動發現新節點并發起握手流程。節點建立握手之后集群還不能工作,因為集群處于下線狀態,所有的數據讀寫都被禁止了。
我們看提示信息,提供槽沒有提供服務。這是因為我們還沒有為Redis分配槽。
分配槽
Redis集群把所有的數據映射到16384個槽中。每個key會映射為一個固定的槽,只有當節點分配了槽,才能響應和這些槽關聯的鍵命令。在Redis中可以通過cluster addslots命令為節點分配槽。具體命令如下:
按照上面的命令我們已經將16384個slot平均分配給了6379、6380、6381三個節點。我們可以通過cluster info命令查看集群狀態。
通過上圖我們知道集群的狀態是ok的,說明集群已經進入了在一狀態。并且所有的槽已經分配了節點,執行cluster nodes命令可以看到節點和槽的分配關系:
因為我們將槽分配到了前3個前點,還有其它的3個節點而沒有使用。這是因為一個完整的集群,每個負責的處理槽都應該具有從節點為,以保障出現故障時自動進行故障轉移。在集群模式下,Redis的節點會被分為主節點和從節點。因為我們將槽分配到了主節點,所以從節點主要復制主節點的槽信息和相關的數據即可。在Redis中我們可以通過cluster replicate {nodeId}命令讓一個節點成為從節點。上述命令只能在從節點上執行,并且nodeId是主節點的ID,而不是運行ID。
Redis集群模式下的主從復制使用了之前文章中介紹的復制流程,依然支持全量和部分復制。我們依然可以通過cluster nodes命令查看集群狀態和復制關系。
上述內容就是使用Redis中的Gossip協議手動的搭建了一個集群環境。通過上述的搭建我們知道手動搭建集群雖然可以加深我們對Redis集群流程的理解和細節,但是它的弊端也是有的,就是有很多個步驟,當集群節點過多時,我們手動搭建集群的復雜度和時間成本也就越大了。所以Redis為了幫助我們快速的搭建一個集群環境,于是提供了redis-trib.rb工具。通過此工具我們可以很快的搭建一個Redis集群。在下一篇中,我們將介紹redis-trib.rb工具的詳細使用。
到此,關于“怎么搭建Redis集群”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。