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