Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题

文章目录

          • 一、企业案例背景
          • 二、异常现象
          • 三、分析结论+解决思路
            • 3.1. 分析结论
            • 3.2. 解决思路
          • 四、SElinux 处理
            • 4.1. 查看SElinux的状态:
            • 4.2. 关闭SElinux
          • 五、Firewalld防火墙配置
            • 5.1. 开启vrrp 协议
            • 5.2. 重新启动防火墙
            • 5.3. 查看启动日志
            • 5.4. 虚拟ip验证
            • 5.5. 停止master节点的keepalived
          • 六、Iptables防火墙配置
            • 6.1. 配置增加一条防火墙规则
            • 6.2. 防火墙规则注意事项

一、企业案例背景

搭建了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 

查看下抓包的结果:
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第1张图片

由上图可以看到,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节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第2张图片
slave节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第3张图片
从上面截图中可以看出,由于 with higher priority 100, ours 80很明显114权重比112的权重大,虚拟vip在192.168.0.114上。

5.4. 虚拟ip验证

master节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第4张图片
slave节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第5张图片

5.5. 停止master节点的keepalived

master节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第6张图片
slave节点
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第7张图片

六、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

之后,一定要加在其前面。
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题_第8张图片
这时候重启防火墙后查看BACKUP的ip,就会发现VIP已经不在了。
再关闭一下MASTER的keepalived,并打开BACKUP的日志,就可以看到正确的内容

你可能感兴趣的:(Centos7)