5. Februar 2012  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!

Apache 1.3 + Tomcat 4 mehrfach instanziiert

von el_gitano,  12.02.2003 18:11:34  (4 votes) Kommentare (1)  [vote]
Idee:
die in Tomcat4 implementierte Container-Engine vernünftig nutzen, und mehrere Tomcat-Instanzen (nicht Servlets) gleichzeitig nebeneinander laufen zu lassen. Ausserdem den Apache davorschalten mit ein paar virtual-Domains,
die die Requests durchreichen.

Unterschied zu Tomcat 3.3.x:
Man konnte damals
nur mehrere Servlets auf einem Tomcatserver laufen lassen - diese haben sich zwar nicht gestört, mussten aber bei Neustart des Tomcat-servers alle neu geladen werden (bzw. waren alle von der gleichen Engine abhängig).
Tomcat4 gibt die Möglichkeit mehrfach mit verschiedenen Einstellungen gestartet zu werden.
So kann man verschiedene Instanzen durch verschiedene User administrierbar machen - was entscheidende Vorteile bei der Entwicklung verschiedener Applikationen auf
einem einzigen Server bringt.

Wie richte ich mehrere verschiedene Instanzen ein?!
Recht gut erklärt wird das auf dieser Seite:
http://www.mitlinx.de/webservices/howto_mehrere_tomcat_instanzen_betreiben.htm

Liest man sich die oben genannte Page gut durch
und verfährt mit seinen Applikationen genau wie es beschrieben ist,
ist man schon recht weit!

Es treten allerdings ganz heftige Probleme auf,
wenn man den Warp- (ist vorerst sowieso abzuraten) oder den Ajp13-Connector nicht richtig konfiguriert.
Wichtig ist, JEDER Instanz VERSCHIEDENE Connector-Ports zuzuweisen!
Sonst kommt man aus den "BindSocket"-Fehlern nicht mehr raus...

Da wir das ganze ja auchnoch hinter einen Apache hängen wollen und mit virtual-Domains ansprechen,
werden wir jeder Instanz einen eigenen Host-Namen zuweisen.
Die entsprechenden Stellen in den server.xml der
einzelnen Instanzen sehen dann also so aus:

# Connectoren
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
              port="9001" minProcessors="5" maxProcessors="75"
              acceptCount="10" debug="0"/>

# der AJP 1.3 Connector ist ursprünglich auf Port 8009.
# Für diese Instanz wählen wir aber einen anderen - etwa die 9001.
# Dieser Port darf aber von keinem anderen Programm verwendet werden.
# Bei einer weiteren Instanz wählen wir den Port 9002, dann 9003 usw...
# Alles andere lassen wir unangetastet.

# Virtual Domains
      <Host name="test1.halleluja.net" debug="0" appBase="webapps" unpackWARs="true">

# in der Zeile der Host-definition ändern wir lediglich den Wert von "name" von "localhost" auf die
# virtuelle Domain, die wir später verwenden möchten, in diesem Fall "test1.halleluja.net".
# eine weitere Instanz würde dann zum beispiel als "test2.halleluja.net" angesprochen... usw...

# den AJP-Listener einschalten
        <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" append="true" />

# diese Zeile fügt ihr einfach unter die oben dargestellte "Host"-Zeile ein.
# sie sichert, dass die Instanz auf Aufrufe über den AJP-Connector reagiert.


so, das schwierigste wäre geschafft...

jetzt braucht man noch die Verbindung
zwischen Apache und Tomcat - die mod_jk
(die würde ich jetzt mal empfehlen, aber es gibt da noch ein paar mehr!)
hier die für dein System beste runterladen:
http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/

und diese dann in einen gut zu merkenden Pfad ablegen...
(ich hab sie z.B. im $TOMCAT_HOME/mod_jk/ abgelegt, da finde ich sie garantiert immer wieder - eigendlich gehört sie aber ins libexec/ von Apache)

Im gleich Verzeichnis (nur der Ordnung wegen) erstellen wir jetzt noch eine "workers.properties" - Datei.
Also:
Datei workers.properties anlegen mit folgendem Inhalt:

workers.tomcat_home=/usr/local/... # Euer $TOMCAT_HOME
workers.java_home=$JAVA_HOME # dürfte klar sein
worker.list=ajp13_1, ajp13_2 # für jede Instanz eine eigene Bezeichnung!

# so, und jetzt wiederholen wir den folgenden Absatz
# für jede Instanz einmal, und
# tragen bei ".port" diejenigen Ports ein,
# welche wir vorher in den server.xml's der
# Instanzen an den AJP1.3-Connector vergeben haben.
# in diesem Fall einmal 9001 und einmal 9002
# Als ".host" wird in diesem Fall nicht die virtuelle Domäne, sondern der Engine-Host eingetragen, und der ist in diesem und
# im Standartfall "localhost"
# Der Typ ist natürlich "ajp13"

worker.ajp13_1.port=9001
worker.ajp13_1.host=localhost
worker.ajp13_1.type=ajp13


# Instanz 2 sieht folglich so aus:
worker.ajp13_2.port=9002
worker.ajp13_2.host=localhost
worker.ajp13_2.type=ajp13

usw...

Nun machen wir uns an den Apache!
Wir öffnen jetzt mal ganz behutsam die
httpd.conf (ist die Apache-Config-Datei, und
sollte jedem Server-admin bestens bekannt sein...).

Ans Ende fügen wir einfach ein paar Zeilen hinzu,
und zwar folgende:

LoadModule jk_module /../mod_jk.so # Das Verzeichnis, woimmer ihr auch eure mod_jk abgelegt habt
AddModule mod_jk.c  # nix ändern


JkWorkersFile /../mod_jk/workers.properties # das Verzeichnis, in welchem die "workers.properties" liegt
JkLogFile    /../apache/logs/mod_jk.log # und die Datei, in welche Apache schimpfen darf...
JkLogLevel    info

<IfModule mod_jk.c>
    DirectoryIndex index.html index.htm index.jsp index.php index.php4
</IfModule>

# jetzt legen wir die Virtual-Domain für die erste Instanz an!

<VirtualHost 217.160.xxx.xxx:80>  # einen virtuellen Host im Apche anlegen für die lokale IP (man könnte auch localhost schreiben) auf dem gewünschten Port
  SSLEngine      off              # SSL aus
  DocumentRoot  /home/apps/test1/ # das Webapp-Verzeichnis für die erste Instanz
  ServerName    test1.halleluja.net # die virtuelle Domäne welche abgehört wird
  JkMount /*.jsp ajp13_1          # auf welchen AJP soll ich denn hören??? - den ajp13-worker der ersten Instanz aus der workers.properties eintragen
  JkMount /servlet/* ajp13_1      # das gleiche...
</VirtualHost>

# die der zweiten instanz würde dann also so aussehn:

<VirtualHost 217.160.xxx.xxx:80>
  SSLEngine      off
  DocumentRoot  /home/apps/test2/
  ServerName    test2.halleluja.net
  JkMount /*.jsp ajp13_2
  JkMount /servlet/* ajp13_2
</VirtualHost>


und so weiter...
Ich denke, man blickt durch.

so, dann starten wir jetzt mal die Tomcat-Instanzen, und ein wenig später den Apache...

Eingendlich sollte man jetzt über "http://test1.halleluja.net" die erste Instanz des Tomcat über den Apache geliefert bekommen und über "http://test2.halleluja.net"  die
zweite...
viel Erfolg!

Bei weiteren Fragen - meldet euch!

n.spataro@gmx.net

bye...
[Druckansicht]    [Beitrag versenden]
<< zurück  Kommentieren

Kommentare zu diesem Eintrag
Re: Apache 1.3 + Tomcat 4 mehrfach instanziiert
tomjuan, 24.11.2003 20:34:44

Danke für das gute Howto! Funktioniert wirklich
super.

Eine Frage hätte ich allerdings schon: Mir ist
aufgefallen, dass jede Instanz ohne Applikation
schon ca. 26MB Speicher verbraucht. 
Bei 10 Instanzen sind das 260MB Speicher! Und da
läuft noch nicht mal ein Servlet.

Gibt es eine Möglichkeit Tomcat oder die JVM
besser zu konfigurieren um etwas Speicher zu
sparen? 
Nachdem jede Instanz einen eigenen Linux-Prozess 
darstellt wird dies vermutlich nur schwer oder
gar nicht gehen.

Bin für jeden Tip und Hinweis sehr sehr dankbar!

Danke
tomjuan@gmx.at


<< zurück


Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer Homepage angebrachten Links

Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig- und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes. Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.

Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation. Other trademarks and registered trademarks are the property of their respective owners.