Tutorials - Lastverteilung mit LinuxVirtualServer

Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk

Lastverteilung mit LinuxVirtualServer

Diese Seite wurde 5349 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: lastverteilung load balancing linux virtual server

Abbildung

Inhaltsverzeichnis



Vorwort Top


Lastverteilung und Hochverfügbarkeit dürfte danke der enormen Rechenleistung moderner CPU's für Hobby-Admins wohl längst kein Thema mehr sein. Dennoch ist dieses Fachgebiet hochinteressant und bietet tolle Versuchsmöglichkeiten.

So ein Cluster besteht generell aus 4 Teilen:

  • Gateway - verbindet die Rechner mit dem Internet


  • Load-Balancer - verteilt die Arbeit an die Nodes


  • Nodes - die Server, die die eigentliche Arbeit verrichten (z.B. Webserver)


  • Storage - Fileserver, Datenbank



Arten der Lastverteilung Top


Prinzipiell gibt es 3 Arten der Lastverteilung:

  • NAT - der Load-Balancer ist gleichzeitig Gateway für die dahinter liegenden Server (also ein NAT-Router).
    Vorteile: einfache Konfiguration, die Nodes müssen nicht angepasst werden.
    Nachteile: der gesamte Traffic geht über den Loadbalancer, er wird zum Nadelöhr


  • Direct-Routing - die Antworten der Nodes werden am Loadbalancer vorbei direkt an das Gateway gesendet
    Vorteile: hoher Durchsatz
    Nachteile: Anpassung am Betriebssystem der Nodes erforderlich


  • IP-Tunnel - die Anfrage des Clients wird vom Load-Balancer über einen IP-Tunnel an den Node weitergeleitet, der Node antwortet daraufhin direkt dem Client
    Vorteile: Nodes können geografisch verteilt stehen, ähnlich hoher Durchsatz wie DR
    Nachteile: umfangreichere Konfiguration, Anpassung am Betriebssystem der Nodes erforderlich



Hardware Top


Zuerst kümmern wir uns um die Netzwerk-Konfiguration und die Hardware. Da es sich hierbei nur um einen kleinen Versuch handelt, genügen 5 Computer und ein Switch.

Der erste ist der Client, der die Webseiten abfragen soll. Es kann sich hierbei um jedes beliebige System handeln, solange es einen Webbrowser hat. Er benötigt nur eine Netzwerkkarte (z.B. IP 192.168.0.10), mit der er am Switch verbunden ist.

Als zweites folgt der Load-Balancer. Er benötigt zwei Netzwerkkarten, welche sich in getrennten Netzen befinden (z.B. eth0: 192.168.0.101, eth1: 192.168.1.1). Für unseren Versuch können wir beide mit dem selben Switch verbinden.

Dann folgen die Nodes (2). Bei Ihnen reicht eine Netzwerkkarte. Wir weisen Ihnen die IPs 192.168.1.11 und 192.168.1.12 zu.

Zu guter Letzt bleibt noch der Storage-Server übrig. Auch ihm genügt eine Netzwerkkarte mit der IP 192.168.1.21.

Installation Top


Widmen wir uns zunächst dem Load-Balancer. Der Einfachheit wegen entscheiden wir uns für die NAT-Variante. Als Grundlage dient LinuxVirtualServer[1], welcher fester Bestandteil des Linux-Kernel ist. Dazu wird noch das Programm ipvsadm benötigt, welches bei vielen Distributionen einfach nachinstalliert werden kann.

Folgende Kernel-Option sind für diese Konfiguration wichtig:

Code:


Networking  --->
  [*] Networking support
  Networking options  --->
    [*] Network packet filtering framework (Netfilter)  --->
      Core Netfilter Configuration  --->
        [*] Netfilter connection tracking support
      IP: Netfilter Configuration  --->
        [*] IPv4 connection tracking support (required for NAT)
        [*] IP tables support (required for filtering/masq/NAT)
          [*]   Full NAT
        [*] MASQUERADE target support
    [*] TCP/IP networking
      IP: Virtual Server Configuration  --->
        [*] IP virtual server support (EXPERIMENTAL)
        [*]   TCP load balancing support
        [*]   weighted least-connection scheduling
        [*]   shortest expected delay scheduling


In dieser Konfiguration sind nun die benötigten Module für NAT-Routing und LinuxVirtualServer mit dem wlc und sed-Scheduler enthalten. Der Autor bevorzugt dabei persönlich den sed(shortest expected delay)-Scheduler.

Konfiguration Top


Zusätzlich für die Konfiguration des NAT-Routings ist das Programm iptables erforderlich. Die IPtable-Konfiguration sieht folgendermaßen aus:

Code:


iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE


Unter Gentoo ist es möglich, diese Konfiguration mit /etc/init.d/iptables save zu speichern.

Schlussendlich ändern wir noch eine Zeile in /etc/sysctl.conf wie folgt um:

/etc/sysctl.conf:


net.ipv4.ip_forward = 1


Damit wir nicht noch erst neustarten müssen. führen wir den Befehl echo 1 > /proc/sys/net/ipv4/ip_forward aus.

Das Routing sollte nun funktionieren. Um sicher zu gehen pingen wir einfach von einem Node aus den Client.

Auf dem Storage-Server exportieren wir ein Verzeichnis per NFS, in welchem eine von uns erstellte index.html-Datei liegt. Wie NFS zu konfigurieren ist, kann hier [2] nachgelesen werden.

Die Nodes brauchen jetzt noch einen Webserver (z.B. Apache) und das NFS-Share muss gemounted werden. Die Konfiguration des Apache sollte nicht allzu schwer sein.

Ist das Setup erledigt, fügen wir auf dem Load-Balancer folgende Regeln hinzu:

Code:


ipvsadm -A -t 192.168.0.101:80 -s sed
ipvsadm -a -t 192.168.0.101:80 -r 192.168.1.12:80 -m -w 1
ipvsadm -a -t 192.168.0.101:80 -r 192.168.1.11:80 -m -w 1


Gentoo ist wiederum in der Lage diese Konfiguration mit /etc/init.d/ipvadm save zu speichern.

Nun sollte im Webbrowser unter der Adresse http://192.168.0.101 eine Webseite erscheinen.

Zugabe Top


Für PHP-Anwendungen mit Sessions empfiehlt sich, diese in einer MySQL-Datenbank auf dem Storage-Server abzulegen. Eine kurze Erläuterung findet sich unter [3].

Damit beim Ausfall eines Nodes der Client nicht bei jeder zweiten Anfrage einen Fehler präsentiert bekommt, überprüfen wir mit dem Skript [4] die Erreichbarkeit des Nodes und setzen gegebenfalls ihren weight auf 0. Ein weight von 0 entspricht einer vorübergehenden Deaktivierung.

Außerhalb des Labors Top


In einer Produktiv-Umgebung käme vor dem Load-Balancer noch ein Gateway hinzu, bzw. hätte der Load-Balancer eine öffentliche IP. Selbstverständlich befände sich dann das interne Netz (192.168.1.0/24) an einem eigenen Switch. Vorteilhaft wäre es auch, ein eigenes Netz mit seperatem Switch für die Verbindung der Nodes mit dem Storage. Die Nodes bräuchten dafür klarer Weise zwei Netzwerkkarten.

Denkbar wäre auch einen Netboot-Server einzurichten und die Nodes als diskless Clients auszuführen. Diese könnten dann bei Bedarf dazugesteckt und hochgefahren werden und würden Konfiguration, Betriebssystem und Daten über das Netzwerk beziehen.

Weblinks Top


[1] LinuxVirtualServer
[2] NIS+NFS-Tutorial
[3] PHP-Sessionverwaltung über MySQL
[4] Auto. Failover-Script für IPVS

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk/Lastverteilung mit LinuxVirtualServer