Lastverteilung

Loadbalancing: ipvsadm

1. Allgemein:

Der virtuelle Linux-Server (Linux Virtual Server) ist ein gut skalierbarer und hochverfügbarer Server, basierend auf einem Cluster realer Server. Die Architektur des Clusters ist für den Endnutzer transparent, das heißt, die Benutzer sehen nur einen einzigen virtuellen Server.
(vgl. http://packages.debian.org/de/etch/)

Das Kommando hat zwei grundsätzliche Ausführungsformate:

ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]
ipvsadm command [protocol] service-address server-address packet-forwarding-method] [weight options]

2. Realisierungmöglichkeit

Das Loadbalancing wird auf IP – Ebene (Layer-4 IP Router) realisiert. Hierbei entsteht – im Vergleich zu anderen Methoden auf der TCP (Anwendungsebene) – ein wesentlicher Geschwindigkeitsvorteil, da die Datenpakete nur noch bis Ebene vier des Osimodells ausgepackt werden müssen.

Des weiteren wird die, auf eine Anfrage folgende Kommunikation durch direct routing von dem angesteuerten Server (Backend, oder Realserver genannt) beantwortet, wobei die IP-Adresse durch NAT auf die Adresse des Loadbalancers 19x.xxx.xxx.111 maskiert wird.

An Kernel 2.6 aller Linuxdistributionen ist das Loadbalancing auf IP – Ebene durch das TOOL
ipvsadm realisierbar. Es arbeitet mit der Syntax von iptables ( firewall ) und ist in diese integrierbar.

Mit Dank an:

http://www.linuxvirtualserver.org/
http://de.wikipedia.org/wiki/OSI-Modell
http://kb.linuxvirtualserver.org/wiki/Mini_Mini_Howto
http://linuxreviews.org/howtos/virtual_linux_cluster_howto/

3. Konkrete Realisierung:

I. Netz

Das Loadbalancing wurde auf einem Server (mein_server) mit fester IP Adresse 19x.xxx.xxx.111 im öffentlichen IP Bereich auf eth0 und einer IP Adresse 10.10.10.111 auf eth1 im privaten IP Bereich realisiert. Er verweist auf ein Cluster von vier Servern mit den privaten IP´s 10.10.10.221, 10.10.10.222, 10.10 ..., . Das Loopback Device der jeweiligen Backends (oder Realserver) verweist auf die öffentliche IP-Adresse des Virtual Servers.

II. Die default – Einstellung

Voraussetzungen:

eth0 19x.xxx.xxx.111
eth1 10.10.10.111

In der /etc/apache2/sites-available/my_vitrual_host wird der Verweis auf die externen IP - Adressen durch * ersetzt.

III. Installation:

Bei der Installation der Software kann zwischen unterschiedlichen Optionen gewählt werden:

• Ipvsadm wird beim Start des Rechners automatisch geladen ( AUTO= )
• mein_server ist der Haupt- ( in unserem Fall auch der einzige) Loadbalancer. Es ist möglich
mit Zusatzsoftware einen weiteren Slave – Loadbalancer auf einem zweiten Server zu installieren ( DAEMON= )
• Die zu benutzende Netzwerkkarte ist etho ( IFACE=)
• Diese Angabe bitte unbedingt beachten: (Ansonsten funktioniert der Loadbalancer nicht)
$: dpkg-reconfigure ipvsadm

etc/default/ ipvsadm
# Do not edit! Use 'dpkg-reconfigure ipvsadm'.
AUTO="true"
DAEMON="master"
IFACE="eth0"

IV. Regelwerk

Die Eingabe der Regeln erfolgt auf der Konsole des Loadbalancers (Virtual Server)über das Tool ipvsadm. Die Hilfe zu den verfügbaren Konfigurationsmöglichkeiten ist mit ipvsadm –help einsichtig.

$: ipvsadm --clear
$: ipvsadm --add-service --tcp-service 19x.xxx.xxx.111:80 --scheduler rr --persistent
$: ipvsadm --add-server --tcp-service 19x.xxx.xxx.111:80 --real-server 10.10.10.221:80 --gatewaying
$: ipvsadm --add-server --tcp-service 19x.xxx.xxx.111:80 --real-server 10.10.10.222:80 –-gatewaying
$: ipvsadm --add-server --tcp-service 19x.xxx.xxx.111:80 --real-server 10.10.10.223:80 –-gatewaying
$: ipvsadm --add-server --tcp-service 19x.xxx.xxx.111:80 --real-server 10.10.10.224:80 –-gatewaying

V. Backends (Server Clusters)

Als Backends dienen die vier (Real-)Server mit Adresse 10.10.10.221., ..222, ... .
Mit den unten stehenden Befehlen wird verhindern, dass von den Realservern auf ARP-Anfragen aus dem Netzwerk geantwortet wird. Die Befehle werden auf der Konsole des jeweiligen Virtualservers eingegeben:

$: echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
$: echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
$: ifconfig lo:0 19x.xxx.xxx.111 netmask 255.255.255.255 broadcast 19x.xxx.xxx.111 up

Damit ipvsadm automatisiert gestartet wird erfolgt ein Eintrag in /etc/init.d/loadbalance (Rechte auf 775 ) mit Link auf das jeweilige Runlevel. Die Regeln des Loadbalancings werden bei Eingabe in der /etc/ipvsadm.rules automatisch gespeichert.

/etc/ipvsadm.rules
-A -t 194.64.227.107:80 -s rr -p 360
-a -t 194.64.227.107:80 -r 10.10.35.103:80 -g -w 1
-a -t 194.64.227.107:80 -r 10.10.35.101:80 -g -w 1
-a -t 194.64.227.107:80 -r 10.10.35.102:80 -g -w 1