:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

Loadbalancing und ARP

Linux allgemein

Loadbalancing und ARP

Wir betreiben ca. 20 Webserver, alle laufen über eine HA-Loadbalancer-Lösung (High Availability). Hier gibt es zwei Möglichkeiten, wie das ablaufen kann. Zum einen NAT-Based, zum andren via direkt-return routing. Wir nutzen zweitere Möglichkeit, da sie performanter ist und weniger stark die CPU des Balancers belastet.
Beim direct-return routing wird der hereinkommende Traffic über den Loadbalancer zum Webserer geleitet, diese Antwortet dann aber nicht über den Balancer, sondern direkt.
Wichtig hierbei ist, dass die Domain auf eine bestimmte IP zeigt (z.B. 80.xx.xx.25), diese IP muss zusätzlich auf JEDEM Webserver eingerichtet werden. Und hier kommen wir zum Problem, vor dem ich vor kurzem stand.

Der Webserver hat auf eth0 seine eigene externe IP (z.B. 80.xx.xx.103) und eine interne auf eth1, die uns hier aber nicht interessiert. Ich wusste, dass einfach ein virtuelles Loopback Interface erstellt wird (lo:0), welches die „shared“-IP haben wird. Gesagt getan, doch dann brach der Traffic zusammen und die Load dieses einen Webservers, schoss rapide in die Höhe. Problem war, dass der Server fröhlich auf alle möglichen ARP-Anfragen zu dieser IP antwortete.

Lösung:
die Datei /etc/sysctl.conf bearbeiten

# Optionen aktivieren
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# ARP requests die von eth0/eth1 kommen nur mit
# einer IP beantworten, die auch dort konfiguriert
# ist, nicht lo (loopback) oder lo:0
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth1.arp_announce = 2

Danach sysctl -p /etc/sysctl.conf ausführen und das Problem ist gelöst.

Leave a comment

Loading Facebook Comments ...