深刻了解Redis(8)-高可用方案

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

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

  (圖來源於網絡)redis

一個Master,兩個Slave,Slave只能讀不能寫;當Slave與Master斷開後須要從新slave of鏈接纔可創建以前的主從關係;Master掛掉後,Master關係依然存在,Master重啓便可恢復。數據庫

實現原理:緩存

一、Slave啓動成功鏈接到master後會發送一個sync命令;服務器

二、Master接到命令啓動後的存盤進程,同時收集全部接收到的用於修改數據集命令,在後臺進程執行完畢以後,master將傳送整個數據文件到slave,以完成一次徹底同步;網絡

三、全量複製:而slave服務在數據庫文件數據後,將其存盤並加載到內存中;架構

四、增量複製:Master繼續將新的全部收集到的修改命令依次傳給slave,完成同步;併發

五、可是隻要是從新鏈接master,一次徹底同步(全量複製)將被自動執行。分佈式

2、哨兵模式  

(圖來源於網絡)高併發

由一個或多個Sentinel實例組成的Sentinel系統能夠監視任意多個主服務器,以及這些主服務器屬下的全部從服務器,並在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級爲新的主服務器。

Sentinel的功能有:

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

實現原理:

Redis Sentinel是一個分佈式架構,其中包含若干個Sentinel節點和Redis數據節點,每一個Sentinel節點會對數據節點和其他Sentinel節點進行監控,當它發現節點不可達時,會對節點作下線標識

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

3、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)能夠相對平滑擴/縮容節點

4、方案抉擇

若是你的數據量不多,主要是承載高併發高性能的場景,好比你的緩存通常就幾個G,單機足夠了。

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

若是是海量數據+高併發+高可用的場景,海量數據,若是你的數據量很大,那麼建議就用redis cluster,集羣方案搭建複雜,遇到的問題也相對多不少。

相關文章
相關標籤/搜索