我已经在两台 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 的最大数量。有人能帮我解答一下吗?谢谢!