1. 程式人生 > >Keepalived詳解(五)

Keepalived詳解(五)

兩節點 監控mysql 需要 mysql sql weight 關閉 20px 依然

一.Keepalived集群中MASTER和BACKUP角色選舉策略

在keepalived集群中,其實並沒有嚴格意義上的主、備節點,雖然可以在keepalived配置文件中設置state選項為MASTER狀態,但是這並不意味著此節點一直就是MASTER角色。控制節點角色的是keepalived配置文件中的priority值,但它並不控制所有節點的角色,另一個能改變節點角色的是在vrrp_script模塊中設置的weight值,這兩個選項對應的都是一個整數值,其中weight值可以是個負整數,一個節點在集群中的角色就是通過這兩個值的大小決定的。

在一個一主多備的Keepalived集群中,priority值最大的將成為集群中的MASTER節點,而其他都是BACKUP節點。在MASTER節點發生故障後,BACKUP節點之間將進行“民主選舉”,通過對節點優先級值priority和weight的計算,選出新的MASTER節點接管集群服務。

在vrrp_script模塊中,如果不設置weight選項值,那麽集群優先級的選擇將由Keepalived配置文件中的priority值決定,而在需要對集群中優先級進行靈活控制時,可以通過在vrrp_script模塊中設置weight值來實現。下面舉例說明:

假定由A和B兩個節點組成的Keepalived集群,在A節點keepalived.conf文件中,設置priority值為100,而在B節點keepalived.conf文件中,設置priority值為80,並且A、B兩個節點都使用了vrrp_script模塊來監控MySQL服務,同時都設置weight值為10,那麽將會發生如下情況。

在兩節點都啟動Keepalived服務後,正常情況是A節點將成為集群中的MASTER節點,而B自動成為BACKUP節點,此時將A節點的MySQL服務關閉,通過查看日誌發現,並沒有出現B節點接管A節點的日誌,B節點仍然處於BACKUP狀態,而A節點依舊處於MASTER狀態,在這種情況下整個HA集群將失去意義。

下面分析產生這種情況的原因。這也就是Keepalived集群中主、備角色選舉策略的問題。下面總結在keepalived中使用vrrp_script模塊時整個集群角色的選舉算法,由於weight值可以是正數也可以是負數,因此,要分兩種情況說明:

1.weight值為正數時:


在vrrp_script中指定的腳本如果檢測成功,那麽MASTER節點的權值將是weight值與priority值之和;如果腳本檢測失效,那麽MASTER節點的權值保持為priority值,因此切換策略為:

◇MASTER 節點vrrp_script腳本檢測失敗時,如果MASTER節點priority值小於BACKUP節點weight值與priority值之和,將發生主、備切換。

◆MASTER節點vrrp_script腳本檢測成功時,如果MASTER節點weight值與priority值之和大於BACKUP節點weight值與priority值之和,主節點依然為主節點,不發生切換。

Keepalived詳解(五)