1. 程式人生 > >Linux 系列(三)——Redis 分散式叢集搭建

Linux 系列(三)——Redis 分散式叢集搭建



      在一文中詳細介紹了在Linux環境中搭建Redis服務,本文將介紹關於Redis分散式 叢集搭建細節。

一、Redis叢集架構

1、Redis叢集架構圖

藍色的為Redis叢集中的每個node節點,節點之間通過ping 命令,測試相互是否連線正常,普通叢集沒有主從區分,連線任何一個節點操作,都可以轉發到其他任意一個節點。

1、Redis 容錯機制

 每Redis提供了節點之間相互發送的ping命令,用於測試每個節點的健康狀態,叢集中連線正常的節點接收到其他節點發送的ping命令時,會返回一個pong字串。

Redis投票機制:如果一個節點A給B傳送ping沒有得到pong返回,那麼A就會通知其他節點再次給B傳送ping,如果叢集中超過一半的節點給B傳送ping都沒有得到返回,那麼B就被坐實game over了,所以為了避免單點故障,一般都會為Redis的每個節點提供一個備份節點,B節點掛掉了立馬啟動B的備份節點伺服器。

2、Redis 叢集儲存原理

每個節點上的資料都不一樣,(一樣就是主備了)把資料都分散存放到各個節點上進行儲存。如何確定哪些型別資料存入哪個節點呢?Redis中槽slot就用於圈定當前節點的儲存範圍,分散儲存使用hash演算法,確定什麼值放到哪個槽裡

 所以在建立Redis叢集時,會首先為每個節點建立槽容量,例如從1~2000,指定資料儲存區域。

3、Redis 持久化機制

Redis提供了2中資料持久化方式:

Snapshotting:定時的將Redis記憶體的當前狀態儲存到RDB檔案中,持久化到硬碟。

AOF(append-only file):將所有的command操作儲存到aof檔案中,AOP使得同步頻率很高,資料即便丟失,粒度也很小,但效能上有所犧牲。預設資料持久化會2s同步一次,也可以進行配置改變同步頻率。

 翻譯自redis-wiki

二、Redis叢集搭建

  現在開始搭建具有3各節點和3個備份節點的Redis cluster。埠分別從7001-7006,因為測試機記憶體的原因,搭建一個使用6個Redis例項搭建一個偽分散式叢集。

               1、搭建叢集所需環境

              1)使用yum install ruby安裝Ruby,因為redis中建立叢集的指令碼是以rb結尾的ruby檔案(下圖可見該rb檔案)。使用ruby -v檢視ruby是否安裝成功。

                                                                                                             2)使用

 yum install rubygems安裝RubyGems-Ruby元件的打包系統,用於管理Ruby程式包。

2、建立6個Redis例項

1)將redis的解壓包中的bin檔案件均拷貝到新建立的redis-cluster(含有redis-trib.rb檔案)的redis01檔案中

2)修改redis01的redis.conf檔案,修改埠號和cluster-enable屬性

3)依次拷貝redis01為redis02-redis06,修改埠號

4)編寫一個sh指令碼,一次性啟動6個Redis例項

5)執行sh指令碼,啟動redis節點,並檢視Redis例項啟動情況

6)執行redis-trib.rb指令碼,建立叢集。

./redis-trib.rb create --replicas 1 192.168.132.128:7001 192.168.132.128:7002 192.168.132.128:7003 192.168.132.128:7004 192.168.132.128:7005  192.168.132.128:7006

    

在叢集的建立日誌資訊中可以發現,使用hash 建立slots,master節點為01.02.03 ,剩餘3個用於做備機節點,並顯示了主從對應關係以及每個節點槽範圍資訊。

三、叢集測試

1)使用任意一個節點客戶端登陸 主要加上 -c引數表示用於叢集連線

2)任意執行一個set命令,節點間會自動轉發,將set的值儲存到對應的節點slot中。

叢集搭建成功。

四、總結

建成功。在建立叢集時,筆者出現一個redis節點拒絕連線的錯誤,以至於叢集建立失敗。

經過反覆排查發現是自己原來安裝的redis進行了許可權設定,為方便了方便測試,於是選擇取消該許可權設定。