一 . 遇到的问题

1. vip 一直在主上, 不会飘到备上
查看keepalived的配置 keepalived.conf

注意点:
① router_id 主备要一样
② virtual_router_id 主备必须一样
③ priority 主备要不一样
④ weight 主备必须不一样

router_id局域网内唯一,主备机不同;virtual_router_id主备机配置一致;priority主机高于备份机; virtual_ipaddress主备机一致

keepalived相关参数

# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
	## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
	router_id liuyazhuang133 ## 标识本节点的字条串,通常为 hostname
} 
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
	interval 2 ## 检测时间间隔
	weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
	state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
	interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
	virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
	mcast_src_ip 192.168.50.133 ## 本机 IP 地址
	priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
	nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
	advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
	## 设置验证信息,两个节点必须一致
	authentication {
		auth_type PASS
		auth_pass 1111 ## 真实生产,按需求对应该过来
	}
	## 将 track_script 块加入 instance 配置块
	track_script {
		chk_nginx ## 执行 Nginx 监控的服务
	} #
	# 虚拟 IP 池, 两个节点设置必须一样
	virtual_ipaddress {
		192.168.50.130 ## 虚拟 ip,可以定义多个
	}
}

注意:对于virtual_router_id

对于一个主机里的keepalived配置

两个网卡不在一个vlan,virtual_router_id可以一样
反之,两个网卡在一个vlan 上,则virtual_router_id 一定要不一样
如果1个网卡上有多个ip, 也不能一样

如图:
在这里插入图片描述
在这里插入图片描述

2 . 主上有VIP,飘不到备上
大概率是keepalived相关参数 主备两台参数问题(不一致或者一致)

实际环境中出错情况:
(1).keepalived 报错WARNING - default user ‘keepalived_script‘ for script execution does not exist - please

解决办法:
在配置文件中添加运行健康检查脚本的用户或者组

global_defs {
#添加以下参数即可
script_user root
enable_script_security
}

(2). tcpdump: Couldn't find user 'tcpdump'

解决方法
网上找到的答案清一色的chattr -i /etc/passwd,然后卸载重装。

其实可以直接vim /etc/passwd加入以下一行:

tcpdump:x:72:72::/:/sbin/nologin

UID 72存在,就使用 1~499 范围内的其他数字。

3 . 两台主备上 都有VIP

网络和配置环境:

1、自带防火墙和iptables均已关闭

2、selinux已关闭

3、vmware虚拟机网络连接方式:NAT

4、virtual_router_id主备都确保一致

5、检查nginx状态的track_script中用到的killall命令已安装,且权限是755

6、内核ipv4转发已开启 net.ipv4.ip_forward = 1

通过抓包查找解决问题

42 是主 44 是备

理论上来说,主机处于活跃状态的时候,备份机收到报文之后是不会发送组播消息的,正常的应该是由MASTER服务器发送组播,如果BACKUP收不到MASTER的组播信号了,那么判定MASTER宕机了,BACKUP就会接手VIP。如下图 :是正常的,只有主机发消息, 相应的备份机也一样,只有备份机在发消息
在这里插入图片描述
理论上备节点如果收到主节点的通告,通告中优先级高于自己,就不会主动对外发送通告;

确定主备是否有问题的方法
1. 抓包时, 在备份机上需要看见主机的包,也就是备份机要收到主机的包,会对比包上的权重
2. 查看 主备机 能否收到 vrrp协议的包 采用src 对端ip的方式 组播 没有目的地址

ebdump -i eth1 vrrp  -n  and src 172.29.228.44

eth1 是主上的网卡 eth0是备上的网卡

如图: 表示 主42的网卡 eth1 收不到对端IP 备44 发的消息

在这里插入图片描述
备也同理 可查看

 ebdump -i eth0 vrrp  -n  and src 172.29.228.42

通过抓包分析出 , 备没有收到主的 组播,导致自动升级成主,产生两个主,然后查看虚拟层的安全组设置中vrrp协议的规则是否生效, 发现虚拟层虽然配置了vrrp协议的规则,但并未生效。
于是在虚拟层后台手动将指定的网卡取消安全组(也就是将主的eth1和备的eth0 vrrp协议通信网卡 的安全组关掉)

openstack port set --disable-port-security --no-security-group portID

在配置正确情况下 如图所示:

在备上
在这里插入图片描述

遇到这种情况也可以采取查看keepalived 日志的方式
一般日志在 /var/log/messages 或者 /var/log/message

如果主备上都有vip , 一般原因是:
查看BACKUP日志发现根本没有receive advertisement之类的收到VRRP的日志,启动之后的日志产生了之后就再也没有收发VRRP的日志了,由于BACKUP已经变成了MASTER,BACKUP也会向MASTER发送组播,但看了下MASTER的日志也没有任何消息。

分析:BACKUP启动时收不到MASTER的VRRP组播,自动升级成MASTER,产生两个MASTER,查看BACKUP日志也没有任何收到VRRP组播的日志,由于两台机的网卡是可以收到VRRP包的,但不知道是不是CentOS系统没放行VRRP,但自带防火墙和iptables都已经关闭了,大部分情况是 安全组规则没生效 或者 centos有问题

设置keepalived的自启动

keepalived 服务开机自启动

systemctl enable keepalived.service

systemctl disable keepalived.service 取消开机自动启动
systemctl start keepalived.service 启动
systemctl stop keepalived.service停止

systemctl status keepalived.service  

在这里插入图片描述
keepalived启动后默认去这个(/etc/keepalived/keepalived.conf)位置读取配置文件,除非另行制定,需要将安装文件下带的配置文件拷贝过去。

创建keepalived.service文件

编辑

 vim /usr/lib/systemd/system/keepalived.service
[Unit]
Description=Keepalived
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
ExecStart=/home/wangpl/mine/soft/keepalived-1.2.2/sbin/keepalived -D
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
PIDFile=/var/run/keepalived.pid 这个路径是keepalived默认存放pid的位置。
<pre name="code" class="java">ExecStart=/home/wangpl/mine/soft/keepalived-1.2.2/sbin/keepalived  这个是keepalived的启动文件  -D的意思是 输出详细日志

实例:
在这里插入图片描述

关于tcpdump的用法:

ebdump -i eth1 vrrp -n  host 172.29.228.42 and 172.29.228.44
ebdump -i eth0 host 224.0.0.18 and \( 172.29.228.42 or 172.29.228.44 \)
ebdump -i eth0  -n '((vrrp) and (src host 172.29.228.44))'
ebdump -i \( eth1 or eth0 \)  -n host 172.29.228.42 and  172.29.228.44
ebdump -i eth1 or eth0  -n host 172.29.228.42 and  172.29.228.44
ebdump -i eth1 and eth0  -n host 172.29.228.42 and  172.29.228.44
ebdump -i eth0 dst vrrp host 172.29.228.42 
ebdump -i eth1 vrrp  -n  and dst host 172.29.228.42
ebdump -i eth1 vrrp  -n  and src 172.29.228.42
ebdump -i eth0 -n host 172.29.228.44
ebdump -i et01 vrrp -n
ebdump -i eth0 vrrp  -n  and src 172.29.228.42
ebdump -i eth0 dst host 172.29.228.42

解决相关问题的方法:

Keepalived两节点出现双VIP情况及解决方法

主备均有VIP问题的分析

主备机同时绑定vip的解决方法

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

Keepalived两节点出现双VIP情况及解决方法

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐