深入了解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,集群方案搭建復雜,遇到的問題也相對多很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM