我无法 ping 通 keepalived 的虚拟 IP。我检查后发现 keepalived 没有发送 ARP 请求或回复。
在我的配置中,我有 2 台服务器,在 Ubuntu 20.04 上运行,并安装有 keepalived(2.0.19):
controller1 : 192.168.2.14/24 和 controller2 : 192.168.2.15/24。在 eno2 接口上的两个服务器上都配置了 IP。目标是在同一个物理接口上配置虚拟 IP 192.168.2.100/24。
这是我在 controller1 ( master ) 上的 keepalived 配置
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check if haproxy service is running
interval 2 # check every 2 seconds
weight 15 # add 15 points of priority if OK
}
vrrp_instance OS {
interface eno2
state MASTER
virtual_router_id 1
priority 100 # 100 on master, 90 on slave
advert_int 1
# minimum time interval for refreshing gratuitous ARPs while MASTER
vrrp_garp_master_refresh 2
vrrp_garp_master_refresh_repeat 2
strict_mode off
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_skip_check_adv_addr
# use_vmac
# vmac_xmit_base # Transmit VRRP adverts over physical interface
unicast_src_ip 192.168.2.14 # ip of the instance
unicast_peer {
192.168.2.15 # ip of other instances, add more ip as necessary
}
authentication {
auth_type PASS
auth_pass keepaliveOS
}
virtual_ipaddress {
198.168.2.100/24 dev eno2
}
track_script {
chk_haproxy
}
}
这是我在 controller2 上的配置
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check if haproxy service is running
interval 2 # check every 2 seconds
weight 15 # add 15 points of priority if OK
}
vrrp_instance OS {
interface eno2
state BACKUP
virtual_router_id 1
priority 90 # 100 on master, 90 on slave
advert_int 1
# minimum time interval for refreshing gratuitous ARPs while MASTER
vrrp_garp_master_refresh 2
vrrp_garp_master_refresh_repeat 2
strict_mode off
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_skip_check_adv_addr
unicast_src_ip 192.168.2.15 # ip of the instance
unicast_peer {
192.168.2.14 # ip of other instances, add more ip as necessary
}
authentication {
auth_type PASS
auth_pass keepaliveOS
}
virtual_ipaddress {
198.168.2.100/24
}
track_script {
chk_haproxy
}
}
- 两台服务器能够交换 VRRP 广告包并成为主服务器和从服务器。
- 如果在 eno2 上手动配置了 VIP 地址,我们就可以 ping 通它。
sysctl net.ipv4.ip_nonlocal_bind=1
并sysctl net.ipv4.ip_forward=1
已完成设置。- 但是当通过 keepalive 配置虚拟 IP 时,无法从网络中的任何服务器(包括 MASTER)对其进行 ping。运行
tcpdump -i eno2 arp
不会显示来自 MASTER 或 SLAVE 节点的任何 ARP 回复。
可能存在什么问题
答案1
您是否专门允许 VRRP 协议的流量?
虚拟路由器内的物理路由器必须使用多播 IP 地址为 224.0.0.18 且 IP 协议号为 112 的数据包在其内部进行通信。
(摘自维基百科:https://en.wikipedia.org/wiki/Virtual_Router_Redundancy_Protocol)
我们遇到了类似的问题,当我们允许具有 KeepaLiveD 服务的节点之间的 VRRP(协议编号 112)流量时,该问题得到了解决。