8. 【Redis主從架構】哨兵基礎知識
文章目錄
1. 哨兵介紹
sentinal, 中文名是哨兵,哨兵是redis集羣架構中非常重要的一個組件。
1.1 哨兵主要功能
- (1)集羣監控,負責監控redis master 和 slave 進程是否正常工作。
- (2)消息通知,如果某個redis實例有故障,那麼哨兵負責發送消息作爲報警通知給管理員
- (3)故障轉移,如果master node掛掉了,會自動轉移到slave node上。
- (4)配置中心,如果故障轉移發生了,會通知client客戶端更新最新的master地址。
2 哨兵集羣
哨兵本身也是分佈式的,作爲一個哨兵集羣去運行,互相協同工作,保證哨兵的高可用。
2.1 哨兵集羣工作原理
-
(1)故障轉移時,判斷一個master node是否宕機了,需要大部分的哨兵同意纔行,涉及到了分佈式選舉的問題。
-
(2)即使部分哨兵節點掛掉了,哨兵集羣還是能正常工作的,因爲如果一個作爲高可用機制重要組成部分的故障轉移系統本身是單點的,那就坑爹了。
3. 哨兵的核心知識
-
(1) 哨兵至少需要3個實例,來保證自己的健壯性。
-
(2)哨兵 + redis 主從的部署架構,是不會保證數據零丟失的,只能保證redis集羣的高可用性。
-
(3) 對於 哨兵 + redis 主從這種複雜的部署架構,儘量在測試環境和生產環境,都要進行充足的測試和演練
4. 爲什麼redis哨兵集羣只有2個節點無法正常工作
+----+ +----+
| M1 |---------| R1 |
| S1 | | S2 |
+----+ +----+
哨兵集羣中有兩個關鍵的配置:
-
quorum: 只有有最少quorum個哨兵認爲master宕機了,就認爲master宕機了。
-
majority: 只要有最少majority個哨兵是正常運行的,就允許執行故障轉移。
問題分析:爲什麼只有兩個哨兵節點的哨兵集羣不能正常運行?
-
假如master m1宕機了,只要有s1或s2中其中一個認爲master宕機了,就認爲master宕機了。
-
如果此時需要進行故障轉移,就需要 majority 個哨兵都是運行的,並且從中選舉出一個哨兵來執行故障轉移。2個哨兵的majority是2(2的majority是2,3的majority是2,4的majority是3,5的majority是3),計算公式是:n/2 + 1。
但是如果整個M1和S1所在的機器宕機了,那麼哨兵就只剩下一個了,此時沒有足夠的majority的哨兵來允許執行故障轉移,因此就不會進行故障轉移。
4. 經典的3節點哨兵集羣
+----+
| M1 |
| S1 |
+----+
|
+----+ | +----+
| R2 |----+----| R3 |
| S2 | | S3 |
+----+ +----+
三個節點的哨兵:quorum配置一般是2,majority也爲2
如果M1所在的機器宕機了,那麼三個哨兵就只剩下兩個,S2和S3可以一致認爲master宕機了,然後從中選舉一個哨兵出來,進行故障轉移。
參考 石衫老師 《億級流量教程》課程筆記
親,覺得對你有用的話,點個讚唄!!!