1. 程式人生 > >使用Redis運維監控工具sentinel進行自動故障轉移

使用Redis運維監控工具sentinel進行自動故障轉移

在一個叢集中,我們經常要考慮它的安全,防止主節點發生宕機,當然,這是無法保障的,不可避免,但是,我們可以做好預防措施,比如在一個叢集中,主節點掛掉了,我們要進行迅速轉移,將另一臺從節點切換為主節點從而預防單點故障,那麼,本篇文章將教如何手動進行故障轉移,最後使用自動化工具進行自動故障轉移。

場景需求:有三臺redis伺服器,6379埠的為master,6380,6381埠的為slave,關於如何搭建Redis叢集可以檢視上一篇文章【redis主從複製【master-slave叢集】】,這裡,我麼假設master宕機,需要切換到另一臺slave作為master。

手動進行故障轉移

下面是我們需要做的事情:
執行時更改master-slave,修改一臺slave(設為A)為new master
1)命令該服務不做其他redis服務的slave
命令: slaveof no one
2)修改其readonly為no

其他的slave再指向new master A
1)命令該服務為new master A的slave
命令格式 slaveof IP port

下面我們來動手操作:
首先我們可以使用info replication命令檢視每一臺從節點的狀態,剛開始它們都是6379的從節點,並且master處於up狀態:
這裡寫圖片描述
這裡寫圖片描述

接著,我們使用shutdown命令關閉6379 master來模擬master宕機,怎麼進行手動切換呢?

127.0.0.1:6380> slaveof no one
127.0.0.1:6380> config set slave-read-only no
127.0
.0.1:6381> slaveof localhost 6380

執行上面命令即可切換成功,結果如下圖:
這裡寫圖片描述
這裡寫圖片描述
從上面截圖可以看出master發生故障時我們成功的進行了故障轉移,可是在實際中我們並不能總是進行手動切換,因為手動切換要話費時間這樣資料容易丟失,因此,我們可以使用Redis的運維工具sentinel工具進行自動故障轉移。

使用sentinel進行故障轉移

sentinel的原理圖如下:
這裡寫圖片描述

它的原理是:sentinel時刻與master進行通訊,當在一定時間內收不到master的通訊訊息,就認為master發生了故障,此時它會將一臺slave轉換為master,將另一臺slave的主機指向新的master,sentinel繼續監控新的master與它進行通訊。

原理很簡單,如何使用呢?需要進行配置sentinel.conf檔案:

sentinel monitor def_master 127.0.0.1 6379 1
##master被當前sentinel例項認定為“失效”的間隔時間  
##如果當前sentinel與master直接的通訊中,在指定時間內沒有響應或者響應錯誤程式碼,那麼  
##當前sentinel就認為master失效(SDOWN,“主觀”失效)  
##<mastername> <millseconds>  
##預設為30秒  
sentinel down-after-milliseconds def_master 30000
#預設超過這個時間認為故障轉移失敗,需要人工進行故障轉移  
sentinel failover-timeout mymaster 180000
##當前sentinel例項是否允許實施“failover”(故障轉移)  
##no表示當前sentinel為“觀察者”(只參與"投票".不參與實施failover),  
##全域性中至少有一個為yes  
sentinel can-failover def_master yes
#一次性修改幾個slave指向新的new master,這個引數防止當master宕機後,多個sentinel同時
#一下子指向new master致使new master負載過重
sentinel parallel-syncs mymaster 1 

添加了上面的配置後,就可以啟動sentinel了:
如果不知道如何啟動,首先可以使用help命令檢視:
這裡寫圖片描述
使用下面命令啟動sentinel:

redis-server /myredis/sentinel.conf --sentinel

這裡寫圖片描述
如上圖所示,啟動sentinel之後,它會監控到master有兩個slave正在執行,現在我們shutdown使master宕機看看sentinel的變化:
這裡寫圖片描述
這裡寫圖片描述

從上面的截圖可以看出來sentinel監控到master發生故障,自動進行了故障轉移,不過它是根據slave的優先順序來決定那一臺slave來作為maste的,我們可以設定優先順序來指定,引數的值越小代表優先順序越高。

至此,我們已經知道如何自動進行故障轉移以及使用sentinel工具進行自動故障轉移。如有轉發,請標明原文地址,謝謝!!!