![Keepalived + LVS не работает с других хостов, но работает с локального хоста на LB](https://rvso.com/image/632757/Keepalived%20%2B%20LVS%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%81%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85%20%D1%85%D0%BE%D1%81%D1%82%D0%BE%D0%B2%2C%20%D0%BD%D0%BE%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%81%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%85%D0%BE%D1%81%D1%82%D0%B0%20%D0%BD%D0%B0%20LB.png)
У меня настроены keepalived и LVS. Я пытаюсь приступить к работе.
Клиенты, LB и реальные серверы находятся в одной подсети.
Конфигурация Keepalived:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ukld5p500x
}
vrrp_instance some_service {
state MASTER
interface em1
virtual_router_id 100
priority 100
virtual_ipaddress {
10.0.0.75
}
track_script {
chk_fail
}
}
virtual_server 10.0.0.75 58563 {
delay_loop 10
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.70 58563 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 58563
}
}
... more real_servers ...
}
Итак, если я устанавливаю lb_type на nat, то я могу подключиться из самого LB к VIP/port, и все пройдет, но не из внешнего хоста (клиента). Если я устанавливаю lb_type на DR, то ни LB, подключающийся к себе, ни внешний клиент не смогут подключиться.
sys.net.ipv4.ip_forward установлен на 1, и в настоящее время настроен только один LB.
решение1
Не знаю, получили ли вы ответ на этот вопрос, поскольку он очень старый, но DR (прямая маршрутизация) сильно отличается от NAT. NAT заставляет балансировщик нагрузки (LB) действовать как маршрутизатор, передавая пакет реальному серверу, а реальный сервер передает его обратно LB для доставки клиенту.
С DR LB является лишь псевдопосредником. Когда пакет приходит на VIP, который есть у LB, он решает, на какой RS (реальный сервер) его отправить, ипереписываетзаголовок пакета, изменяя MAC-адрес. Затем он передает пакет обратно на коммутатор, а коммутатор доставляет его на RS с соответствующим MAC-адресом.
Затем вам нужно обмануть свой RS, чтобы он принял пакет, предназначенный для его интерфейса. Обычно вы делаете это, добавляя VIP к адаптеру обратной связи и назначая ему сетевую маску 255.255.255.255. Ваш демон службы также должен быть настроен на прослушивание этого VIP (в apache вы просто добавляете дополнительную строку Listen xxxx:80).
В довершение всего, вам придется иметь дело с проблемой ARP. Обычно, добавляя
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
в ваш sysctl.conf позаботится об этом