1. 程式人生 > >07.初步學習redis哨兵機制

07.初步學習redis哨兵機制

* [ ] ### 一、哨兵(sentinal)的介紹 * * * 哨兵是redis叢集架構中非常重要的一個元件,主要功能如下: * **叢集監控**,負責監控redis master和slave程序是否正常工作 * **訊息通知**,如果某個redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員 * **故障轉移**,如果master node掛掉了,會自動轉移到slave node上 * **配置中心**,如果故障轉移發生了,通知client客戶端新的master地址 哨兵本身也是**分散式**的,作為一個哨兵叢集去執行,互相協同工作 * 故障轉移時,判斷一個master node宕機了,需要大部分的哨兵都同意才行,涉及到了分散式選舉的問題 * 即使部分哨兵節點掛掉了,哨兵叢集還是能正常工作的     ### 二、主觀和客觀宕機 * * * >**sdown**:主觀宕機,就一個哨兵如果自己覺得一個master宕機了,那麼就是主觀宕機 >**odown**:客觀宕機,如果quorum數量的哨兵都覺得一個master宕機了,那麼就是客觀宕機 #### 達成條件 **sdown**:,如果一個哨兵ping一個master,超過了is-master-down-after-milliseconds指定的毫秒數之後,就主觀認為master宕機 **odown**:如果一個哨兵在指定時間內,收到了quorum指定數量的其他哨兵也認為那個master是sdown了,那麼就認為是odown了,客觀認為master宕機     ### 三、哨兵叢集的自動發現機制 * * * >**哨兵互相之間的發現**,是通過redis的pub/sub系統實現的。 1. 每隔兩秒鐘,每個哨兵都會往自己監控的某個master+slaves對應的__sentinel__:hello channel裡傳送一個訊息,內容是自己的host、ip和runid還有對這個master的監控配置 2. 每個哨兵也會去監聽自己監控的每個master+slaves對應的__sentinel__:hello channel,然後去感知到同樣在監聽這個master+slaves的其他哨兵的存在 3. 每個哨兵還會跟其他哨兵交換對master的監控配置,互相進行監控配置的同步     ### 四、slave配置的自動糾正 * * * 哨兵會負責自動糾正slave的一些配置,比如slave如果要成為潛在的master候選人,哨兵會確保slave在複製現有master的資料; 如果slave連線到了一個錯誤的master上,比如故障轉移之後,那麼哨兵會確保它們連線到正確的master上     * * * >hi~我是Mirror,一個為了自由安逸的未來而不斷前進的的程式設計師。 >如果你覺得文章對你有一點點幫助,一個小小贊,便是對我的認可,如果有不足之處,也歡迎各位