Keepalived時主備負載均衡器都有VIP的問題:VRRP協議問題

一、企業案例背景

搭建了keepalived 主備集羣,master節點權重100,slave節點權重是80,按照評測的話,master和slave節點都啓動keepalived服務後,虛擬vip正常應該在master節點,slave節點不顯示虛擬vip;當master節點的keepalived服務宕機後,虛擬vip會漂移到slave節點上,繼續提供keepalived服務後服務。

二、異常現象

但是master和slave節點都出現了虛擬vip,這種現象和咱們預估的結果不一樣。但是關閉防火牆後和咱們預估的結果一樣,說明和防火牆有關。

三、分析結論+解決思路
3.1. 分析結論

通過不停的查找問題,我發現,只需要關閉備用負載均衡器的防火牆,那麼主備服務器都有VIP的情況就會得以解決。由此可以肯定,問題就是出現在了防火牆這裏。
首先用tcpdump查看一下vrrp的組播情況,這個隨便在同網絡的任意一臺服務器抓包即可:

tcpdump -i ens33 vrrp -n 

查看下抓包的結果:
在這裏插入圖片描述

由上圖可以看到,192.168.0.114和192.168.0.112兩個IP在輪流發送組播信號。而正常的應該是由MASTER服務器發送組播,如果BACKUP收不到MASTER的組播信號了,那麼判定MASTER宕機了,BACKUP就會接手VIP。

3.2. 解決思路

如果關閉防火牆,keepalived問題解決了,那麼問題就簡單了,我們只需要讓VRRP組播其通過防火牆即可。

四、SElinux 處理
4.1. 查看SElinux的狀態:
getenforce

可能的結果有三個:

Enforcing         #強制開啓

Permissive        #寬容模式

Disabled          #關閉
4.2. 關閉SElinux
#編輯config
sudo vim /etc/selinux/config
#2.把下面2行註釋掉
#SELINUX=enforcing 
#SELINUXTYPE=targeted
#3.添加一行配置
SELINUX=disabled 
:wq!  #保存退出
setenforce 0 #使配置立即生效
五、Firewalld防火牆配置

centos 防火牆有兩種管理方式firewall, iptables兩者不能同時開啓
適用於centos7.x系統

5.1. 開啓vrrp 協議

主備都運行下面的命令

sudo firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0  --protocol vrrp -j ACCEPT
5.2. 重新啓動防火牆
firewall-cmd --reload
5.3. 查看啓動日誌

master節點
在這裏插入圖片描述
slave節點
在這裏插入圖片描述
從上面截圖中可以看出,由於 with higher priority 100, ours 80很明顯114權重比112的權重大,虛擬vip在192.168.0.114上。

5.4. 虛擬ip驗證

master節點
在這裏插入圖片描述
slave節點
在這裏插入圖片描述

5.5. 停止master節點的keepalived

master節點
在這裏插入圖片描述
slave節點
在這裏插入圖片描述

六、Iptables防火牆配置

適用於centos6.x系統
我們只需要在防火牆中增加一條規則即可:

6.1. 配置增加一條防火牆規則
-A INPUT -p vrrp -j ACCEPT
6.2. 防火牆規則注意事項

但是這裏有個坑,默認的防火牆中基本是如下配置:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

添加規則一定不要在

-A INPUT -j REJECT --reject-with icmp-host-prohibited

之後,一定要加在其前面。
在這裏插入圖片描述
這時候重啓防火牆後查看BACKUP的ip,就會發現VIP已經不在了。
再關閉一下MASTER的keepalived,並打開BACKUP的日誌,就可以看到正確的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章