Keepalived для более чем 20 виртуальных адресов
Я настроил keepalived на двух компьютерах Debian для обеспечения высокой доступности, но натолкнулся на максимальное количество виртуальных 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 и прокси для внутренних веб-серверов. Причина, по которой мне нужно так много VIP, заключается в невозможности использовать VirtualHost на HTTPS.
Это мой 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.
Я нашел HOWTO, обсуждающий эту проблему. По сути, они предлагают иметь только один VIP и маршрутизировать весь трафик "через" этот один IP, и "все будет хорошо". Это хороший подход? Я запускаю брандмауэры pfSense перед машинами.
Цитата из приведенной выше ссылки:
ip route add $VNET/N via $VIP
or
route add $VNET netmask w.x.y.z gw $VIP
Заранее спасибо.
РЕДАКТИРОВАТЬ:
@ Дэвид Шварц сказал, что было бы целесообразно добавить маршрут, поэтому я попытался добавить статический маршрут к брандмауэру 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
Я делаю это неправильно? Я также удалил все VIP из файла keepalived.conf, чтобы он не работал более 10.200.85.100.
1 ответ
Самое простое решение, не меняющее вашу текущую архитектуру, - это использовать 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
}
}
virtual_ipaddress_excluded содержит список IP-адресов, которые keepalived будет вызывать и отключать на сервере, однако они не включены в сам пакет VRRP, поэтому они не учитываются в пределе 20 IP-адресов.
В моих конфигурациях мне нравится выделять IP-адрес специально для virtual_ipaddress. то есть тот, который включен в пакеты VRRP и помещает все остальное в virtual_ipaddress_excluded. Это хорошая идея, потому что вы не хотите менять основной IP только потому, что клиент ушел.