20多个虚拟地址的Keepalived

cva*_*mar 12 networking linux ip high-availability keepalived

我已经在两台 Debian 机器上设置了 keepalived 以实现高可用性,但是我遇到了可以分配给我的vrrp_instance. 我将如何配置和故障超过 20 个虚拟 IP?

这是非常简单的设置:

LB01: 10.200.85.1
LB02: 10.200.85.2
Virtual IPs: 10.200.85.100 -  10.200.85.200
Run Code Online (Sandbox Code Playgroud)

每台机器还在虚拟 IP 上运行 Apache(后来的 Nginx)绑定,用于 SSL 客户端证书终止和代理到后端网络服务器。我需要这么多 VIP 的原因是无法在 HTTPS 上使用 VirtualHost。

这是我的 keepalived.conf:

vrrp_script chk_apache2 {
        script "killall -0 apache2"
        interval 2
        weight 2
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101
        virtual_ipaddress {
            10.200.85.100
            .
            . all the way to
            .
            10.200.85.200
}
Run Code Online (Sandbox Code Playgroud)

BACKUP 机器上有一个相同的配置,它工作正常,但只能达到第 20 个 IP。

我找到了一个HOWTO讨论这个问题。基本上,他们建议只有一个 VIP 并“通过”这个 IP 路由所有流量,“一切都会好起来的”。这是一个好方法吗?我在机器前面运行 pfSense 防火墙。

引自上述链接:

ip route add $VNET/N via $VIP

or

route add $VNET netmask w.x.y.z gw $VIP
Run Code Online (Sandbox Code Playgroud)

提前致谢。

编辑:

@David Schwartz 说添加路由是有意义的,所以我尝试向 pfSense 防火墙添加静态路由,但这并没有像我预期的那样工作。

pfSense 路线:

Interface:            LAN
Destination network:  10.200.85.200/32 (virtual IP)
Gateway:              10.200.85.100    (floating virtual IP)
Description:          Route to VIP .100
Run Code Online (Sandbox Code Playgroud)

我还确保在我的主机上启用了数据包转发:

$ cat /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1
Run Code Online (Sandbox Code Playgroud)

我这样做错了吗?我还从 keepalived.conf 中删除了所有 VIP,因此它只会在 10.200.85.100 上失败。

小智 14

在不改变当前架构的情况下,最简单的解决方案是使用virtual_ipaddress_excluded。例如

vrrp_instance VI_1 {
    interface eth0
    state MASTER
    virtual_router_id 51
    priority 101

    virtual_ipaddress {
        10.200.85.100
    }

    virtual_ipaddress_excluded {
        10.200.85.101
        . all the way to
        10.200.85.200
    }
}
Run Code Online (Sandbox Code Playgroud)

virtual_ipaddress_excluded包含 keepalived 将在服务器上启动和关闭的 IP 地址列表,但是它们不包含在 VRRP 数据包本身中,因此它们不计入 20 个 IP 地址限制。

在我的配置中,我喜欢专门为virtual_ipaddress分配一个 IP 。即包含在 VRRP 数据包中并将其他所有内容放在virtual_ipaddress_excluded中的那个。这是一个好主意,因为您不想仅仅因为客户离开就必须更改主 IP。