Keepalived 超过 20 个虚拟地址

Keepalived 超过 20 个虚拟地址

我已经在两台 Debian 机器上设置了 keepalived 以实现高可用性,但我已经达到了可以分配给我的 的最大虚拟 IP 数量vrrp_instance。我该如何配置和故障处理 20 多个虚拟 IP?

这是非常简单的设置:

LB01: 10.200.85.1
LB02: 10.200.85.2
Virtual IPs: 10.200.85.100 -  10.200.85.200

每台机器还运行 Apache(后来是 Nginx)绑定在虚拟 IP 上,用于 SSL 客户端证书终止和代理到后端 Web 服务器。我需要这么多 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
}

备份机上有相同的配置,并且运行良好,但仅限于第 20 个 IP。

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

引用上述链接:

ip route add $VNET/N via $VIP

or

route add $VNET netmask w.x.y.z gw $VIP

提前致谢。

编辑:

@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

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

$ cat /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1

我做错了吗?我还从 keepalived.conf 中删除了所有 VIP,因此它只会在 10.200.85.100 上发生故障。

答案1

在不改变当前架构的情况下,最简单的解决方案是利用虚拟 IP 地址排除。 例如

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
    }
}

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

在我的配置中,我喜欢专门为虚拟 IP 地址即包含在 VRRP 数据包中的数据包,并将其余内容放入虚拟 IP 地址排除。这是个好主意,因为您不想仅仅因为客户离开就必须更改主 IP。

答案2

很抱歉回答这么老的问题,但我认为这个限制不再存在 - 我在文档 关于虚拟 IP 的最大数量。有人能帮我解答一下吗?谢谢!

相关内容