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。
| 归档时间: |
|
| 查看次数: |
23707 次 |
| 最近记录: |