天天看點

Redis 哨兵架構基礎

點選贈書:聊聊「分布式架構」那些事兒

sentinel , 中文是哨兵。

哨兵是redis 叢集架構中非常重要的一個元件,主要功能如下:

(1)叢集監控:負責監控reidis master 和slave 程序是否正常工作;

(2)消息通知:如果某個redis執行個體有故障,那麼哨兵負責發送消息作為報警通知給管理者;

(3)故障轉移:如果master node挂掉了,會自動轉移到slave node上;

(4)配置中心:如果故障轉移發生了,通知client 用戶端新的master 位址;

哨兵本身也是分布式的作為一個哨兵叢集去運作,互相協同工作;

(1)故障轉移時, 判斷一個master node當機了,需要大部分的哨兵都同意才行,涉及到了分布式選舉的問題;

(2)即使部分哨兵節點挂了,哨兵叢集還是能正常工作的,因為如果 一個作為高可用機制重要組成部分的故障轉移系統本身是單點的,那就坑爹了;目前采用的是sentinel 2 版本,sentinel2 相對于 sentinel 1 來說,重寫了很多代碼,主要是讓故障轉移的機制和算法變得更加健壯和簡單。

(1)哨兵至少需要3個執行個體,來保證自己的健壯性;

(2)哨兵+redis 主從的部署架構,是不會保證資料0丢失的,隻能保證redis 叢集的高可用性;

(3)對于哨兵+redis主從這種負責的部署架構,盡量在測試環境和生産環境,都進行充足的測試和演練;

哨兵叢集必須部署2個以上節點,如果哨兵叢集僅僅部署了2個哨兵執行個體,quorum=1

M1       R1

S1        S2

Configuration:quorum = 1 (哨兵節點隻要1個認為當機就可以進行切換了)

master 當機,s1 和 s2 中隻要有一個哨兵認為當機就可以進行切換,同時s1和s2中會選舉出一個哨兵來進行故障轉移,同時這個時候,需要majority,也就是大多數哨兵都是運作的,2個哨兵的majority就是2,2個哨兵都運作這,就可以允許執行故障轉移,但是整個M1和S2運作的機器當機了,那麼哨兵隻有1個了,此時就沒有majority來允許執行故障轉移,雖然另外一台機器還有一個R1,但是故障轉移不會執行;

M1

S1

R2        R3

S2        S3

Configuration:quorum = 2 majoiry

如果M1所在機器當機了,那麼3個哨兵還剩下2個,S2和S3可以一緻認為master 當機,然後選舉一個來執行故障轉移;同時3個哨兵的majoiry  = 2 , 是以還剩下2個哨兵運作着,就可以進行故障轉移。

往期推薦

認真看看, 以後寫 SQL 就爽多了:MyBatis 動态 SQL:

實戰篇:點贊功能,用 MySQL 還是 Redis 好 ?

為什麼國内流行的 MyBatis ,國外 Java 工程師卻不願意使用?

盤點開發中那些常用的MySQL優化

Spring 中 @Component、@Service 等注解如何被解析?

掃一掃,關注我

一起學習,一起進步

Redis 哨兵架構基礎

繼續閱讀