Redis Sentinel

記錄是一種精神,是加深理解最好的方式之一妹孙。

最近學(xué)習(xí)了下Redis秋柄,了解了下Redis HA的原理获枝,在這里把他記下來
曹金桂 cao_jingui@163.com(如有遺漏之處還請指教)
時間:2016年10月23日10:30
本文參考自《Redis Sentinel Documentation》

概述


Redis Sentinel是Redis官方推薦的高可用性(HA)解決方案蠢正,當(dāng)用Redis做Master-slave的高可用方案時,假如master宕機(jī)了省店,Redis本身(包括它的很多客戶端)都沒有實(shí)現(xiàn)自動進(jìn)行主備切換嚣崭,而Redis-sentinel本身也是一個獨(dú)立運(yùn)行的進(jìn)程,它能監(jiān)控多個master-slave集群懦傍,發(fā)現(xiàn)master宕機(jī)后能進(jìn)行自懂切換雹舀。

它的主要功能有以下幾點(diǎn)

  • 不時地監(jiān)控redis是否按照預(yù)期良好地運(yùn)行;
  • 如果發(fā)現(xiàn)某個redis節(jié)點(diǎn)運(yùn)行出現(xiàn)狀況,能夠通知另外一個進(jìn)程(例如它的客戶端);
  • 能夠進(jìn)行自動切換粗俱。當(dāng)一個master節(jié)點(diǎn)不可用時说榆,能夠選舉出master的多個slave(如果有超過一個slave的話)中的一個來作為新的master,其它的slave節(jié)點(diǎn)會將它所追隨的master的地址改為被提升為master的slave的新地址。

Sentinel支持集群
很顯然寸认,只使用單個sentinel進(jìn)程來監(jiān)控redis集群是不可靠的签财,當(dāng)sentinel進(jìn)程宕掉后(sentinel本身也有單點(diǎn)問題,single-point-of-failure)整個集群系統(tǒng)將無法按照預(yù)期的方式運(yùn)行偏塞。所以有必要將sentinel集群唱蒸,這樣有幾個好處:

  • 即使有一些sentinel進(jìn)程宕掉了,依然可以進(jìn)行redis集群的主備切換灸叼;
  • 如果只有一個sentinel進(jìn)程神汹,如果這個進(jìn)程運(yùn)行出錯,或者是網(wǎng)絡(luò)堵塞古今,那么將無法實(shí)現(xiàn)redis集群的主備切換(單點(diǎn)問題);
  • 如果有多個sentinel屁魏,redis的客戶端可以隨意地連接任意一個sentinel來獲得關(guān)于redis集群中的信息。

Redis Replication

Redis-Sentinel是基于Redis的主從的捉腥,所以我們先看下Redis Replication氓拼。


  1. 一個master可以有多個slave
  2. Slave也可以有自己的slave,即級聯(lián)
  3. Master不受任何slave同步影響但狭,但slave端在第一次執(zhí)行同步時會阻塞讀
  4. 多個slave可以分擔(dān)讀壓力
  5. 可以用replication代替快照進(jìn)程(saving)披诗,利用replication的實(shí)時同步來災(zāi)備數(shù)據(jù)

Redis Replication配置也十分的簡單,只要在從服務(wù)上配置slaveof <master-ip> <master-port>即可立磁。主從配置成功后呈队,默認(rèn)從服務(wù)器只讀(當(dāng)然可以配置修改),當(dāng)我們在master上寫入數(shù)據(jù)唱歧,相應(yīng)地slave中也同步過來了宪摧。

竟然Redis有主從備份了粒竖,為什么還需要Redis Sentinel呢。我們知道几于,主從下蕊苗,如果Master服務(wù)宕機(jī)了,數(shù)據(jù)在從服務(wù)器上都存在沿彭,數(shù)據(jù)不會丟失朽砰。這個時候,我們的應(yīng)用服務(wù)鏈接的都是Master服務(wù)喉刘,應(yīng)用沒法動態(tài)切換到從服務(wù)器上去瞧柔,導(dǎo)致我們的應(yīng)用還是會訪問Redis異常。


Redis Sentinel

Redis-Sentinel是怎么做到高可用性(HA)的呢睦裳,我們先看下圖造锅。



Sentinel其實(shí)就是Client和Redis之間的橋梁,所有的客戶端都通過Sentinel程序獲取Redis的Master服務(wù)廉邑。首先Sentinel是集群部署的哥蔚,Client可以鏈接任何一個Sentinel服務(wù)所獲的結(jié)果都是一致的。其次蛛蒙,所有的Sentinel服務(wù)都會對Redis的主從服務(wù)進(jìn)行監(jiān)控糙箍,當(dāng)監(jiān)控到Master服務(wù)無響應(yīng)的時候,Sentinel內(nèi)部進(jìn)行仲裁宇驾,從所有的 Slave選舉出一個做為新的Master倍靡。并且把其他的slave作為新的Master的Slave。最后通知所有的客戶端新的Master服務(wù)地址课舍。如果舊的Master服務(wù)地址重新啟動塌西,這個時候,它將被設(shè)置為Slave服務(wù)筝尾。

Redis Sentinel配置使用

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

我們看到捡需,Redis-sentinel的配置相當(dāng)簡單,只要指定Master服務(wù)的ip和端口及其他timeout參數(shù)設(shè)置即可筹淫。相關(guān)配置的解釋這里就不說了站辉,在官方sentinel.conf文件中對每一個配置項都說明的很詳細(xì)(我不覺得我能解釋的比它更好)。

雖然sentinel集群中各個sentinel都互相連接彼此來檢查對方的可用性以及互相發(fā)送消息损姜。但是你不用在任何一個sentinel配置任何其它的sentinel的節(jié)點(diǎn)饰剥。因為sentinel利用了master的發(fā)布/訂閱機(jī)制去自動發(fā)現(xiàn)其它也監(jiān)控了統(tǒng)一master的sentinel節(jié)點(diǎn)。同樣摧阅,你也不需要在sentinel中配置某個master的所有slave的地址汰蓉,sentinel會通過詢問master來得到這些slave的地址的。

使用示例

這里我簡單的采用一個Master和一個Slave的Redis服務(wù)來進(jìn)行示例棒卷,相關(guān)配置如圖顾孽。


  1. 先保證我們的主從服務(wù)沒有問題祝钢,在Master寫的時候,Slave中能夠同步的有數(shù)據(jù)若厚。
  2. 使用#redis-cli -h 192.168.2.133 -p 26379連接Redis-Sentinel服務(wù)拦英,使用#info信息查看Sentinel服務(wù)信息: master0:name=mymaster,status=ok,address=192.168.2.133:6379,slaves=1,sentinels=2。我們看到Sentinel服務(wù)中得到了Master服務(wù)地址测秸。
  3. 手動將Redis的Master服務(wù)停止掉(shutdown)疤估。
  4. 查看Redis-sentinel服務(wù)信息:master0:name=mymaster,status=ok,address=192.168.2.128:6379,slaves=1,sentinels=2。128服務(wù)器上的Redis服務(wù)提升為Master乞封。
  5. 重新啟動133服務(wù)器上的Redis服務(wù)做裙,用info查看Redis的角色為slave岗憋。

小結(jié)

在Redis支持集群(3.0)之前肃晚,官方推薦高可用解決方案為Redis-sentinel,使用起來也比較簡單仔戈。在生產(chǎn)環(huán)境中也很穩(wěn)定关串。本篇文章沒有對Redis-sentinel的配置項進(jìn)行說明,相關(guān)說明在Redis官方源碼中提供的示例配置對每一個配置解釋的十分詳細(xì)监徘,大家可以參考晋修。當(dāng)然,如果有配置上的問題我很樂意為您服務(wù)(只要我會的)凰盔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墓卦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子户敬,更是在濱河造成了極大的恐慌落剪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尿庐,死亡現(xiàn)場離奇詭異忠怖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抄瑟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門凡泣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皮假,你說我怎么就攤上這事鞋拟。” “怎么了惹资?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵贺纲,是天一觀的道長。 經(jīng)常有香客問我布轿,道長哮笆,這世上最難降的妖魔是什么来颤? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮稠肘,結(jié)果婚禮上福铅,老公的妹妹穿的比我還像新娘。我一直安慰自己项阴,他們只是感情好滑黔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著环揽,像睡著了一般略荡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歉胶,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天汛兜,我揣著相機(jī)與錄音,去河邊找鬼通今。 笑死粥谬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辫塌。 我是一名探鬼主播漏策,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臼氨!你這毒婦竟也來了掺喻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤储矩,失蹤者是張志新(化名)和其女友劉穎感耙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椰苟,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抑月,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舆蝴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谦絮。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洁仗,靈堂內(nèi)的尸體忽然破棺而出层皱,到底是詐尸還是另有隱情,我是刑警寧澤赠潦,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布叫胖,位于F島的核電站,受9級特大地震影響她奥,放射性物質(zhì)發(fā)生泄漏瓮增。R本人自食惡果不足惜怎棱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绷跑。 院中可真熱鬧拳恋,春花似錦、人聲如沸砸捏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垦藏。三九已至梆暖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掂骏,已是汗流浹背轰驳。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芭挽,地道東北人滑废。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像袜爪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薛闪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容