天天看點

Redis 哨兵模式

主從架構無法實作master和slave角色的自動切換,即當master出現redis服務異常、主機斷電、磁盤損

壞等問題導緻master無法使用,而redis主從複制無法實作自動的故障轉移(将slave 自動提升為新

master),需要手動修改環境配置,才能切換到slave redis伺服器,另外也無法橫向擴充Redis服務的并行

寫入性能,當單台Redis伺服器性能無法滿足業務寫入需求的時候,也需要解決以上的兩個核心問題,

即:1.master和slave角色的無縫切換,讓業務無感覺進而不影響業務使用 2.可橫向動态擴充Redis服務

器,進而實作多台伺服器并行寫入以實作更高并發的目的。

Redis 叢集實作方式:

用戶端分片: 由應用決定将不同的KEY發送到不同的Redis伺服器

代理分片: 由代理決定将不同的KEY發送到不同的Redis伺服器,代理程式如:codis,twemproxy等

Redis Cluster

Redis 哨兵模式
Redis 哨兵模式

Sentinel 程序是用于監控redis叢集中Master主伺服器工作的狀态,在Master主伺服器發生故障的時

候,可以實作Master和Slave伺服器的切換,保證系統的高可用,此功能在redis2.6+的版本已引用,

Redis的哨兵模式到了2.8版本之後就穩定了下來。一般在生産環境也建議使用Redis的2.8版本的以後版

哨兵(Sentinel) 是一個分布式系統,可以在一個架構中運作多個哨兵(sentinel) 程序,這些程序使用流言

協定(gossip protocols)來接收關于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 機制可以解決master和slave角色的自動切換問題,但單個 Master 的性能瓶頸問題無法解決,類似于MySQL中的MHA功能Redis Sentinel中的Sentinel節點個數應該為大于等于3且最好為奇數用戶端初始化時連接配接的是Sentinel節點集合,不再是具體的Redis節點,但Sentinel隻是配置中心不是代理。

Redis Sentinel 節點與普通redis 沒有差別,要實作讀寫分離依賴于用戶端程式

redis 3.0 之前版本中,生産環境一般使用哨兵模式,但3.0後推出redis cluster功能後,可以支援更大規模的生産環境

每10秒每個sentinel對master和slave執行info發現slave節點确認主從關系

每2秒每個sentinel通過master節點的channel交換資訊(pub/sub)通過sentinel__:hello頻道互動互動對節點的“看法”和自身資訊

每1秒每個sentinel對其他sentinel和redis執行ping

哨兵的前提是已經實作了一個redis的主從複制的運作環境,進而實作一個一主兩從基于哨兵的高可用

redis架構

注意: master 的配置檔案中masterauth 和slave 都必須相同

所有主從節點的redis.conf中關健配置

範例:

master 伺服器狀态

配置slave1

配置slave2

sentinel配置

Sentinel實際上是一個特殊的redis伺服器,有些redis指令支援,但很多指令并不支援.預設監聽在

26379/tcp端口.

哨兵可以不和Redis伺服器部署在一起,但一般部署在一起,所有redis節點使用相同的以下示例的配置

檔案

三個哨兵伺服器的配置都如下

三台哨兵伺服器都要啟動

如果是編譯安裝,在所有哨兵伺服器執行下面操作啟動哨兵

master的哨兵日志

slave的哨兵日志

在sentinel狀态中尤其是最後一行,涉及到masterIP是多少,有幾個slave,有幾個sentinels,必須是

符合全部伺服器數量

檢視各節點上哨兵資訊:

故障轉移時sentinel的資訊:

故障轉移後redis.conf中的replicaof行的master IP會被修改

哨兵配置檔案的sentinel monitor IP 同樣也會被修改

新的master 狀态

另一個slave指向新的master

在原 master上觀察狀态

觀察新master上狀态和日志

手動讓主節點下線

範例: 手動故障轉移

Redis 官方用戶端:https://redis.io/clients

Redis 哨兵模式
Redis 哨兵模式
Redis 哨兵模式
Redis 哨兵模式