Loadbalancing mit Apache 2 Howto
In diesem Tutorial beschreibe ich, wie das Loadbalancing mit Hilfe von Apache 2 auf Debian 4 (etch) eingerichtet werden kann. Insbesondere zu erwähnen ist das halten einer Session mit Hilfe eines eigens durch Apache verwendeten Cookies.
Vorbedingung
Als Vorbedingung für dieses Tutorial setzen wir voraus, dass 3 mit einer Debian etch Grundinstallation bestückte Server zur Verfügung stehen. In diesem Fall vergeben wir die Hostnamen wie folgt:
- Loadbalancer: lb1.volberg.de
- Webserver 1: web1.volberg.de
- Webserver 2: web2.volberg.de
Selbstverständlich können die Hostnamen auch anderweitig benannt werden oder auch IP-Adressen verwendet werden – das soll aber in diesem Tutorial nicht weiter betrachtet werden. Das folgende Schaubild veranschaulicht den logischen Aufbau der Infrastruktur.
Einrichtung des Loadbalancers
Zuerst installieren wir nun Apache 2 incl. des PHP5 Moduls. PHP ist auf dem Loadbalancer nicht unbedingt nötig, ich benutze nur gerne das Paket libapache2-mod-php5 für die Installation des Webservers. Da Debian selbst in der Regel nicht die aktuellsten Versionen von PHP in seinen Repositories führt, verwende wir das Repository von Dotdeb.
1 2 3 4 | echo "deb http://dotdeb.netmirror.org/ etch all" >>/etc/apt/sources.list aptitude update aptitude install libapache2-mod-php5 php5-mysql aptitude upgrade |
Nachdem der Apache 2 eingerichtet ist, wollen wir nun die notwendigen Module aktivieren.
1 2 3 4 | a2enmod proxy a2enmod proxy_balancer a2enmod proxy_http a2enmod status |
Den nun notwendigen Reload des Apache machen wir später. Als nächstes richten wir das Verzeichnis für den späteren Einsatz des Balancer-Managers ein. Zum Schutz vor unbefugtem Zugriff richten wir ein Passwort für einen Benutzer admin ein.
1 2 | mkdir -p /var/www/lb1.volberg.de/balancer-manager htpasswd -c /var/www/lb1.volberg.de/.htpasswd admin |
Die Zugriffsverwaltung für das Verzeichnis werden wir mit Hilfe der Datei .htaccess steuern.
1 | vi /var/www/lb1.volberg.de/balancer-manager/.htaccess |
Dazu schreiben wir den folgenden Inhalt in diese Datei
1 2 3 4 5 6 | AuthType Basic AuthName "Authorisierung notwendig" AuthUserFile /var/www/lb1.volberg.de/.htpasswd <limit GET PUT POST> require valid-user </limit> |
Im Anschluss konfigurieren wir noch die notwendigen Apache-Einstellungen für das Loadbalancing, sowie für den Balancer-Manager. Dazu erstellen wir die Datei lb1.volberg.de im Verzeichnis /etc/apache2/sites-available/
1 | vi /etc/apache2/sites-available/lb1.volberg.de |
und schreiben folgende Konfiguration hinein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <VirtualHost *> ServerName lb1.volberg.de DocumentRoot /var/www/lb1.volberg.de ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /balancer-manager ! ProxyPass / balancer://mycluster/ stickysession=BALANCEID nofailover=On ProxyPassReverse / http://web1.volberg.de/ ProxyPassReverse / http://web2.volberg.de/ <Proxy balancer://mycluster> BalancerMember http://web1.volberg.de route=web1 BalancerMember http://web2.volberg.de route=web2 ProxySet lbmethod=byrequests </Proxy> <Location /balancer-manager> SetHandler balancer-manager Order deny,allow Allow from all </Location> </VirtualHost> |
Um die Änderungen der Apache-Konfiguration zu aktivieren, setzen wir einen symbolischen Link in das Verzeichnis /etc/apache2/sites-enabled und starten im Anschluss den Apache Server neu.
1 2 | ln -s /etc/apache2/sites-available/lb1.volberg.de /etc/apache2/sites-enabled/010-lb1.volberg.de /etc/init.d/apache2 force-reload |
So, der Loadbalancer ist nun eingerichtet. Fahren wir nun mit der Einrichtung der beiden Webserver fort.
Einrichtung des ersten Webservers
Als erstes wird der Apache2 mit PHP5 Modul und mysql-Support für PHP5
1 2 3 4 | echo "deb http://dotdeb.netmirror.org/ etch all" >>/etc/apt/sources.list aptitude update aptitude install libapache2-mod-php5 php5-mysql aptitude upgrade |
Nachdem der Apache 2 eingerichtet ist, wir das Modul für Apache Rewrite aktiviert.
1 | a2enmod rewrite |
Der Reload des Apache erfolgt (wie bereits bei der Einrichtung des LoadBalancers) zum Schluss. Als nächstes stellen wir eine phpinfo()-Seite bereit, aus der wir bei unseren folgenden Tests erkennen können, auf welchem Server wir uns befinden.
1 2 | mkdir -p /var/www/web1.volberg.de echo "<?php phpinfo(); ?>" >/var/www/web1.volberg.de/index.php |
Jetzt erstellen wir die Datei web1.volberg.de im Verzeichnis /etc/apache2/sites-available/
1 | vi /etc/apache2/sites-available/web1.volberg.de |
und schreiben folgende Konfiguration hinein:
1 2 3 4 5 6 | <VirtualHost *> ServerName web1.volberg.de DocumentRoot /var/www/web1.volberg.de RewriteEngine On RewriteRule .* - [CO=BALANCEID:balancer.web1:.volberg.de] </VirtualHost> |
Um die Änderungen der Apache-Konfiguration zu aktivieren, setzen wir einen symbolischen Link in das Verzeichnis /etc/apache2/sites-enabled und starten im Anschluss den Apache Server neu.
1 2 | ln -s /etc/apache2/sites-available/web1.volberg.de /etc/apache2/sites-enabled/010-web1.volberg.de /etc/init.d/apache2 force-reload |
Einrichtung des zweiten Webservers
Als erstes wird der Apache2 mit PHP5 Modul und mysql-Support für PHP5
1 2 3 4 | echo "deb http://dotdeb.netmirror.org/ etch all" >>/etc/apt/sources.list aptitude update aptitude install libapache2-mod-php5 php5-mysql aptitude upgrade |
Nachdem der Apache 2 eingerichtet ist, wir das Modul für Apache Rewrite aktiviert.
1 | a2enmod rewrite |
Der Reload des Apache erfolgt (wie bereits bei der Einrichtung des LoadBalancers) zum Schluss. Als nächstes stellen wir eine phpinfo()-Seite bereit, aus der wir bei unseren folgenden Tests erkennen können, auf welchem Server wir uns befinden.
1 2 | mkdir -p /var/www/web2.volberg.de echo "<?php phpinfo(); ?>" >/var/www/web2.volberg.de/index.php |
Jetzt erstellen wir die Datei web2.volberg.de im Verzeichnis /etc/apache2/sites-available/
1 | vi /etc/apache2/sites-available/web2.volberg.de |
und schreiben folgende Konfiguration hinein:
1 2 3 4 5 6 | <VirtualHost *> ServerName web2.volberg.de DocumentRoot /var/www/web2.volberg.de RewriteEngine On RewriteRule .* - [CO=BALANCEID:balancer.web2:.volberg.de] </VirtualHost> |
Um die Änderungen der Apache-Konfiguration zu aktivieren, setzen wir einen symbolischen Link in das Verzeichnis /etc/apache2/sites-enabled und starten im Anschluss den Apache Server neu.
1 2 | ln -s /etc/apache2/sites-available/web2.volberg.de /etc/apache2/sites-enabled/010-web2.volberg.de /etc/init.d/apache2 force-reload |
Testbeschreibung folgt in Kürze…


23. Oktober 2009 um 19:19 Uhr
Hallo,
sehr nettes HowTo.
Leider funktioniert das ganze ja nur begrenzt?.Hat man Content der sich Ständigt ändert z.b Bilder oder Files müßen diese ebenfalls auf beiden Webservern gleich sein? Also muß doch ein Abgleich der Daten auf beiden Webservern erfolgen?
würde mich um ein Feedback freuen