摘要:哨兵機制的原理及實現(xiàn)是一個分布式架構(gòu),其中包含若干個節(jié)點和數(shù)據(jù)節(jié)點,每個節(jié)點會對數(shù)據(jù)節(jié)點和其余節(jié)點進(jìn)行監(jiān)控,當(dāng)它發(fā)現(xiàn)節(jié)點不可達(dá)時,會對節(jié)點做下線標(biāo)識。故障轉(zhuǎn)移后整個的結(jié)構(gòu)重新選舉了新的主節(jié)點。技巧節(jié)點不應(yīng)該部署在一臺物理機器上。
概述
上篇文章主要說了Redis 復(fù)制的內(nèi)容,但 Redis 復(fù)制有一個缺點,當(dāng)主機 Master 宕機以后,我們需要人工解決切換,比如使用slaveof no one 。實際上主從復(fù)制并沒有實現(xiàn),高可用, 高可用側(cè)重備份機器, 利用集群中系統(tǒng)的冗余,當(dāng)系統(tǒng)中某臺機器發(fā)生損壞的時候,其他后備的機器可以迅速的接替它來啟動服務(wù)。
主從復(fù)制的問題一旦主節(jié)點宕機,寫服務(wù)無法使用,就需要手動去切換,重新選取主節(jié)點,手動設(shè)置主從關(guān)系。
那么如何解決呢?如果我們有一個監(jiān)控程序能夠監(jiān)控各個機器的狀態(tài)及時作出調(diào)整,將手動的操作變成自動的。Sentinel的出現(xiàn)就是為了解決這個問題。
哨兵機制的原理及實現(xiàn) Redis SentinelRedis Sentinel 是一個分布式架構(gòu),其中包含若干個 Sentinel 節(jié)點和 Redis 數(shù)據(jù)節(jié)點,每個 Sentinel 節(jié)點會對數(shù)據(jù)節(jié)點和其余 Sentinel 節(jié)點進(jìn)行監(jiān)控,當(dāng)它發(fā)現(xiàn)節(jié)點不可達(dá)時,會對節(jié)點做下線標(biāo)識。如果被標(biāo)識的是主節(jié)點,它還會和其他 Sentinel 節(jié)點進(jìn)行“協(xié)商”,當(dāng)大多數(shù) Sentinel 節(jié)點都認(rèn)為主節(jié)點不可達(dá)時,它們會選舉出一個 Sentinel 節(jié)點來完成自動故障轉(zhuǎn)移的工作,同時會將這個變化實時通知給 Redis 應(yīng)用方。整個過程完全是自動的,不需要人工來介入,所以這套方案很有效地解決了 Redis 的高可用問題。
如圖所示:
1)主節(jié)點出現(xiàn)故障,此時兩個從節(jié)點與主節(jié)點失去連接,主從復(fù)制失敗。
2)每個 Sentinel 節(jié)點通過定期監(jiān)控發(fā)現(xiàn)主節(jié)點出現(xiàn)了故障
3)多個 Sentinel 節(jié)點對主節(jié)點的故障達(dá)成一致會選舉出其中一個節(jié)點作為領(lǐng)導(dǎo)者負(fù)責(zé)故障轉(zhuǎn)移。
4)Sentinel 領(lǐng)導(dǎo)者節(jié)點執(zhí)行了故障轉(zhuǎn)移,整個過程基本是跟我們手動調(diào)整一致的,只不過是自動化完成的。
5)故障轉(zhuǎn)移后整個 Redis Sentinel 的結(jié)構(gòu),重新選舉了新的主節(jié)點。
實例使用docker創(chuàng)建如下redis容器,這里可以參考[進(jìn)階篇]docker編排PHP開發(fā)壞境、Linux docker-compose 實戰(zhàn)學(xué)習(xí)下容器技術(shù)
redis-sentinel1 172.10.0.9 22530 -> 22530 sentinel redis-sentinel2 172.10.0.10 22531 -> 6379 sentinel redis-sentinel3 172.10.0.11 22532 -> 6379 sentinel redis-master2 172.10.0.5 6383 -> 6379 Master redis-slave2 172.10.0.6 6384 -> 6379 Slave redis-slave3 172.10.0.7 6385 -> 6379 Slave配置
Sentinel 的核心配置
sentinel monitor mymaster 127.0.0.1 7000 2
監(jiān)控的主節(jié)點的名字、IP 和端口,最后一個2的意思是有幾臺 Sentinel 發(fā)現(xiàn)有問題,就會發(fā)生故障轉(zhuǎn)移,例如 配置為2,代表至少有2個 Sentinel 節(jié)點認(rèn)為主節(jié)點不可達(dá),那么這個不可達(dá)的判定才是客觀的。對于設(shè)置的越小,那么達(dá)到下線的條件越寬松,反之越嚴(yán)格。一般建議將其設(shè)置為 Sentinel 節(jié)點的一半加1。
sentinel down-after-millseconds mymaster 30000
這個是超時的時間(單位為毫秒)。打個比方,當(dāng)你去 ping 一個機器的時候,多長時間后仍 ping 不通,那么就認(rèn)為它是有問題。
sentinel parallel-syncs mymaster 1
當(dāng) Sentinel 節(jié)點集合對主節(jié)點故障判定達(dá)成一致時,Sentinel 領(lǐng)導(dǎo)者節(jié)點會做故障轉(zhuǎn)移操作,選出新的主節(jié)點,原來的從節(jié)點會向新的主節(jié)點發(fā)起復(fù)制操作,parallel-syncs 就是用來限制在一次故障轉(zhuǎn)移之后,每次向新的主節(jié)點發(fā)起復(fù)制操作的從節(jié)點個數(shù),指出 Sentinel 屬于并發(fā)還是串行。1代表每次只能復(fù)制一個,可以減輕 Master 的壓力。
sentinel auth-pass
如果 Sentinel 監(jiān)控的主節(jié)點配置了密碼,sentinel auth-pass 配置通過添加主節(jié)點的密碼,防止 Sentinel 節(jié)點對主節(jié)點無法監(jiān)控。
sentinel failover-timeout mymaster 180000
表示故障轉(zhuǎn)移的時間。
技巧1)Sentinel 節(jié)點不應(yīng)該部署在一臺物理“機器”上。
這里特意強調(diào)物理機是因為一臺物理機做成了若干虛擬機或者現(xiàn)今比較流行的容器,它們雖然有不同的 IP 地址,但實際上它們都是同一臺物理機,同一臺物理機意味著如果這臺機器有什么硬件故障,所有的虛擬機都會受到影響,為了實現(xiàn) Sentinel 節(jié)點集合真正的高可用,請勿將 Sentinel 節(jié)點部署在同一臺物理機器上。
2)部署至少三個且奇數(shù)個的 Sentinel 節(jié)點。
3個以上是通過增加 Sentinel 節(jié)點的個數(shù)提高對于故障判定的準(zhǔn)確性,因為領(lǐng)導(dǎo)者選舉需要至少一半加1個節(jié)點,奇數(shù)個節(jié)點可以在滿足該條件的基礎(chǔ)上節(jié)省一個節(jié)點。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30181.html
摘要:面試官要不你來講講你最近在看的點唄可以拉出來一起討論下今天我也不知道要問什么候選者最近在看相關(guān)的內(nèi)容面試官嗯,我記得已經(jīng)問過的基礎(chǔ)和持久化了面試官要不你來講講你公司的是什么架構(gòu)的咯候選者我前公司的架構(gòu)是分片集群,使用的是層來對進(jìn)行分流到不同面試官:要不你來講講你最近在看的點唄?可以拉出來一起討論下(今天我也不知道要問什么)候選者:最近在看「Redis」相關(guān)的內(nèi)容面試官:嗯,我記得已經(jīng)問過Re...
摘要:哨兵監(jiān)控也是有集群的,會有多個哨兵進(jìn)行監(jiān)控,當(dāng)判斷發(fā)生故障的哨兵達(dá)到一定數(shù)量的時候才進(jìn)行修復(fù)。一個健壯的部署至少需要三個哨兵實例。若重新向的命令返回有效回復(fù),的主觀下線狀態(tài)就會被移除。 哨兵監(jiān)控也是有集群的,會有多個哨兵進(jìn)行監(jiān)控,當(dāng)判斷發(fā)生故障的哨兵達(dá)到一定數(shù)量的時候才進(jìn)行修復(fù)。一個健壯的部署至少需要三個哨兵實例。 1.每個Sentinel以每秒鐘一次的頻率向它所知的Master,Sl...
摘要:可以通過以下兩個配置盡量減少數(shù)據(jù)丟失的可能從零單排學(xué)鉑金三,敬請期待參考資料設(shè)計與實現(xiàn)實戰(zhàn)如果你覺得我寫得還不錯,了解一下堅持原創(chuàng)的技術(shù)公眾號。 前言 只有光頭才能變強 好的,今天我們要上【鉑金二】了,如果還沒有上鉑金的,趕緊先去蹭蹭經(jīng)驗再回來(不然不帶你上分了): 從零單排學(xué)Redis【青銅】 從零單排學(xué)Redis【白銀】 從零單排學(xué)Redis【黃金】 從零單排學(xué)Redis【鉑金一...
閱讀 3183·2021-11-23 09:51
閱讀 695·2021-10-14 09:43
閱讀 3222·2021-09-06 15:00
閱讀 2416·2019-08-30 15:54
閱讀 2572·2019-08-30 13:58
閱讀 1862·2019-08-29 13:18
閱讀 1390·2019-08-27 10:58
閱讀 526·2019-08-27 10:53