VIP 不会从备份 keepalived 中删除

Ute*_*rad 3 linux load-balance keepalived

我可能不明白这应该如何工作,但我无法弄清楚为什么带有这个基本 vrrp_instance 的 BACKUP 系统会立即过渡到 master 并且似乎从不尊重优先级。

当两者都健康且在线时,为什么虚拟 IP 地址不会从备份系统中删除?

看起来两个系统都在广播 vrrp 广告。从tcpdump备份系统开始:

betaproxyslc01.fakecorp.com > vrrp.mcast.net: vrrp betaproxyslc01.fakecorp.com > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51 , prio 150 , authtype simple, intvl 1s, length 20, >addrs: virtual-app .fakecorp.com auth "password" 15:52:24.541637 IP (tos 0xc0, ttl 255, id 1611, offset 0, flags [none], proto VRRP (112), length 40)

betaproxyslc02.fakecorp.com > vrrp.mcast.net: vrrp betaproxyslc02.fakecorp.com > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51 , prio 100, authtype simple, intvl 1s, length 20, >addrs: virtual-app .fakecorp.com auth "password" 15:52:25.410073 IP (tos 0xc0, ttl 255, id 1779, offset 0, flags [none], proto VRRP (112), length 40)

但是虚拟 IP 地址通过ip addr命令显示在两台主机上。

这是配置:

global_defs {
   notification_email {
   me@fakecorp.com
   }
   notification_email_from keepalived@betaproxyslc01.fakecorp.com
   smtp_server mysmtpserver.fakecorp.com
   smtp_connect_timeout 30
   router_id BETAPROXYSLC01
}

vrrp_script chk_haproxy{
   script "killall -0 haproxy"
   interval 2 # check every 2 seconds
   weight 2   # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    notify /usr/local/bin/notify.sh
    authentication {
        auth_type PASS
        auth_pass keep0ut!
    }
    virtual_ipaddress {
        10.10.0.40
    }
    track_script{
        chk_haproxy
    }
}
Run Code Online (Sandbox Code Playgroud)

BACKUP服务器的router_id不同,state为BACKUP,priority为100,其他设置相同。

这是在 CentOS 7 上安装,使用 Keepalived v1.2.10 (06/10,2014),Hyper-V 来宾 VM,具有 3.10.0-123.8.1.el7.x86_64 内核。

pru*_*ert 5

路由器之间的 VRRP 通信使用多播 IP 地址 224.0.0.18 [1]和 IP 协议编号 112 [2]

因此,您只需要允许具有这些特定参数的传入和传出流量使 VRRP 正常工作。通常提到的防火墙规则是多余的,并且不必要地广泛制定。

我建议您使用这些防火墙规则:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)

[1] http://tools.ietf.org/html/rfc5798#section-5.1.1.2
[2] http://tools.ietf.org/html/rfc5798#section-5.1.1.4