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)使用
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進行了許可權設定,為方便了方便測試,於是選擇取消該許可權設定。