原文地址:http://blog.51cto.com/13599730/2161622

参考地址:https://blog.csdn.net/qq_14940627/article/details/79998931     防火墙没有放行keepalived的vrrp协议。

如何放行vrrp:https://www.cnblogs.com/ralphdc/p/7113491.html

https://www.aliyun.com/jiaocheng/137678.html

本人最后将selinux和防火墙关闭了之后,keepalived就不存在两个master了。

keepalived主备节点都配置vip,vip切换异常案例分析

故障现象:

主机名 director-A director-B
IP 192.168.14.128 192.168.14.131
默认主备 MASTER BACKUP 
优先级 90 80

VIP为 192.168.14.201

先启动主节点keepalived服务,后启动备节点keepalived,发现主备节点都配置了vip。

分析与解决过程:

理应主节点启动keepalived后发送vrrp广播报文,备节点启动keepalived后因为配置同一个广播域,能收到vrrp广播报文,从而运行在BACKUP状态,一直监听着MASTER发送的vrrp广播。

首先检查BACKUP节点message日志,发现keepalived先进入BACKUP状态(根据keepalived.conf配置,正常行为),但间隔4s后vrrp实例切换为MASTER状态,这行为不符合正常逻辑。

而备vrrp实例切换为MASTER的原因通常是一定时间内没有收到MASTER节点发出的vrrp广播报文,因此在备节点物理网卡上tcpdump抓包可见,主节点192.168.14.128发出的vrrp广播报文已经到达备节点。这种情况下,keepalived仍认为主节点是down,很可能是OS对物理网卡收到的vrrp广播报文并未送进内核,keepalived进程无法从捕获主节点发出的vrrp报文。

因此要检查Linux防火墙Selinux和iptables规则

[root@director-B keepalived]# getenforce
Enforcing
#说明selinux也是开着,由于其安全设置级别较强,使用不当容易影响正常业务,一般建议关闭selinux。
#SELinux共有3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)
[root@director-B keepalived]# vim /etc/selinux/config
SELINUX=disabled #将该配置改为disabled,保存退出后reboot
 

跟踪iptables规则发现,默认的iptables规则仅允许22端口和icmp报文通过

[root@director-A ~]# iptables -vnL INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
471 44874 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
192 14016 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
19 1456 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
19 1456 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
19 1456 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
18 1404 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited ##默认拒绝所有报文,并告知访问者主机已被限制
[root@director-B ~]# iptables -vnL INPUT_direct
Chain INPUT_direct (1 references)
pkts bytes target prot opt in out source destination
[root@director-B ~]# iptables -vnL INPUT_ZONES_SOURCE
Chain INPUT_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
[root@director-B ~]# iptables -vnL INPUT_ZONES
Chain INPUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
55 4210 IN_public all -- ens33 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 IN_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]
[root@director-B ~]# iptables -vnL IN_public
Chain IN_public (2 references)
pkts bytes target prot opt in out source destination
28 2158 IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
28 2158 IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
28 2158 IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 ######允许ICMP报文访问
[root@director-B ~]# iptables -vnL IN_public_log
Chain IN_public_log (1 references)
pkts bytes target prot opt in out source destination
[root@director-B ~]# iptables -vnL IN_public_deny
Chain IN_public_deny (1 references)
pkts bytes target prot opt in out source destination
[root@director-B ~]# iptables -vnL IN_public_allow
Chain IN_public_allow (1 references)
pkts bytes target prot opt in out source destination
1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW ######允许ssh报文访问
 

尝试通过另一个客户端192.168.14.129访问备节点80端口,在客户端就能抓包icmp 通知报文。

此iptables链表结构为系统默认配置,该链结构太过复杂,且多有iptables链为空链。因此将多余的iptables规则清理掉,多余的iptables链删除,允许所有报文通过即可。

[root@director-B ~]# iptables -F #删除所有iptables规则
 
[root@director-B ~]# iptables -X #删除除默认链之外的所有iptables链
 

此时问题已解决,keepalived只有MASTER节点配置vip,且主备节点之间切换vip正常。

不过vip切换的问题虽然解决了,但iptables的遗留问题是在配置文件/etc/sysconfig/iptables中并未配置以上复杂的iptables规则,且重启系统之后,也仍然会生成以上复杂的iptables规则。修改了/etc/sysconfig/iptables-config配置也在重启系统后被复原。定是那系统启动脚本搞得鬼,还得继续排查。

原文转载至:

http://blog.51cto.com/13599730/2161622

keepalived主备节点都配置vip,vip切换异常案例分析的更多相关文章

  1. haproxy+keepalived主备与双主模式配置

    Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...

  2. Keepalived 主备配置

    keepalived主备或多主多备,配置都是一样配置方法,只是搭建多少的问题. 1.keepalived安装 参考:https://www.cnblogs.com/zwcry/p/9542867.ht ...

  3. DataGuard---->主库和备库都配置 db_file_name_convert和log_file_name_convert的作用

    一.参数说明 [1] db_file_name_convert db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐 ...

  4. Nginx+Keepalived主备切换(包含nginx服务停止)

    原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...

  5. Nginx+Keepalived 主备高可用 安装与配置

    环境说明:操作系统:CentOS6.7 x86_64Nginx版本:nginx-1.9.7Keepalived版本:keepalived-1.2.24 主nginx + Keepalived :10. ...

  6. KeepAlived主备/主主模型高可用Nginx

    部署准备: 两台CentOS 7主机HA1和HA2 CentOS 7 基于rpm包安装Nginx: 由于Base源中没有Nginx,所以要安装EPEL源,命令如下: wget http://dl.fe ...

  7. KeepAlived主备模型高可用LVS

    部署前准备: 1.至少4台主机:两个Director(HA1,HA2),两个Real Server(RS1,RS2) 2.Director之间时间必须同步,且关闭各主机的防火墙和Selinux 3.出 ...

  8. DG_Oracle DataGuard Primary/Standby物理主备节点安装实践(案例)

    2014-09-09 Created By BaoXinjian

  9. keepalived主备切换后的arp问题【转】

    使用keepalived的时候主机挂了,备机显示绑定了VIP.但是此时实际还是不能访问.其实就是网关的arp缓存没有刷新.   在服务器上执行一下就行了 arping -I eth0 -c 5 -s ...

随机推荐

  1. day16 Hbase day17

    这个HBase学习了第二遍也不是太透彻PS:启动Hbase之前先启动Zookeeper.HDFS.yarn 1. hbase简介(是基于HDFS.相当于是一个缓存层) 1.1. 什么是hbase(列式 ...

  2. RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点.常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式 ...

  3. php 页面调转导致session丢失解决方法

    例如在a页面设置了会话,然后打印会话值,可以成功打印,但是调转到b页面后,会话丢失了. 原因有不少,一个原因就是没有在页面开头加入session_start();当然你也可以直接配置php.ini文件 ...

  4. csvn使用入门

    在前面我们已经配置好了csvn服务器,直达链接http://blog.csdn.net/qq_34829953/article/details/78285647 现在我们在win10环境下使用我们搭建 ...

  5. 关于C# winform怎么调用webapi来获取到json数据

    C/S系统也可以和B/S系统一样实现“前后端分离”,那这样写winform就相当于纯粹的前端页面了,然后再单独部署一个webapi项目,通过api调用数据库进行数据的操作,有利于维护和数据安全性的提高 ...

  6. python核心类库:urllib使用详解

    python版本:2.7.15 1.简单用法urllib.urlopen() 语法:urllib.urlopen(url[, data[, proxies]]) :打开一个url的方法,返回一个文件对 ...

  7. MatConvNet中关于vl_simplenn_display的一些分析

    一.关于各层data size的分析 layer1:  floor((224-7)/2)+1=109 这里7是filter大小,2是stride layer4: floor((109+0+1-3)/2 ...

  8. Spring Cloud Eureka 服务治理

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  9. 免费SMTP邮件服务:Mandrill,Sendgrid,Mailjet,Postmarkapp,MailChimp

    免费的SMTP发邮件服务平常几乎都没有怎么关注,Wordpress发邮件几乎用普通的邮箱的SMTP服务就可以完成任务,但是自从用了Discourse.Ghost博客后,发现找到一个合适的.免费配额大的 ...

  10. golang里处理xml文件 转自https://studygolang.com/articles/5328

    <?xml version="1.0" encoding="utf-8"?> <servers version="1"&g ...