1. 程式人生 > >深入瞭解Redis(8)-高可用方案

深入瞭解Redis(8)-高可用方案

  生產環境中的redis基本都是多節點部署,本文只討論redis高可用的三種方案,不涉及實際操作。

一、主從複製(一主一從,一主多從,級聯結構)

   (圖來源於網路)

一個Master,兩個Slave,Slave只能讀不能寫;當Slave與Master斷開後需要重新slave of連線才可建立之前的主從關係;Master掛掉後,Master關係依然存在,Master重啟即可恢復。

實現原理:

1、Slave啟動成功連線到master後會傳送一個sync命令;

2、Master接到命令啟動後的存檔程序,同時收集所有接收到的用於修改資料集命令,在後臺程序執行完畢之後,master將傳送整個資料檔案到slave,以完成一次完全同步;

3、全量複製:而slave服務在資料庫檔案資料後,將其存檔並載入到記憶體中;

4、增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步;

5、但是隻要是重新連線master,一次完全同步(全量複製)將被自動執行。

二、哨兵模式  

(圖來源於網路)

由一個或多個Sentinel例項組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。

Sentinel的功能有:

  • 監控:Sentinel節點會定期檢測Redis資料節點、其餘Sentinel節點是否 可達
  • 通知:Sentinel節點會將故障轉移的結果通知給應用方
  • 主節點故障轉移:實現從節點晉升為主節點並維護後續正確的主從關係
  • 配置提供者:在Redis Sentinel結構中,客戶端在初始化的時候連線的 是Sentinel節點集合,從中獲取主節點資訊

實現原理:

Redis Sentinel是一個分散式架構,其中包含若干個Sentinel節點和Redis資料節點,每個Sentinel節點會對資料節點和其餘Sentinel節點進行監控,當它發現節點不可達時,會對節點做下線標識

如果被標識的是主節點,它還會和其他Sentinel節點進行“協商”,當大多數Sentinel節點都認為主節點不可達時,它們會選舉出一個Sentinel節點來完成自動故障轉移的工作,同時會將這個變化實時通知給Redis應用方。

三、Redis叢集(Redis-Cluster)

(圖來源於網路)

  Redis 叢集是一個提供在多個Redis節點間共享資料的程式集。自動將資料進行分片,每個master上放一部分資料提供內建的高可用支援,部分master不可用時,還是可以繼續工作的支撐N個redis master node,每個master node都可以掛載多個slave node高可用,因為每個master都有salve節點,那麼如果mater掛掉,redis cluster這套機制,就會自動將某個slave切換成master。

Redis Cluster功能特點如下:

1)所有的節點相互連線

2)叢集訊息通訊通過叢集匯流排通訊,,叢集匯流排埠大小為客戶端服務埠+10000,這個10000是固定值

3)節點與節點之間通過二進位制協議進行通訊

4)客戶端和叢集節點之間通訊和通常一樣,通過文字協議進行

5)叢集節點不會代理查詢

6)資料按照Slot儲存分佈在多個Redis例項上

7)叢集節點掛掉會自動故障轉移

8)可以相對平滑擴/縮容節點

四、方案抉擇

如果你的資料量很少,主要是承載高併發高效能的場景,比如你的快取一般就幾個G,單機足夠了。

如果又多個slave節點,有自動選舉的需求,建議搭建一個sentinal叢集,去保證redis主從架構的高可用性,就可以了。

如果是海量資料+高併發+高可用的場景,海量資料,如果你的資料量很大,那麼建議就用redis cluster,叢集方案搭建複雜,遇到的問題也相對多很