1. 程式人生 > >redis哨兵sentinel相關知識

redis哨兵sentinel相關知識

最近看了一下redis的原始碼,著重看了一下哨兵模式,因為之前一直是應用,而沒有關注過實現原理。

哨兵模式,也就是redis sentinel模式:

sentinel本質上是一個執行在特殊模式下的redis伺服器,從他的啟動方式就可以看出來,與普通的redis啟動差不多,只是配置檔案不同而已。我總結了下一些哨兵的關鍵點

1、哨兵啟動的兩種方式:

1.1、redis-sentinel sentinel.conf

1.2、redis-server sentinel.conf --sentinel

2、哨兵模式下,只有11條命令可以使用,哨兵命令表替代了原先的redis命令表

3、sentinel配置檔案中配置了主節點之後,會建立一個主節點例項,加入到sentinel所監控的master字典裡面,從節點例項放到master例項的從節點字典裡面

4、哨兵任務分為四個部分:TILT模式判斷、執行週期性任務、執行指令碼任務、腦裂

4.1、TILT模式:sentinel發現系統有些不對勁,就會進入這個模式。sentinel的時間中斷器預設每秒執行10次,100ms執行一次,如果因為某種阻塞(負載過大,io任務密集等),sentinel會記錄本次中斷器執行時間和上次時間對比,如果差距很大,直接進入TILT模式,仍然監控所有目標,但是不在執行任何操作,比如故障轉移,因為此時的判斷已經不準確。如果TILT模式正常維持了30S左右,sentinel就會推出TILT模式

4.2、週期性任務:遞迴監控所有主節點,以及他們的從節點,以及監控該主節點的其他哨兵,遞迴他們的週期性操作。如果在執行過程中發現主從切換,就給所有原來的從節點(不包括升為主節點的從節點)傳送slaveof命令,讓他們去複製新的主節點。

4.3、執行指令碼任務:執行在佇列中等待執行的指令碼,清理已成功執行的指令碼,重試錯誤指令碼,殺死執行超時的指令碼(最多60s),在下一個迴圈的時候重試執行。

4.4、腦裂正在研究。。。。。。

5、判斷主節點下線。當前節點判斷master例項為下線狀態之後,會遍歷監控這個節點的其他sentinel節點,如果他們也認為master下線了,就票數加1,超過設定的票數,就把master標記為客觀下線。遍歷所有節點的哨兵,請求其他哨兵,把自己選舉為故障轉移的領頭,然後遍歷所有的redis從節點,淘汰那些ping回覆時間過長、優先順序為0、或者已經下線的節點,然後對剩下的節點排序,取ID最小的,ID相同就取執行命令最多的節點。然後對該節點執行slave no one,對剩下的節點執行slave of該節點,完成同步