點選贈書:聊聊「分布式架構」那些事兒
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 等注解如何被解析?
掃一掃,關注我
一起學習,一起進步