keepalived主备节点都配置vip,vip切换异常案例分析
原文地址: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切换异常案例分析的更多相关文章
- haproxy+keepalived主备与双主模式配置
Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...
- Keepalived 主备配置
keepalived主备或多主多备,配置都是一样配置方法,只是搭建多少的问题. 1.keepalived安装 参考:https://www.cnblogs.com/zwcry/p/9542867.ht ...
- DataGuard---->主库和备库都配置 db_file_name_convert和log_file_name_convert的作用
一.参数说明 [1] db_file_name_convert db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐 ...
- Nginx+Keepalived主备切换(包含nginx服务停止)
原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...
- Nginx+Keepalived 主备高可用 安装与配置
环境说明:操作系统:CentOS6.7 x86_64Nginx版本:nginx-1.9.7Keepalived版本:keepalived-1.2.24 主nginx + Keepalived :10. ...
- KeepAlived主备/主主模型高可用Nginx
部署准备: 两台CentOS 7主机HA1和HA2 CentOS 7 基于rpm包安装Nginx: 由于Base源中没有Nginx,所以要安装EPEL源,命令如下: wget http://dl.fe ...
- KeepAlived主备模型高可用LVS
部署前准备: 1.至少4台主机:两个Director(HA1,HA2),两个Real Server(RS1,RS2) 2.Director之间时间必须同步,且关闭各主机的防火墙和Selinux 3.出 ...
- DG_Oracle DataGuard Primary/Standby物理主备节点安装实践(案例)
2014-09-09 Created By BaoXinjian
- keepalived主备切换后的arp问题【转】
使用keepalived的时候主机挂了,备机显示绑定了VIP.但是此时实际还是不能访问.其实就是网关的arp缓存没有刷新. 在服务器上执行一下就行了 arping -I eth0 -c 5 -s ...
随机推荐
- mysql之commit,transaction事物控制
简单来说,transaction就是用来恢复为以前的数据. 举个例子,我想把今天输入到数据库里的数据在晚上的时候全部删除,那么我们就可以在今天早上的时候开始transaction事物,令autocom ...
- MySQL Profiling--常用命令
##=====================================## ## 查看PROFILING是否开启 SELECT @@profiling ## 开始会话级别PROFILING # ...
- php-cgi和php-fpm,Windows环境下解决Nginx+php并发访问阻塞问题。
php-cgi 是运行php,php-fpm是守护php-cgi进程 nginx配置目录运行php location ~ \.php$ { ...
- FastAdmin 后台前端后端组件说明(待续)
FastAdmin 后台 后端 ThinkPHP 5 fastadmin-addons 待续…… 前端 Bootstrap AdminLTE 二次开发 RequireJS JS 模块管理 Less 样 ...
- python之路---07 join() fromkeys() 深浅拷贝
二十四.基本数据类型补充 1.join() "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. ...
- docker for mac 安装 kubernetes、kubernetes dashboard
安装参考地址(按照此文档,安装成功):https://yq.aliyun.com/articles/508460 官方说明:https://kubernetes.io/docs/tasks/acces ...
- docker 学习资料
docker 学习资料 学习资料 网址 Docker 教程(菜鸟教程) http://www.runoob.com/docker/docker-tutorial.html
- 使用kolla安装的openstack mariadb为集群所有节点无法启动
当在做测试时,把所有的openstack节点都关机,再开启做测试时,发现mariadb galera集群启不来,相当于所有的mariadb集群都停止了(跟所有节点断电情况相似),这时候怎么办呢,重新建 ...
- leftJoin鏈錶查詢
//待使用券碼 $code_record_no = DB::table('fook_platform_order as a') ->select('o.code','o.apportion_bi ...
- Qt中的主窗口之菜单栏
1.Qt中的主窗口 主窗口为建立应用程序用户界面提供了一个框架 Qt开发平台中直接支持主窗口的概念 QMainWindow是Qt中主窗口的基类 QMainWindow继承于QWidget是一种容器类型 ...
