這篇文章只來講說redis哨兵是什麼,前面在說redis主從架構裏反覆提到了一個高可用,即當咱們的master節點宕機掛掉,咱們會選舉一個slave來晉升master來保證咱們服務的可用性。 redis sentinel是redis官方提供的一個解決redis高可用的實現,其功能就是咱們上述提到的,它能夠對咱們的節點進行監控,以及上述所提到的進行一個完美的遷移流程,以及通知咱們客戶端。redis
例如當master宕機,咱們在某臺slave上執行slaveof no one命令讓這個從節點再也不屬於任何master,本身成爲master,其他slave執行slaveof new master命令來對這個新master進行同步,但這裏會有個問題,咱們不知道什麼時候master節點會不可用,沒法及時手動去解決,並且出現這種問題咱們容易手忙腳亂。還有當master發生改變時,如何通知咱們的客戶端?這時就能夠使用redis sentinel了。架構
來張圖說下sentinel的架構:spa
首先,你能夠把一個sentinel想象是一個redis的進程,不一樣的是sentinel不負責存儲數據,它是負責對redis的一個故障判斷、故障轉移以及通知客戶端的功能。另外,由上圖能夠看出sentinel不是一個而是多個,這樣一來能夠保證咱們判斷故障的一個公平性(後面能夠設置幾個sentinel認爲節點有故障纔算數),同時也保證了咱們的高可用(即當一個sentinel節點掛了,仍然能夠保證咱們這個sentinel機制是完美的)。進程
那對客戶端來講就不再會直接從redis中獲取信息,也就是說在咱們客戶端中不會記錄redis的地址(某個IP),而是記錄sentinel的地址,這樣咱們能夠直接從sentinel獲取的redis地址,由於sentinel會對全部的master、slave進行監控,它是知道到底誰纔是真正的master的,例如咱們故障轉移,這時候對於sentinel來講,master是變了的,而後通知客戶端。而客戶端根本不用關心到底誰纔是真正的master,只關心sentinel告知的master。資源
1.多個sentinel發現並確認master有問題。同步
2.選舉出一個sentinel做爲領導。(由於故障轉移一系列操做只須要一個sentinel就能夠完成)ast
3.從多個slave中選出一個slave做爲新的master監控
4.通知其他slave成爲新的master的slave高可用
5.通知客戶端主從變化(這樣客戶端就不會有讀取失敗的問題)im
6.等待老的master復活成爲新的master的slave(sentinel依然會對老的master進行監控是否復活)
這裏簡單提一下:咱們的一套sentinel是能夠監聽多套master+slave的組合,這樣能夠有效節省資源,其中每套master+slave會使用一個master-name做爲一個標識。