溫故知新,redis集羣複習

之前部署redis以及搞分佈式鎖開發,又把redis集羣給學習了一遍。今天來記錄一下筆記。

 

集羣定義

 

redis集羣是一個提供多個redis實例間共享數據的程序集。

 

集羣優勢

 

一臺redis能夠提供的存儲能力是有限的,並且單機會有高可用性的弊端。所以就有了redis集羣,redis集羣會自動分割數據到不同node上;並且部分node不可達時能夠繼續提供服務。

 

集羣的數據分片處理

 

redis集羣沒有使用一致性hash算法而使用hash槽進行數據分片。redis集羣有15384個槽。每個node負責一部分槽。例如0-5000;5001-10000;10001-16384

每次操作通過對key進行15384取模得到一個數字,用這個數字來匹配使用哪個對應的node。比如16386取模未1,屬於0-5000,放到這個段對應的redis節點上。當有新node加入,那麼會從每個機器上取一部分槽分配給他;有舊節點刪除時,會將他負責的槽分配給其他node。確保每個槽都可用。

 

集羣的主從復值模型

 

redis集羣中每個節點負責一部分hash槽,但如果這個node宕機,那麼當前集羣中就有一部分hash槽不可用。爲了避免這個問題,每個node應該有N-1個複製品。組成主從模式,比如A B C組整一個集羣;那麼a1 b1 c1 爲各自的從節點。當有一個master宕機後。還能有從節點轉爲master節點繼續提供服務。除非集羣中某個redis及其所有從節點都宕機。

 

數據一致性

 

由於redis採用主從複製時異步複製。當set值成功後便立刻返回客戶端。再進行從節點的數據複製。這就導致當寫和返回客戶端成功後,數據還沒被髮送給從節點master就宕機了。那麼重新選舉的從節點就會出現數據的丟失問題。這也是爲了性能和一致性之間做的權衡。

網絡分區問題,即部分網絡不通但部分網絡通暢。導致可能集羣中大部分節點間通訊正常,某個master節點通訊不暢,但和客戶端通訊正常。這時候就會出現重新選舉。導致B的master被降級成從節點。這時候客戶端像B中存儲的數據便丟失了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章