Logo vawacon Jochen van Waasen
Senior Developer Java Technology
Start
Start
Methoden
Profil
Tech­no­lo­gie
Im­pres­sum
Tomcat Cluster
Abstract
Voraussetzungen
Installation Apache 2
Installation mod_jk2.dll
Installation Tomcat
Tomcat Instanzen anlegen
Tomcat Instanzen kon­fi­gu­rieren
Apache konfigurieren
Tomcat Instanzen starten
Apache starten
Test: Load­balan­cing
Anmerkungen: mod_jk2
Kon­figu­rations­mög­lich­keiten: Load­balan­cing
Anmerkungen: Session
 
 
Download:
Anleitung: HowTo_PDF
workers2.properties
 
info@vawacon.de
2003-10-16 23:14
Wie installiert und integriert man ein Tomcat Cluster mit Apache und Loadbalancing ?
Abstract:
Dieser Text beschreibt die Installation eines Tomcat Clusters und die Integration mit Apache unter Verwendung der Loadbalancing Möglichkeiten des mod_jk2 Moduls. In diesem Text wird die Installation von zwei Tomcat Instanzen und einer Apache Instanz auf einem Computer beschrieben.

Diese Anleitung wurde getestet unter Windows 2000 mit Apache 2.0.47 und Tomcat 4.1.27.
Voraussetungen:
Korrekt installiertes J2SE SDK mit der Umgebungsvariablen JAVA_HOME.
Installation Apache 2:
1. Laden Sie die ausführbare Windowsdatei apache_2.0.47-win32-x86-no_ssl.exe herunter.
2. Installation von Apache 2 durch Doppelklick auf die heruntergeladene Datei. Folgen Sie den Installa­tions­an­wei­sungen.
Installation mod_jk2.dll:
Sie müssen die korrekte Version der mod_jk2.dll für die verwendete Apache 2 Version installieren.
In diesem Beispiel wird Apache 2.0.47 verwendet!
1. Die Datei mod_jk2_2.0.47.dll in das Apache 2 Installationsverzeichnis \modules kopieren.
2. Jetzt kann Apache 2 konfiguriert werden um Tomcat 4 mittels mod_jk2_2.0.47.dll zu integrieren.
3. Download: mod_jk2.dll
Installation Tomcat:
1. Laden Sie die ausführbare Windowsdatei tomcat-4.1.27.exe herunter.
2. Installation von Tomcat 4 durch Doppelklick auf die heruntergeladene Datei. Folgen Sie den Installa­tions­an­wei­sungen.
2a. Als Installation Options ist Custom auszuwählen und NT Service (NT/2K/XP only) zu selektieren:
Screenshot Tomcat installation

Tomcat wird als NT Service installiert !

Mit dieser Option wird ein NT Dienst in der Windows Registry eingerichtet und der Dienst wird nach der vollständigen Installation gestartet. Der gestartete Dienst benutzt die Instanz und das Web Application webapps Verzeichniss im Tomcat Installationverzeichnis welches während der Installation festgelegt wurde.

Um den Dienst zu erzeugen und zu starten wurde die Datei tomcat.exe in das bin Verzeichnis des Tomcat Installationsverzeichnisses installatiert. Diese Datei kann auch dazu benutzt werden NT Dienste manuell einzurichten und wird nur installiert wenn man die NT Service Option während der Installation wählt.
2b. Folgen Sie den nächsten Installa­tions­an­wei­sungen.
3. Setzen Sie die Umgebungsvariable CATALINA_HOME auf das Tomcat 4.1 Installationsverzeichnis
Tomcat Instanzen anlegen:
1. Legen Sie ein neues Verzeichnis für Ihre Tomcat Instanzen an.
mkdir TomcatInstances
2. Wechseln Sie in das neu angelegte Verzeichnis:
cd TomcatInstances
3. Legen Sie neue Verzeichnis für Ihre Tomcat Instanzen an:
mkDir TomcatInstance01, TomcatInstance02
4. Legen Sie folgende Verzeichnisse in den Tomcat Instanz Verzeichnissen TomcatInstance01 und TomcatInstance02 an: logs, temp, webapps, work.
mkdir logs temp webapps work
5. Kopieren Sie das conf Verzeichnis aus dem Tomcat 4.1 Installationsverzeichnis in die Tomcat Instanz Verzeichnisse TomcatInstance01 und TomcatInstance02.
6. So sollte die Verzeichnisstrukur anschließend aussehen!

Bis auf das Verzeichnis conf sind alle Verzeichnisse leer! Sie können weitere Instanzen auf die gleiche Art und Weise anlegen. Auch auf verschiedenen Laufwerken und anderen Computern im Netzwerk!

Dieser Text beschreibt die Installation von zwei Tomcat Instanzen auf einem Computer.

Es ist nicht explizit notwendig ein Verzeichnis für die Tomcat Instanzen (TomcatApplication) anzulegen. Die Tomcat Instanzen Verzeichnisse können auch in einer anderen Struktur untergebracht werden!
Tomcat Instanzen konfigurieren:
Im conf Verzeichnis der Tomcat Instanzen Verzeichnisse befindet sich die Datei server.xml. Mit dieser Datei werden die Einstellungen für die Tomcat Instanzen konfiguriert.

Dieser Text beschreibt die Installation von zwei Tomcat Instanzen auf einem Computer. Die Ports müssen daher für jede Instanz unter­schied­lich sein. Da diese Kon­fi­gu­rations­dateien aus dem Tomcat In­stalla­tions­ver­zeich­nis kopiert worden sind, werden die Ports bereits von der Tomcat Installation verwendet die als Service gestartet wird!

Die Ports müssen also in beiden server.xml Dateien geändert werden:
server.xml

<!-- Example Server Configuration File -->
[...]
<Server *port="8005" shutdown="SHUTDOWN" debug="0">

In TomcatInstance01 server.xml* ändern zu: port="11001".
In TomcatInstance02 server.xml* ändern zu: port="22001".

[...]
<!-- Define the Tomcat Stand-Alone Service -->
<Service *name="Tomcat-Standalone">

Sie können den Namen für die Instanz ändern (optional):
In TomcatInstance01 server.xml* ändern zu: name="Tomcat-Instance01".
In TomcatInstance02 server.xml* ändern zu: name="Tomcat-Instance02".


[...]
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8081 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" *port="8080" minProcessors="5" maxProcessors="75" enableLookups="true" *redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true" />

In TomcatInstance01 server.xml* ändern zu: port="11002".
In TomcatInstance01 server.xml* ändern zu: redirectPort="11003".
In TomcatInstance02 server.xml* ändern zu: port="22002".
In TomcatInstance02 server.xml* ändern zu: redirectPort="22003".

[...]
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" *port="8009" minProcessors="5" maxProcessors="75" enableLookups="true" *redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000" useURIValidationHack="false" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>

In TomcatInstance01 server.xml* ändern zu: port="11004".
In TomcatInstance01 server.xml* ändern zu: redirectPort="11003".
In TomcatInstance02 server.xml* ändern zu: port="22004".
In TomcatInstance02 server.xml* ändern zu: redirectPort="22003".

[...]
<!-- Define the top level container in our container hierarchy -->
<Engine name="Standalone" defaultHost="localhost" debug="0" *>


In TomcatInstance01 server.xml* hinzufügen: jvmRoute="tomcat_01".
In TomcatInstance02 server.xml* hinzufügen: jvmRoute="tomcat_02".

Dieser Eintrag ist notwendig für das Loadbalancing. Apache unterscheidet anhand dieses Eintrags die Tomcat Instanzen.

[...]
Apache konfigurieren:
1.

Modifizieren Sie die httpd.conf Datei im conf Verzeichnis des Apache 2 Installationsverzeichnisses.
Fügen Sie am Ende des Dynamic Shared Object (DSO) Teils folgendes* ein:

httpd.conf
[...]
#
# Dynamic Shared Object (DSO) Support
#
[...]
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so

*LoadModule jk2_module modules/mod_jk2_2.0.47.dll
[...]

2. Erzeugen Sie eine neue Textdatei mit dem Namen workers2.properties im conf Verzeichnis des Apache 2 Installationsverzeichnisses.

Standardmäßig wird Apache 2 ohne diese Datei installiert und auch Tomcat 4 stellt diese Datei mit der Installationsversion nicht zur Verfügung!

workers2.properties

#--- workers2.properties

# Define the TCP socket communication channel for the Tomcat Instance 1
[channel.socket:localhost:11004]
info=Ajp13 forwarding over a TCP socket.
tomcatId=tomcat_01
# tomcatId corresponds to jvmRoute in Tomcat instance server.xml file!
debug=0
lb_factor=1

# Define the TCP socket communication channel for the Tomcat Instance 2
[channel.socket:localhost:22004]
info=Ajp13 forwarding over a TCP socket.
tomcatId=tomcat_02
# tomcatId corresponds to jvmRoute in Tomcat instance server.xml file!
debug=0
lb_factor=1

[status:]
info=Status worker, displays runtime information.

[uri:/jkstatus/*]
info=Displays status information and checks the config file for changes.
group=status:

# Map the Tomcat "examples" webapp to the webserver uri space
[uri:/examples/*]
info=Map the entire "examples" webapp.

# Configure the shared memory file
[shm]
file=D:/programme/apachegroup/apache2/logs/shm.file*
# Adjust this path to your environment !!!
size=1048576
debug=0

#---- end of workers2.properties

Der Pfad* für die shm Datei muss entsprechend angepasst werden!!

Tomcat Instanzen starten!
  Es sollten immer zuerst die Tomcat Instanzen gestartet werden und anschließend Apache.
Falls eine oder mehrere Tomcat Instanzen neu gestartet worden sind, sollte auch Apache neu gestartet werden.
1. Wechsen Sie in das bin Verzeichnis des Tomcat Installationsverzeichnisses.
2. Überprüfen Sie die Umgebungsvariable CATALINA_HOME. Diese muss auf das Tomcat In­stallations­ver­zeich­nis gesetzt sein.
3. Setzen Sie die Umgebungsvariabel CATALINA_BASE. Diese muss auf das Tomcat Instanzenverzeichnis TomcatInstance01 gesetzt werden.

set CATALINA_BASE=D:\TomcatInstances\TomcatInstance01
4.

Starten Sie die Tomcat Instanz TomcatInstance01.

startup

Oct 14, 2003 9:45:19 PM org.apache.commons.modeler.Registry loadRegistry
INFO: Loading registry information
Oct 14, 2003 9:45:19 PM org.apache.commons.modeler.Registry getRegistry
INFO: Creating new Registry instance
Oct 14, 2003 9:45:20 PM org.apache.commons.modeler.Registry getServer
INFO: Creating MBeanServer
StandardEngine[Standalone]: setJvmRoute=tomcat_01
Oct 14, 2003 9:45:26 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on port 11002
Starting service Tomcat-Instance01
Apache Tomcat/4.1.27
Oct 14, 2003 9:45:28 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on port 11002
Oct 14, 2003 9:45:28 PM org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:11004
Oct 14, 2003 9:45:28 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/111 config=D:\TomcatInstances\TomcatInstance01\con
f\jk2.properties
Falls kein Portkonflikt vorliegt, läuft jetzt die TomcatInstance01. Bei einer Fehlermeldung sollten Sie die ver­wendeten Ports überprüfen, diese dürfen nicht bereits belegt sein!
5. Setzen Sie die Umgebungsvariabel CATALINA_BASE. Diese muss auf das Tomcat Instanzenverzeichnis TomcatInstance02 gesetzt werden.

set CATALINA_BASE=D:\TomcatInstances\TomcatInstance02
6.

Starten Sie die Tomcat Instanz TomcatInstance02.

startup

Oct 14, 2003 9:45:40 PM org.apache.commons.modeler.Registry loadRegistry
INFO: Loading registry information
Oct 14, 2003 9:45:40 PM org.apache.commons.modeler.Registry getRegistry
INFO: Creating new Registry instance
Oct 14, 2003 9:45:41 PM org.apache.commons.modeler.Registry getServer
INFO: Creating MBeanServer
StandardEngine[Standalone]: setJvmRoute=tomcat_02
Oct 14, 2003 9:45:46 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on port 22002
Starting service Tomcat-Instance02
Apache Tomcat/4.1.27
Oct 14, 2003 9:45:48 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on port 22002
Oct 14, 2003 9:45:48 PM org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:22004
Oct 14, 2003 9:45:48 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/50 config=D:\TomcatInstances\TomcatInstance02\conf
\jk2.properties
Falls kein Portkonflikt vorliegt, läuft jetzt die TomcatInstance02. Bei einer Fehlermeldung sollten Sie die ver­wendeten Ports überprüfen, diese dürfen nicht bereits belegt sein!
 

Es sollten jetzt beide Tomcat Instanzen auf dem System laufen. Falls Fehler aufgetreten sind, überprüfen Sie, ob Sie alle Schritte korrekt durchgeführt haben.

Die Tomcat Instanzen können auch als Dienst eingerichtet werden!

Apache neu starten!
  Es sollten immer zuerst die Tomcat Instanzen gestartet werden und anschließend Apache.
Falls eine oder mehrere Tomcat Instanzen neu gestartet worden sind, sollte auch Apache neu gestartet werden.
1. Apache wurde als NT Dienst installiert, es gibt zwei Möglichkeiten Apache neu zu starten:
  Alternative 1:

Neustart des Apache Dienstes mit dem Apache Service Monitor.
  Alternative 2:

Wählen Sie in der Windows Taskleiste:
Start > Einstellungen > Systemsteuerung > Verwaltung > Dienste

Den Apache 2 Dienst auswählen und den Dienst neu starten.
  Falls Apache nicht korrekt startet überprüfen Sie die Installation der mod_jk2.dll und den Eintrag in der httpd.conf Datei!
2. Um die Konfiguration des mod_jk2 Moduls und die Integration von Tomcat zu überprüfen rufen Sie im Broswer folgende URL auf:

http://localhost/jkstatus

Ergebnis:
 

Status information for child 0

ajp13 runtime info

ajp13 information, using getAttribute()

id name lb_factor lb_value route errorState graceful epCount errorTime
0 localhost:11004 1 1 tomcat_01 N N 0 0
1 localhost:22004 1 1 tomcat_02 N N 0 0

Scoreboard info (ver=0 slots=1)

reset Totals:
Req Err Max Avg
0 0 0 -

Endpoint info ( no shm )

Worker Req Err LastReq ConnectionTime TotalTime MaxTime AvgTime ReqStart +jk +end
Totals:
Req Err Max Avg
0 0 0 -

uri runtime info

uri information, using getAttribute()

id name host uri group context
0 null null null
0 /jkstatus/* * /jkstatus/* status: /
0 /examples/* * /examples/* lb:lb /
0 * * null null null
0 */ * / lb:lb /

Configured Properties

Original data set by user

Object name Property Value
config: file ${serverRoot}/conf/workers2.properties
shm: file D:/programme/apachegroup/apache2/logs/shm.file
size 1048576
debug 0
channel.socket:localhost:11004 info Ajp13 forwarding over a TCP socket.
tomcatId tomcat_01
debug 0
lb_factor 1
channel.socket:localhost:22004 info Ajp13 forwarding over a TCP socket.
tomcatId tomcat_02
debug 0
lb_factor 1
status: info Status worker, displays runtime information.
uri:/jkstatus/* info Displays status information and checks the config file for changes.
group status:
uri:/examples/* info Map the entire "examples" webapp.

All settings ( automatic and configured ), after substitution

Name Value
fs \
ps ;
so dll
arch i386
serverRoot D:/programme/ApacheGroup/Apache2
file D:/programme/ApacheGroup/Apache2/conf/workers2.properties
channel.socket:localhost:11004.info Ajp13 forwarding over a TCP socket.
channel.socket:localhost:11004.tomcatId tomcat_01
channel.socket:localhost:11004.debug 0
channel.socket:localhost:11004.lb_factor 1
channel.socket:localhost:22004.info Ajp13 forwarding over a TCP socket.
channel.socket:localhost:22004.tomcatId tomcat_02
channel.socket:localhost:22004.debug 0
channel.socket:localhost:22004.lb_factor 1
status:.info Status worker, displays runtime information.
uri:/jkstatus/*.info Displays status information and checks the config file for changes.
uri:/jkstatus/*.group status:
uri:/examples/*.info Map the entire "examples" webapp.
shm:.file D:/programme/apachegroup/apache2/logs/shm.file
shm:.size 1048576
shm:.debug 0
Test: Loadbalancing:
  Um das Loadbalancing zu testen benötigen wir noch Inhalt der von den jeweiligen Tomcat Instanzen an­gezeigt werden soll. In den workers2.properties ist bereits die Web Application examples konfiguriert, die noch mit Inhalt gefüllt werden muss.
1. Legen Sie im Tomcat Instanz Verzeichnis TomcatInstance01 folgendes Verzeichnis an:

examples
2.

Erzeugen Sie im examples Verzeichnis eine Textdatei mit dem Namen instance.txt und folgendem Inhalt:

Tomcat Instance 01
3.

Legen Sie im Tomcat Instanz Verzeichnis TomcatInstance02 folgendes Verzeichnis an:

examples
4.

Erzeugen Sie im examples Verzeichnis eine Textdatei mit dem Namen instance.txt und folgendem Inhalt:

Tomcat Instance 02
5. Starten Sie die Tomcat Instanzen und Apache neu!
6. Rufen Sie im Browser folgende URL auf:

http://localhost/examples/instance.txt
7. Aktualisieren Sie die Seite im Browser mehrmals. Es wird der jeweilige Text der Tomcat Instanz Tomcat Instance 01 und Tomcat Instance 02 angezeigt.

Bei der gewählten Konfiguration werden die Tomcat Instanzen immer abwechselnd angesprochen!
Anmerkungen: mod_jk2
  Das Modul mod_jk2 stellt nicht nur das Loadbalancing für die Tomcat Instanzen zur Verfügung, es ist auch in der Lage, Probleme mit den konfigurierten Tomcat Instanzen zu erkennen.
  Die failover Eigenschaft des mod_jk2 erkennt folgendes:
  Ausfall einer Tomcat Instanz
 

Falls eine Tomcat Instanz über den connector service nicht mehr erreichbar ist, wird die Instanz aus dem Pool der aktiven Instanzen entfernt. Das Modul verteilt automatisch die Requests auf die anderen Tomcat Instanzen.

  Tomcat Instanz ist nach einem Ausfall wieder verfügbar
 

Das Modul überprüft die connector services um festzustellen, ob eine ausgefallene Instanz wieder zur Verfügung steht. Falls eine solche Instanz wieder zur Verfügung steht, wird sie automatisch in den Pool der aktiven Instanzen aufgenommen und es werden wieder Requests an diese Instanz weitergeleitet.

Konfigurationsmöglichkeiten: Loadbalancing
1.

Die Verteilung der Requests auf die einzelnen Tomcat Instanzen kann über einen Parameter in der workers2.properties Datei konfiguriert werden.

workers2.properties
[…]
# Define the TCP socket communication channel for the Tomcat Instance 1
[channel.socket:localhost:11004]
[…]
lb_factor=1
[…]

Der Parameter lb_factor kann ganzzahlige positive Werte inklusive 0 annehmen.

Dabei gilt:
 
  • Je niedriger der Wert, desto mehr Requests werden an die Instanz geleitet.
  • Je höher der Wert, desto weniger Requests werden an die Instanz geleitet.
  • Bei einem Wert von 0, werden alle Requests an diese Instanz geleitet. Erst wenn die Instanz nicht mehr verfügbar ist, werden die Requests an die anderen Instanzen weitergeleitet.
2. Es können auch explizite Loadbalancer in der workers2.properties Datei konfiguriert werden. Dies ist nur notwendig bei mehreren Clustern bzw. falls Anwendungen nicht auf allen Instanzen zur Verfügung stehen.
 

Szenario:

  Es werden vier Tomcat Instanzen TI01, TI02, TI03 und TI04 eingesetzt. Diese Instanzen sollen über einen Apache HTTP Server angesprochen werden. Die Tomcat Instanzen sind mit dem Modul mod_jk2 integriert. Auf dem Tomcat Cluster laufen zwei Webapplikationen VIP und FOO. Diese sind über http://myHost/VIP und http://myHost/FOO im Browser aufrufbar.

Aus Performance- und Sicherheitsgründen laufen nicht alle Applikationen auf allen Instanzen. Auf den Instanzen TI01 und TI02 läuft die VIP Webapplikation und auf den Instanzen TI03 und TI04 läuft die FOO Webapplikation.
 
  Problem: Standard Loadbalancer
  Der Loadbalancer verteilt die Requests nach dem round-robin Prinzip. Dies entspricht der Standard-Konfiguration ohne explizite Loadbalancer.
  workers2.properties
[...]
# Define the TCP socket communication channel for the Tomcat Instance 1
[channel.socket:localhost:11004]
info=Ajp13 forwarding over a TCP socket.
tomcatId=tomcat_01
# tomcatId corresponds to jvmRoute in Tomcat instance server.xml file!
debug=0
lb_factor=1
[Analog Tomcat Instance 2, Tomcat Instance 3, Tomcat Instance 4]

[...]

# Map the Tomcat "VIP" webapp to the webserver uri space
[uri:/VIP/*]
info=Map the entire "VIP" webapp.

# Map the Tomcat "FOO" webapp to the webserver uri space
[uri:/FOO/*]
info=Map the entire "FOO" webapp.

[...]

  Der Standard Loadbalancer verteilt die Requests bei der obigen Konfiguration automatisch nach dem round-robin Prinzip. Wir rufen im Browser http://myHost/VIP auf und der Request wird an die Tomcat Instanz TI01 weitergeleitet. Auf TI01 läuft die VIP Webapplikation und der Aufruf wird korrekt verarbeitet.

Anschließend rufen wir im Browser http://myHost/FOO. Nach dem round-robin Prinzip wird dieser Request an die Tomcat Instanz TI02 weitergeleitet. Auf dieser Instanz läuft aber die Webapplikation VIP und nicht FOO. Der Aufruf wird von Tomcat mit einer entsprechenden Fehlermeldung quittiert. Wird jetzt nochmals http://myHost/FOO aufgerufen, wird dieser Request an die Tomcat Instanz TI03 weitergeleitet. Auf TI03 läuft die FOO Webapplikation und der Aufruf wird korrekt verarbeitet. Der nächste Request geht an TI04 und dann an TI01 usw.

Mit dem Standard Loadbalancer werden die Requests nicht zielgerichtet auf die entsprechenden Instanzen verteilt. Eine Einstellung über den Parameter lb_factor hilft hier auch nicht weiter. Es wird nur die Quantität der Requests bestimmt.

Falls über die Einstellung mittels lb_factor die Mehrzahl der Requests an TI01 weitergeleitet werden, werden beim Aufruf von http://myHost/FOO noch mehr Fehler produziert, da jetzt häufiger TI01 mit der VIP Applikation angesprochen wird als bei einer gleichmäßigen Verteilung der Requests.

  Lösung: Explizite Loadbalancer
  Der Standard Loadbalancer verteilt die Requests gleichmäßig auf alle vier Instanzen nach dem round-robin Prinzip.

workers2.properties
Zur Lösung dieses Problems müssen zwei explizite Loadbalancer, [lb:lb_VIP] und [lb:lb_FOO], konfiguriert und den URIs [uri:/VIP/*] und [uri:/FOO/*] entsprechend zugeordnet werden. Die expliziten Load­balancer funktionieren auch nach dem round-robin Prinzip, verteilen die Requests aber innerhalb einer festgelegten Gruppe. Ein Eintrag, group=lb_VIP und group=lb_FOO, in der connector service Kon­figuration der Instanzen bestimmt, welche Instanzen den Loadbalancern zugeordnet sind.

  #---- workers2.properties

# Define the TCP socket communication channel for Tomcat Instance 01
[channel.socket:localhost:11004]
info=Ajp13 forwarding over a TCP socket
tomcatId=tomcat_01
debug=0
group=lb_VIP
lb_factor=1

# Define the TCP socket communication channel for Tomcat Instance 02
[channel.socket:localhost:22004]
info=Ajp13 forwarding over a TCP socket
tomcatId=tomcat_02
debug=0
group=lb_VIP
lb_factor=1

# Define the TCP socket communication channel for Tomcat Instance 03
[channel.socket:localhost:33004]
info=Ajp13 forwarding over a TCP socket
tomcatId=tomcat_03
debug=0
group=lb_FOO
lb_factor=1

# Define the TCP socket communication channel for Tomcat Instance 04
[channel.socket:localhost:44004]
info=Ajp13 forwarding over a TCP socket
tomcatId=tomcat_04
debug=0
group=lb_FOO
lb_factor=1

[status:]
info=Status worker, displays runtime information.

[lb:lb_VIP]
info=Loadbalancer for VIP application.
debug=0

[lb:lb_FOO]
info=Loadbalancer for FOO application.
debug=0

[uri:/jkstatus/*]
info=Displays status information and checks the config file for changes.
group=status:

[uri:/VIP/*]
group=lb_VIP

[uri:/FOO/*]
group=lb_FOO

# Configure the shared memory file
[shm]
file=D:\SERVER\ApacheGroup\Apache2\logs\shm.file*
size=1048576
debug=0

#---- end of workers2.properties

Der Pfad* für die shm Datei muss entsprechend angepasst werden!!

Anmerkungen: Session
  Apache leitet HTTP Requests die für eine Tomcat Instanz bestimmt sind an das Modul mod_jk2. Dieses Modul untersucht das Session Cookie. Der jvmRoute Parameter gibt Auskunft darüber, von welcher Tomcat Instanz die Session erzeugt wurde. Somit werden alle Requests die zu einer Session gehören immer an dieselbe Tomcat Instanz weitergeleitet.
  Dieses Feature heißt bei Tomcat sticky session, ein anderer Begriff dafür ist session affinity. Über den Loadbalancer [lb: ...] in der workers2.properties Datei kann die sticky session konfiguriert werden. Standardmäßig ist sticky session aktiviert.
  In verteilten (distributable) Anwendungen ist dies die einzige sinnvolle Einstellung! Ansonsten wechselt der Benutzer eventuell mitten in seiner Session auf eine Tomcat Instanz, auf der die Session unbekannt ist, und alle Session Daten sind verloren.
  Trotz der sticky session ist ein Tomcat Cluster mit mehreren Instanzen nicht fehlertolerant (fault tolerant). Falls die Tomcat Instanz, welche die Session erzeugt hat ausfällt, wird der Benutzer automatisch an eine andere Tomcat Instanz weitergeleitet (failover). Die Session ist verloren, da die andere Tomcat Instanz die Session nicht kennt. Es findet keine session replication, also das Verteilen aller Sessions auf alle Tomcat Instanzen, statt.
  Das Modul mod_jk2 unterstützt keine session replication!
  Das Verteilen von Sessions auf alle Tomcat Instanzen muss durch den Einsatz weiterer Tools realisiert werden!
  webmaster@vawacon.de © 2001-2005 Van Waasen System Consulting