主從切換技術(shù)的方法是:當(dāng)主服務(wù)器宕機(jī)后,需要手動(dòng)把一臺(tái)從服務(wù)器切換為主服務(wù)器,這就需要人工干預(yù),費(fèi)事費(fèi)力,還會(huì)造成一段時(shí)間內(nèi)服務(wù)不可用。這不是一種推薦的方式,更多時(shí)候,我們優(yōu)先考慮哨兵模式。
一、哨兵模式概述
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個(gè)獨(dú)立的進(jìn)程,作為進(jìn)程,它會(huì)獨(dú)立運(yùn)行。其原理是哨兵通過(guò)發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運(yùn)行的多個(gè)Redis實(shí)例。

Redis哨兵
這里的哨兵有兩個(gè)作用
通過(guò)發(fā)送命令,讓Redis服務(wù)器返回監(jiān)控其運(yùn)行狀態(tài),包括主服務(wù)器和從服務(wù)器。
當(dāng)哨兵監(jiān)測(cè)到master宕機(jī),會(huì)自動(dòng)將slave切換成master,然后通過(guò)發(fā)布訂閱模式通知其他的從服務(wù)器,修改配置文件,讓它們切換主機(jī)。
然而一個(gè)哨兵進(jìn)程對(duì)Redis服務(wù)器進(jìn)行監(jiān)控,可能會(huì)出現(xiàn)問(wèn)題,為此,我們可以使用多個(gè)哨兵進(jìn)行監(jiān)控。各個(gè)哨兵之間還會(huì)進(jìn)行監(jiān)控,這樣就形成了多哨兵模式。
用文字描述一下故障切換(failover)的過(guò)程。假設(shè)主服務(wù)器宕機(jī),哨兵1先檢測(cè)到這個(gè)結(jié)果,系統(tǒng)并不會(huì)馬上進(jìn)行failover過(guò)程,僅僅是哨兵1主觀的認(rèn)為主服務(wù)器不可用,這個(gè)現(xiàn)象成為主觀下線。當(dāng)后面的哨兵也檢測(cè)到主服務(wù)器不可用,并且數(shù)量達(dá)到一定值時(shí),那么哨兵之間就會(huì)進(jìn)行一次投票,投票的結(jié)果由一個(gè)哨兵發(fā)起,進(jìn)行failover操作。切換成功后,就會(huì)通過(guò)發(fā)布訂閱模式,讓各個(gè)哨兵把自己監(jiān)控的從服務(wù)器實(shí)現(xiàn)切換主機(jī),這個(gè)過(guò)程稱為客觀下線。這樣對(duì)于客戶端而言,一切都是透明的。
二、Redis配置哨兵模式
配置3個(gè)哨兵和1主2從的Redis服務(wù)器來(lái)演示這個(gè)過(guò)程。
服務(wù)類型是否是主服務(wù)器IP地址端口
Redis是192.168.11.1286379
Redis否192.168.11.1296379
Redis否192.168.11.1306379
Sentinel-192.168.11.12826379
Sentinel-192.168.11.12926379
Sentinel-192.168.11.13026379

多哨兵監(jiān)控Redis
首先配置Redis的主從服務(wù)器,修改redis.conf文件如下

上述內(nèi)容主要是配置Redis服務(wù)器,從服務(wù)器比主服務(wù)器多一個(gè)slaveof的配置和密碼。
配置3個(gè)哨兵,每個(gè)哨兵的配置都是一樣的。在Redis安裝目錄下有一個(gè)sentinel.conf文件,copy一份進(jìn)行修改

上述關(guān)閉了保護(hù)模式,便于測(cè)試。
有了上述的修改,我們可以進(jìn)入Redis的安裝目錄的src目錄,通過(guò)下面的命令啟動(dòng)服務(wù)器和哨兵

注意啟動(dòng)的順序。首先是主機(jī)(192.168.11.128)的Redis服務(wù)進(jìn)程,然后啟動(dòng)從機(jī)的服務(wù)進(jìn)程,最后啟動(dòng)3個(gè)哨兵的服務(wù)進(jìn)程。
三、Java中使用哨兵模式

????上面是通過(guò)Jedis進(jìn)行使用的,同樣也可以使用Spring進(jìn)行配置RedisTemplate使用。
四、哨兵模式的其他配置項(xiàng)

????????sentinel down-after-milliseconds配置項(xiàng)只是一個(gè)哨兵在超過(guò)規(guī)定時(shí)間依舊沒(méi)有得到響應(yīng)后,會(huì)自己認(rèn)為主機(jī)不可用。對(duì)于其他哨兵而言,并不是這樣認(rèn)為。哨兵會(huì)記錄這個(gè)消息,當(dāng)擁有認(rèn)為主觀下線的哨兵達(dá)到sentinel monitor所配置的數(shù)量時(shí),就會(huì)發(fā)起一次投票,進(jìn)行failover,此時(shí)哨兵會(huì)重寫Redis的哨兵配置文件,以適應(yīng)新場(chǎng)景的需要。