HOWTO: Mehrere Tomcat-Instanzen einrichten

Dieses HOWTO beschreibt, wie man mehrere Tomcat-Instanzen einrichtet und dient als Vorbereitung für die SOAP-Bibelstunden.
Mehrere Tomcat-Instanzen sind nützlich, um sich die Original-Installation nicht zu zerkonfigurieren, bzw. um eigene Tomcat-Instanzen für bestimmte User Accounts oder Übungen zu reservieren. Stürzt eine Umgebung ab, reißt sie erstens nicht die anderen mit, und sie lässt sich eventuell aus der Originalkonfiguration wieder restaurieren.
Es ist eine häufig anzutreffende Anforderung in Umgebungen, wo sich mehrere Entwickler/Tester/Kunden/Projekte einen Entwicklungsserver teilen müssen, die sich aber nicht gegenseitig stören sollen.
 

Voraussetzungen:

Dieses HOWTO basiert auf Erfahrungen mit Tomcat 4.0.3 auf SuSE Linux 7.2 / 7.3

Tomcat soll bereits als Stand-Alone-Server installiert sein.
Man braucht zumindest Leserechte im Verzeichnis
/usr/local/jakarta-tomcat-4.0.3 , das unser CATALINA_HOME Verzeichnis wird.
Wer Platz sparen muss oder will, kann alle Dateien in den Verzeichnissen /logs und /work löschen - werden nicht unbendingt benötigt.
 

Isolation der Original-Tomcat-Instanz als Vorbereitung für die weiteren Instanzen

In Tomcat 4.0 kann man auf einfache Weise die Software (Java-Klassen usw.) ein EINZIGES Mal installieren und dann verschiedene, vollkommen getrennt konfigurierte INSTANZEN des Servers laufen lassen (natürlich dürfen die sich nicht gegenseitig bestimmte Ressourcen wie Ports, Temp-Verzeichnisse, JSP-Repositories usw. wegfressen).
Dazu ist es notwendig, die von allen Instanzen geteilten Zweige in einem Directory zu belassen, welches beim Tomcat- Start unter der Umgebungsvariablen CATALINA_HOME referenziert wird. Die instanzspezifischen Files (in Conf, Temp, Logs) werden in einem Verzeichnis abgelegt, das in der Umgebungsvariablen CATALINA_BASE festgelegt ist. Ausserdem braucht man noch JAVA_HOME, aber das ist überall gleich.
Mit diesen drei Variablen kann man dann Tomcat INSTANZSPEZIFISCH betreiben. Am einfachsten ist es, CATALINA_HOME einem anderen User zu geben und für den Rest Read-only zugänglich zu machen. CATALINA_BASE kann man dann nach Belieben plätten.

Dazu muss man folgende Schritte ausführen:

  1. Im Verzeichnis CATALINA_HOME,in unserem Beispiel /usr/local/jakarta-tomcat-4.0.3, legt man ein Unterverzeichnis für die Instanzen an: /instances.
  2. Um uns die Originalkonfiguration als Backup zu erhalten, legen wir in/instances das Verzeichnis /original an.
  3. Im Verzeichnis /original legen wir die folgenden Unterverzeichnisse an:
     
  4. Das Verzeichnis /original sollte man jetzt sichern, indem man es z.B. gezippt an einen sicheren Ort ablegt. Das Verzeichnis /original kann nun als neue Instanz kopiert und für diese Instanz angepasst werden.

Übersicht über den neuen Verzeichnisbaum /instances

So sollte der neue Verzeichnisbaum jetzt aussehen. Durch Klick auf die Dateinamen kann man einen Blick auf Beispieldateien werfen.

-   original -  webapps
  -  conf -  server.xml
    -  tomcat-users.xml
    -  web.xml
     
  -  bin -  init.sh
    -  startup.sh
    -  shutdown.sh
    -  clean.sh
    -  environment.sh
-   instance 1        
-   instance 2        
-  ...        

 

 

Anhang: Mehrere Tomcat-Instanzen GLEICHZEITIG laufen lassen

In Tomcat 4.0 kann man auch verschiedene, vollkommen getrennt konfigurierte INSTANZEN des Servers GLEICHZEITIG laufen lassen (natürlich dürfen die sich nicht gegenseitig bestimmte Ressourcen wie Ports, Temp-Verzeichnisse, JSP-Repositories usw. wegfressen).
Die Standard-Datei server.xml, die mit Tomcat installiert wird, ist nicht für eine solche geteilte Server-Umgebung gemacht. Daher muss man sich die Datei server.xml für jede Instanz anpassen.:

Und zwar müssen der <Server> und der < Connector> jeweils eine einmalig vorkommende Portnummer bekommen, also beispielsweise 8010 und 8011 für Instanz 1, 8012 und 8013 für Instanz 2 usw.

Auszug aus der server.xml:

...
<Server port="8005 8010" shutdown="SHUTDOWN" debug="0">
...
<Service name="Tomcat-Standalone">
...
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8080 8011" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="60000"/>
...

17-03-2002   Petra Haberer