PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Loadbalancing mit Apache 2.2 und mod_proxy



Batosai
09.03.06, 07:56
Da Apache Version 2.2 noch nicht all zu lange draußen ist, gibt es im Netz so gut wie keine Beschreibungen wie man sich die neue Funktionalität von mod_proxy für Loadbalancing zu Nutze macht. Deswegen hab ich dieses HowTo geschrieben.

Zum besseren Verständnis sollte man schon mal mit der httpd.conf gearbeitet haben.

Verglichen mit mod_jk lässt sich Loadbalancing mit Apache 2.2 und mod_proxy
relativ einfach konfigurieren (wenn man weiß wie).


Voraussetzungen:
Man braucht natürlich Apache Version 2.1 oder höher mit den Modulen mod_proxy, mod_proxy_balancer und mod_proxy_ajp.


Konfiguration:
Eine vollständige Konfiguration könnte folgendermaßen aussehen:



<IfModule mod_proxy_balancer.c>

<Proxy balancer://myCluster>
BalancerMember ajp://localhost:8244 route=localhost8240
BalancerMember ajp://localhost:8254 route=localhost8250
</Proxy>

<Location /ha/>
ProxyPass balancer://myCluster/ha/ stickysession=JSESSIONID
</Location>

<Location /balancer-manager>
SetHandler balancer-manager

AuthType Basic
AuthName "Cluster manager "
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>

</IfModule>



Details:
Sehen wir uns das im Einzelnen an.

Wie packen das in eine IfModule-Direktive um sicher zu stellen, das es zu keinem Fehler beim starten von Apache kommt falls das Modul nicht vorhanden ist oder geladen werden kann.

Musste man bei mod_jk noch mindestens 3 worker definieren und Eigenschaften zuweisen, geht das jetzt viel einfacher:



<Proxy balancer://myCluster>
BalancerMember ajp://localhost:8244 route=localhost8240
BalancerMember ajp://localhost:8254 route=localhost8250
</Proxy>


Mit dem Argument balancer:// in der Proxy-Direktive definieren wir einen virtuellen worker myCluster der als Balancer fungiert. Diesen können wir dann ganz einfach die entsprechenden worker zuweisen indem wir sie einfach als Parameter mit dem Keyword 'BalancerMember' in die Direktive schreiben.
Der Typ eines workers wird als Protokoll angegeben (in diesem Fall ajp://). Möglich sind noch http und ftp.
Dann kommt Server-Name und Port (in diesem Fall natürlich der AJP-Connector-Port) und dahinter können wir dann verschieden Parameter angeben, zB route, mit dem wir die jvmRoute angeben die wir diesem worker in der server.xml von tomcat gegeben haben. (Was es noch an Parametern gibt steht in der Apache-Dokumentation (http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass)


OK, jetzt haben wir den Balancer angelegt und ihm die worker zugewiesen. Jetzt müssen wir bestimmen, bei welchen
URL-Pattern der balancer benutzt werden soll:



<Location /ha/>
ProxyPass balancer://myCluster/ha/ stickysession=JSESSIONID
</Location>


Damit wird für alles was mit /ha/ anfängt der loadbalancer benutzt den wir oben definiert haben.
Der Wert des Parameter stickysession muss der Name des Cookie sein, der vom Applicationserver (in diesem Fall
tomcat) gesetzt wird.


Wir können den balancer und seine workers auch zur Laufzeit konfigurieren (aber keine neuen worker hinzufügen).
Dazu gibt es als Gegenstück zum jkmanager den balancer-manager.



<Location /balancer-manager>
SetHandler balancer-manager

AuthType Basic
AuthName "Cluster manager "
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>


Die Datei .htpasswd muss eventuell noch mit htpasswd2 angelegt werden.