成航先森 成航先森

成都航院计算机系一个学生的个人博客

 

经验杂笔

分段图

最新文章

经验杂笔
当前位置: 首页 » 大学杂谈 » 经验杂笔 » LVS+Keepalived时主备负载均衡器都有VIP的问题

LVS+Keepalived时主备负载均衡器都有VIP的问题

编辑:狂族晨曦 来源:经验杂笔 日期:2016-08-30 阅读: 3,335 次 8 条评论 » 百度已收录

先森在模拟搭建LVS+Keepalived的环境,LVS是做负载均衡的,Keepalived是做高可用的。在搭建好之后,先森遇到了一个奇怪的问题,两个负载均衡器MASTER和BACKUP都抢占到了VIP。不过还好的是,实际上同一时间内只有一个VIP在起作用。下面就来谈谈先森的解决过程。

解决过程

通过不停的查找问题,我发现,只需要关闭备用负载均衡器的防火墙,那么主备服务器都有VIP的情况就会得以解决。由此可以肯定,问题就是出现在了防火墙这里。

首先用tcpdump查看一下vrrp的组播情况,这个随便在同网络的任意一台服务器抓包即可:

tcpdump vrrp -n    # -n:不把主机的网络地址转换成名字

查看下抓包的结果:

QQ图片20160830121808.png -1

tcpdump抓包

由上图可以看到,192.168.2.79和192.168.2.53两个IP在轮流发送组播信号。而正常的应该是由MASTER服务器发送组播,如果BACKUP收不到MASTER的组播信号了,那么判定MASTER宕机了,BACKUP就会接手VIP。


2016年12月01日更新

SElinux

首先,先确定服务器的SElinux是否设置为关闭。一般都是将其关闭的,在CentOS先森尝试了启用,但是也没有firewall-cmd这个命令,无法添加端口,所以还是将其关闭吧。

查看SElinux的状态:

getenforce

可能的结果有三个:

Enforcing         #强制开启
Permissive        #宽容模式
Disabled          #关闭

如果是Enforcing强制模式,就需要关闭:

setenforce 0    #设置为宽容模式

但这样只在本次生效,重启服务器后将失效。如果要永久关闭,还需要修改配置文件:

sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinux

iptables防火墙

如果将SElinux关闭问题依旧存在,则可能是防火墙将MASTER的VRRP组播给挡住了。首先将防火墙关闭,确定防火墙是否为罪魁祸首。

service iptables stop

如果关闭防火墙,keepalived问题解决了,那么问题就简单了,我们只需要让VRRP组播其通过防火墙即可。

我们只需要在防火墙中增加一条规则即可:

-A INPUT -p vrrp -j ACCEPT

但是这里有个坑,默认的防火墙中基本是如下配置:

# 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

之后,一定要加在其前面。

QQ图片20160830122443.png -2

防火墙配置

这时候重启防火墙后查看BACKUP的ip,就会发现VIP已经不在了。

再关闭一下MASTER的keepalived,并打开BACKUP的日志,就可以看到正确的内容:

tail -f /var/log/messages

QQ图片20160830122539.png -3

Keepalived切换VIP

总结

如果不是防火墙的原因,那么久应该仔细查看配置文件中的vrrp_sync_group中设置的VRRP组等设置是否相同,当然还有其他的可能性,但大多都是VRRP组播信号的问题。

在解决问题的过程中,排除法无疑是最简单粗暴定位问题的方法,要灵活运用。

Keepalived是个很好玩也很好用的软件,建议朋友们多研究研究。

历史上的今天:

标签:
除特别注明外,本站所有文章均为成航先森 www.capjsj.cn原创,本文共1841个字
转载请注明出处来自http://www.capjsj.cn/keepalived_vip.html
已有 8 位"计工"发布了激烈的评论,还有N多人围观笑而不语评论
狂族晨曦的头像
欢迎发表评论
取消评论

表情
疑问调皮伤心抠鼻黑线微笑可爱奸笑震惊吓到了撇嘴大兵忍不住笑笑狂骂狂怒噢?鼓掌酷⊙﹏⊙b汗鄙视大哭嘿嘿

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. Koolight的头像

    土豪的玩具,屌丝只有绕道了。

    2016-08-31 09:34 回复
  2. 小事儿的头像

    又是一个后援团成员,我也是做运维 到时候遇到问题了一块解决哈!

    2016-08-31 20:19 回复
  3. 深圳SEO的头像

    深圳SEO到此一游

    2016-09-01 11:11 回复
  4. 管家婆的头像

    学习了

    2016-09-01 11:23 回复
  5. 瑶的头像
    瑶:

    service iptables stop防火墙直接关了,tcpdump vrrp -n 两台服务器只打印自己广播的数据,对方服务器都没收到对方广播信息,为啥?

    2016-12-01 10:53 回复
    • 博主的Gravatar 头像

      @瑶: 你看看你的SElinux是不是没有关闭?getenforce查看,如果没关,用setenforce 0关闭。

      2016-12-01 11:21 回复
      • 瑶的头像
        瑶:

        @狂族晨曦: 关了还是不行,我的环境是,一台实体机上部署了两台虚拟机,keepalived分别不是在这两台虚拟机上,分别启动keepalived,tcpdump vrrp 查看vrrp组播包,双方都没收到对方发来的组播包,配置也看了一个虚拟路由id,两台虚拟机互相ping也通,就是vrrp组播包收不到对方的?

        2016-12-02 09:50 回复
        • 博主的Gravatar 头像

          @瑶: 再确定下,网卡接口是不是同一个?比如eth 0,接口绑定的IP是同网段的。然后,再次确定路由id相同,如果确定还是相同的话,试着改成其它id(默认51),比如都改成60。很明显,你这个是vrrp方面出了问题。

          2016-12-04 22:19 回复
官方微信
发表评论 返回顶部