У меня есть балансировщик нагрузки Barracuda и VIP, который, в свою очередь, перенаправляет на кластер серверов. Каждый из этих серверов имеет VIP, добавленный к интерфейсу обратной связи, поскольку балансировщик нагрузки находится на прямом ответе сервера.
Я без проблем использую этот метод почти пару лет, однако на днях мне потребовалось добавить дополнительный IP-адрес в кластер / балансировщик нагрузки. Я добавил интерфейс loopback, прежде чем поместить его в балансировщик нагрузки.
Проблема в том, что если я попытаюсь перейти на public-ip-here: 80, он будет работать отлично, как будто это не шлейф? Я могу использовать ssh для ip и любой другой службы. Если я добавлю его в свой балансировщик нагрузки и попытаюсь перенаправить его так, как я являюсь другими своими серверами, он будет подключаться напрямую к серверу вместо использования балансировщика нагрузки, как ожидалось.
Вот пример интерфейса с отредактированным фактическим публичным IP:
lo:6 Link encap:Local Loopback
inet addr:123.123.123.123 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
Я не понимаю, как это исправить, и Google не очень помог.
Похоже, вы используете режим DR (Driect Routing) и вам нужно решить проблему ARP. Ваш реальный сервер не должен сообщать остальной части сети о том, что ему принадлежит VIP-адрес 123.123.123.123. Разные версии Linux реагируют по-разному. Взгляните на страницу 69 руководства loadbalancer.org: http://pdfs.loadbalancer.org/loadbalanceradministrationv7.pdf
Управление Arp необходимо на ВСЕХ интерфейсах, например: net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.all. arp_announce = 2 net.ipv4.conf.eth0.arp_announce = 2 net.ipv4.conf.eth1.arp_announce = 2
или вы можете найти метод iptables проще: iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 -j REDIRECT