首頁  >  文章  >  資料庫  >  為什麼要加redis哨兵模式

為什麼要加redis哨兵模式

silencement
silencement原創
2019-06-06 14:38:283440瀏覽

為什麼要加redis哨兵模式

Redis Sentinel簡介

Sentinel(哨兵)程序是用來監控redis叢集中Master主伺服器工作的狀態,在Master主伺服器發生故障的時候,可以實現Master和Slave伺服器的切換,確保系統的高可用,其已經被整合在redis2.6 的版本中,Redis的哨兵模式到了2.8版本之後就穩定了下來。一般在生產環境也建議使用Redis的2.8版本的以後版本。哨兵(Sentinel) 是一個分散式系統,你可以在一個架構中運行多個哨兵(sentinel) 進程,這些進程使用流言協議(gossipprotocols)來接收關於Master主伺服器是否下線的信息,並使用投票協議( Agreement Protocols)來決定是否執行自動故障遷移,以及選擇哪個Slave作為新的Master。每個哨兵(Sentinel)程序會向其它哨兵(Sentinel)、Master、Slave定時發送訊息,以確認對方是否」活」著,如果發現對方在指定配置時間(可配置的)內未得到回應,則暫時認為對方已斷線,也就是所謂的」主觀認為宕機」 ,英文名稱:Subjective Down,簡稱SDOWN。有主觀宕機,肯定就有客觀宕機。當「哨兵群」中的多數Sentinel進程在對Master主伺服器做出SDOWN 的判斷,並且透過SENTINEL is-master-down-by-addr 指令互相交流之後,得出的Master Server下線判斷,這種方式就是“客觀宕機”,英文名稱是:Objectively Down, 簡稱ODOWN。透過一定的vote演算法,從剩下的slave從伺服器節點中,選一台提升為Master伺服器節點,然後自動修改相關配置,並開啟故障轉移(failover)。

哨兵(sentinel) 雖然有一個單獨的可執行檔redis-sentinel ,但實際上它只是一個運行在特殊模式下的Redis 伺服器,你可以在啟動一個普通Redis 伺服器時透過給定- -sentinel 選項來啟動哨兵(sentinel),哨兵(sentinel) 的一些設計想法和zookeeper非常類似。

Sentinel集群之間會互相通信,溝通交流redis節點的狀態,做出相應的判斷並進行處理,這裡的主觀下線狀態和客觀下線狀態是比較重要的狀態,它們決定了是否進行故障轉移,可以透過訂閱指定的頻道信息,當伺服器出現故障得時候通知管理員,客戶端可以將Sentinel 看作是一個只提供了訂閱功能的Redis 伺服器,你不可以使用PUBLISH 命令向這個伺服器傳送訊息,但你可以用SUBSCRIBE 指令或PSUBSCRIBE 指令, 透過訂閱給定的頻道來取得對應的事件提醒。一個頻道能夠接收和這個頻道的名字相同的事件。比方說, 名為 sdown 的頻道就可以接收所有執行個體進入主觀下線(SDOWN)狀態的事件。 

Sentinel(哨兵)進程的功能:

1、監控(Monitoring): 哨兵(sentinel) 會不斷檢查你的Master和Slave是否運作正常。

2、提醒(Notification):當被監控的某個Redis節點出現問題時, 哨兵(sentinel) 可以透過 API 向管理員或其他應用程式發送通知。

3、自動故障遷移(Automatic failover):當一個Master無法正常運作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會將失效Master的其中一個Slave升級為新的Master , 並讓失效Master的其他Slave改為複製新的Master;當客戶端試圖連接失效的Master時,集群也會向客戶端返回新Master的地址,使得集群可以使用現在的Master替換失效Master。 Master和Slave伺服器切換後,Master的redis.conf、Slave的redis.conf和sentinel.conf的設定檔的內容都會發生對應的改變,即,Master主伺服器的redis.conf設定檔中會多一行slaveof的配置,sentinel.conf的監控目標會隨之調換

以上是為什麼要加redis哨兵模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn