Redis多機資料庫的實現,redis資料庫實現

來源:互聯網
上載者:User

Redis多機資料庫的實現,redis資料庫實現

一、複製

在Redis中,使用者可以通過執行SLAVEOF命令或者設定slaveof選項,讓一個伺服器去複製另一個伺服器,我們稱呼被複製的伺服器為主伺服器(master),而對主伺服器進行複製的伺服器則被稱為從伺服器(slave)。


假設現在有兩個Redis伺服器,地址分別為127.0.0.1:6379和127.0.0.1:12345,如果我們向伺服器127.0.0.1:12345發送以下命令:

127.0.0.1:12345>SLAVEOF127.0.0.1 6379

那麼伺服器127.0.0.1:12345將成為127.0.0.1 6379的從伺服器,而伺服器127.0.0.1 6379則會成為127.0.0.1:12345的主伺服器。

進行複製中的主從伺服器雙方的資料庫將儲存相同的資料,概念上將這種現象稱作“資料庫狀態一致”。可以在主伺服器上執行SET,可以在從伺服器上擷取值。

部分重同步通過複製位移量,複製積壓緩衝區、伺服器運行ID三個部分來實現。

在複製操作剛開始的時候,從伺服器會成為主伺服器的用戶端,並通過向主伺服器發送命令請求來執行複製步驟,而在複製操作的後期,主從伺服器會相互成為對方的用戶端。

主伺服器通過向從伺服器傳播命令來更新從伺服器的狀態,保持主從伺服器一致,而從伺服器則通過向主伺服器發送命令來進行心跳檢測,以及命令丟失檢測。

二、Sentinel

Sentinel(哨兵、哨崗)是Redis的高可用性解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進行下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器,然後由新的主伺服器代替已下線的主伺服器繼續處理命令請求。

Sentinel只是一個運行在特殊模式下的Redis伺服器,它使用了和普通模式不同的命令表,所以Sentinel模式能夠使用的命令和普通Redis伺服器能夠使用的命令不同。

 

三、叢集

Redis叢集是Redis提供的分散式資料庫方案,叢集通過分區來進行資料共用,並提供複製和容錯移轉功能。

比如一個叢集包含的7000、7001和7002三個節點,圖展示了這三個節點進行握手的整個過程。

            

                     

叢集中的16384個槽可以分別指派給叢集中的各個節點,每個節點都會記錄哪些槽指派給了自己。節點在接到一個命令請求時,會先檢查這個命令請求要處理的鍵所在的槽是否由自己負責,如果不是的話,節點將向用戶端返回一個MOVED錯誤,MOVED錯誤攜帶的資訊可以指引用戶端轉向至正在負責相關槽的節點。

對Redis叢集的重新分區工作是由redis-trib負責執行的,重新分區的關鍵是將屬於某個槽的所有鍵值對從一個節點轉移到另一節點。

如果節點A正在遷移槽i至節點B,那麼當節點A沒能在自己的資料庫中找到命令指定的資料庫鍵時,節點A會向用戶端返回一個ASK錯誤,指引用戶端到節點B繼續尋找指定的資料庫鍵。

MOVED錯誤表示槽的負責權已經從一個節點轉移到了另一個節點,而ASK錯誤只是兩個節點在遷移槽的過程中使用的一種臨時措施。

 

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.