redis哨兵(sential)
哨兵人巡查監控後後臺master主機是否故障,如果故障了根據投票數自動將某一個從機轉換為主機,繼續對外提供服務。
哨兵的作用
- 監控redis主機的執行狀態,包括主機master和slave。
- 當主機當機後,能自動將從機切slave換成新的主機master
注意哨兵不使用叢集,僅僅是和主從複製相互配合。
配置redis哨兵
我們知道,網路是不可靠的,有時候一個sentinel會因為網路堵塞而誤認為一個redis主機掛掉了,在sentinel叢集環境下需要多個sentinel互相溝通來確認某個redis主機真的掛掉。投票數這個引數是進行客觀下線的依據,意思是至少有quorum個sentinel認為redis主機是有故障的,才會對這個redis主機進行下線以及故障轉移,因為有的時候某個sentinel節點可能是因為網路問題無法連線到redis主機,但此時redis主機並沒有出現故障。所以,此時就需要多個sentinel都認為該redis主機出現故障,才進行下一步的操作。這保證了公平性和高可用性。
- 在myredis目錄下新建或複製sentinel.conf檔案(名字不能錯,預設在redis安裝目錄下)
- 新增如下配置:
設定要監控的master伺服器,其中quorum是法定投票數:表示最少有幾個哨兵認可客觀下線,同意故障遷移的法定投票數。
sentinel monitor
redis主機設定了密碼,連線redis主機的密碼
sentinel auth-pass
-
啟動sentinel命令:
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel
相關問題
- 當redi主機掛了,從機仍然是好的。
- sentinel透過投票確認主機確實掛掉後,從剩下的從機中選擇一個充當redis主機。
- 如果之前掛掉的redis主機重啟回來後,會成為redis從機,因為新的redis主機已經選舉出來了
- 注意:在master-slave切換後,master_redis.conf、slave_redis.conf、sentinel.conf的內容會發生變化,即master_redis.conf中會多一行slaveof配置,sentinel.conf的監控目標會發生變化。
哨兵執行流程
- 三個哨兵一主二從,正常執行中...
- SDown主觀下線(Subjectively Down)
- 主觀不可用指的是單個哨兵檢測到master狀態在傳送ping心跳包後在一定時間內沒有收到合法的回覆,就達到了主觀下線的條件。
- sentinel配置檔案中的down-after-milliseconds設定了判斷主觀下線的時間長度(預設30s)。
- ODown客觀下線(ObjectTively Down)
- 客觀下線是需要多個哨兵一致認為該redis master確實當機了。
- 選舉出哨兵群中的領導者哨兵(用來指定誰是新的redis master)
- 當redis master被判定客觀下線後,各個哨兵會進行協商,先選舉出一個領導者哨兵並由該哨兵節點進行故障遷移。
- 領導者哨兵是如何選舉出來的?----> Raft演算法:先到先得,在一輪選舉中,哨兵A向哨兵B傳送想成為領導者的申請,如果B沒有同意其它哨兵,則會同意A成為領導者。
- 由領導者哨兵開始推動故障切換流程並選舉出一個新的redis master:
- 某個Slave被選舉成為新的redis master。
- 選擇新的master規則:
- 在redis配置檔案中,許可權優先順序最高(數字越小)最優先
- 複製偏移量最大的節點其次優先(相對於當機掉的master,資料的完整性最高)
- 最小Run ID的從節點優先(根據ASCII碼)
- 讓選舉出來的節點執行slaveof no one命令成為新的master節點,並透過slaveof命令讓其他slave節點成為新的master節點的slave
- 當原來當機的master節點重啟後會成為新的master節點的slave並恢復工作。
- 上述的工作均由sentinel自己獨立完成,完全不需要人工的干預。
哨兵選舉原理
當一個主從配置中的master失效後,sentinel可以選舉出一個新的master用於自動接替master工作,主從配置中的其它redis伺服器自動指向新的master伺服器並同步資料。一般建議sentinel是奇數臺,防指某一sentinel無法連線到master導致切換失敗。
哨兵使用建議
- 哨兵的數量應該為多個,哨兵本身就應該叢集,保證高可用性。
- 哨兵節點數量應該是奇數。
- 哨兵節點配置最好都是一致的(硬體配置)
- 哨兵叢集+主從複製並不能保證資料零丟失 --> 引出redis叢集