我已經在兩台 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
每台電腦還在虛擬 IP 上執行 Apache(後來的 Nginx)綁定,用於 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
}
BACKUP 機器上有相同的配置,並且工作正常,但僅限於第 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虛擬IP位址。即包含在 VRRP 資料包中的資料包並將其他所有內容放入虛擬 IP 位址排除。這是一個好主意,因為您不想僅僅因為客戶離開就必須更改主 IP。
答案2
很抱歉回答這麼老的問題,但我認為這個限制不再存在 - 我在文件 關於虛擬 ip 的最大數量。有人可以支持我嗎?謝謝!