天天看點

Redis設計與實作——多機資料庫的實作

複制

舊版Redis的複制功能分為同步(sync)和指令傳播兩個操作。

sync:是一個非常耗費資源的操作                                           指令傳播:

Redis設計與實作——多機資料庫的實作
Redis設計與實作——多機資料庫的實作

新版複制解決了舊版複制功能在處理斷線重複制情況時的低效問題,使用PSYNC替代SYNC指令來執行複制的同步工作。

PSYNC指令具有完整重同步和部分重同步,完整重同步與sync類似,部分重同步如下:

Redis設計與實作——多機資料庫的實作

部分重同步的實作

複制偏移量:

Redis設計與實作——多機資料庫的實作

複制積壓緩沖區:

複制積壓緩沖區是由主伺服器維護的一個固定長度先進先出隊列,預設大小為1MB。

Redis設計與實作——多機資料庫的實作

PSYNC實作流程:

Redis設計與實作——多機資料庫的實作

總結:

Redis設計與實作——多機資料庫的實作

Sentinel

Sentinel(哨兵)是redis的高可用(high avaliability)解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,當主伺服器下線,自動更新一個從伺服器為主伺服器,代替已下線伺服器接受指令。

Redis設計與實作——多機資料庫的實作
Redis設計與實作——多機資料庫的實作

叢集

節點

Redis設計與實作——多機資料庫的實作

槽指派

Redis設計與實作——多機資料庫的實作

在叢集中執行指令

在對資料庫中的16384個槽都進行了指派之後,叢集會進入上線狀态,這時用戶端就可以向叢集中的節點發送資料指令了。

Redis設計與實作——多機資料庫的實作

重新分片

 Redis叢集的重新分片操作可以将任意數量已經指派給某個源節點的槽改為指派給另一個目标節點,并且相關槽所屬的鍵值對也會從源節點移動到目标節點。

複制和故障轉移

Redis叢集中的節點分為主節點和從節點,其中主節點用于處理槽,而從節點主要用于複制某個主節點,并在被複制的主節點下線時,代替下線主節點繼續處理指令請求。

Redis設計與實作——多機資料庫的實作

其中7000,7001,7002,7003為主節點,而7004,7005為從節點。

消息

MEET消息:發送者會向接受者發送MEET消息,請求接受者加入到發送者目前所處的叢集裡面。

PING消息:檢查檢點是否線上。

PONG消息:回應消息。

FAIL消息:當主節點A判斷主節點B已經進入FAIL狀态,節點A向叢集廣播一條關于節點B的FAIL消息,收到消息的節點都會立即将節點B标記為下線。

PUBLISH消息:當節點收到該指令,則執行,并廣播一條PUBLISH指令,所有收到消息的節點都會執行相同的指令。

繼續閱讀