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.

Abb. 1: Netzplan

Abb. 1: Netzplan

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…


Ein Kommentar zu “Loadbalancing mit Apache 2 Howto”

  • the_condor Says:

    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

Hinterlasse einen Kommentar

*