Redis-高併發篇

weixin_33728268發表於2018-05-26

越來越多的企業選擇使用redis來管理快取,而在高併發時,單臺機器的讀取很明顯有些弱,這個時候就需要增添機器。本篇主要講述redis的叢集。

redis叢集

在redis叢集中,每一個節點都存有整個叢集中所有的主節點和從節點資訊。

判斷節點掛掉
在叢集中,如果半數以上的節點去ping一個節點不通,叢集就認為它掛掉了。

投票機制
在叢集中,如果主節點A和他的所有從節點都掛掉了,那麼叢集會進入fail狀態。如果半數以上的主節點掛掉了,叢集也會進入到fail狀態。
ps : fail狀態就是叢集掛掉了。。

redis叢集掛掉的情況:
1)任意master掛掉,且該master所有子節點也掛掉;
2)半數master掛掉。

redis的叢集方案

對於redis的叢集方案,現階段認可的是多主多從方案。
原因:1)多主節點可以防止部分節點壞掉;
2)如果有某個主節點壞掉了,其從節點會頂替上去;
3)主寫從讀,單一功能,效率提高。

redis同步

在redis的同步中,主節點同步給其中所有的從節點。

主從同步

runID:每一個redis節點都有一個runID,類似於身份標識。

offset:複製偏移量。在master和slave中都會有這個量。master傳輸出去N個位元組,master的offset增加N;slave收到N個位元組,slave的offset增加N。

複製積壓緩衝區:維護在master中一個FIFO(先進先出)佇列。在master每次向外傳輸時,也會向該佇列中傳輸。該佇列中會有對應的偏移量和其對應的位元組記錄。

5269874-1f472334a6b61840.png
同步.png

slave有無master的runid(身份ID):無,即第一次;有,則不是第一次。
如果是第一次請求,slave全量複製master,並獲取runid。
如果不是第一次請求,比較runid,相同再比較複製偏移量,若偏移量相同,繼續傳輸;
若偏移量不同,從複製積壓緩衝區裡去取對應的複製偏移量之後的資料,有就從複製積壓緩衝區裡傳輸複製,沒有就完整複製。
runid不一樣,視為第一次請求。

參考:redis叢集設計原理
主從同步原理

相關文章