Implementierung mehrerer Tomcat-Instanzen auf einer einzigen Maschine

Implementierung mehrerer Tomcat-Instanzen auf einer einzigen Maschine

1. Einleitung

Zunächst müssen wir eine Frage beantworten: Warum mehrere Instanzen auf einer einzigen Maschine verwenden?
Wenn keine Ausfallzeiten vorliegen, gibt es in Webanwendungen mehrere Projekte. Ein Projekt kann aufgrund übermäßiger Speichernutzung oder anderer unvorhersehbarer Faktoren dazu führen, dass Tomcat abstürzt. Dann stürzen auch die Projekte unter demselben Tomcat ab. Wenn jedoch unterschiedliche Tomcats verwendet werden, ist jeder Tomcat-Prozess auf demselben Server unterschiedlich. Wenn ein Projekt ein Problem hat und Tomcat abstürzt, sind andere Projekte davon nicht betroffen, da sie sich in unterschiedlichen Prozessen befinden.
Eine weitere Frage ist, dass verschiedene Tomcats unterschiedliche Ports verwenden und es nur einen Domänennamen gibt. Wie wird dieser zugewiesen?
Tatsächlich wird hierbei der Reverse-Proxy von Nginx verwendet. Entsprechend dem Präfix der Anforderung kann er als Proxy zum Nginx-Server weitergeleitet werden, der dem entsprechenden Dienstport des Tomcat-Projekts entspricht.

2. Systemumgebung

System: 16.04.5 LTS
JDK-Version: openjdk 1.8
Tomcat-Version: Apache-Tomcat-9.0.13

3. Umweltkonstruktion

3.1. Laden Sie Tomcat herunter

Installieren Sie JDK:

apt-get installiere openjdk-8-jdk

Besuchen Sie die offizielle Website: https://tomcat.apache.org/download-90.cgi


Suchen Sie nach Core, klicken Sie auf tar.gz und kopieren Sie die Download-Adresse, wenn ein Download-Link angezeigt wird.
Laden Sie dann Tomcat mit dem Befehl herunter

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz

Tomcat entpacken:

tar -xzvf apache-tomcat-9.0.13.tar.gz

Erstellen Sie ein Programmverzeichnis:

##Erstellen Sie ein Programmverzeichnis mkdir /data

##Verschieben Sie die entpackte Datei in das Datenverzeichnis mv ./apache-tomcat-9.0.13 /data/

cp /etc/profile /etc/profile.bak
echo "export CATALINA_HOME=/data/apache-tomcat-9.0.13" >> /etc/profile
echo "export PATH=\$PATH:\$CATALINA_HOME/bin">> /etc/profile && Quelle /etc/profile
##Erstellen Sie die sh-Datei touch tomcat-start.sh tomcat-stop.sh

##Berechtigungen ändern chmod 760 /data/tomcat-start.sh /data/tomcat-stop.sh

Sichern Sie das Profil, schreiben Sie Tomcats CATALINA_HOME in die Umgebungsvariable und aktivieren Sie die Umgebungsvariable.

erstellen tomcat-start.sh, der Inhalt ist wie folgt:

#!/bin/bash
##CATALINA_BASE ist hier das übergeordnete Verzeichnis des aktuellen Skripts. Wenn es sich nicht im Unterverzeichnis von CATALINA_BASE befindet, denken Sie daran, Folgendes zu ändern: export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)

echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`

wenn [ -n "$TOMCAT_ID" ] ; dann
echo "tomcat($TOMCAT_ID) läuft noch, bitte zuerst herunterfahren";
 Ausgang 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`

wenn [ "$?" = "0" ]; dann
	echo "Shell-Skript: $0"
 echo "CATALINA_BASE: $CATALINA_BASE"
 echo "Tomcat-Thread: $TOMCAT_ID"
 echo "Start erfolgreich!!!"
anders
 echo "$0 $CATALINA_BASE-Start fehlgeschlagen"
 echo $TOMCAT_START_LOG
fi

erstellen tomcat-stop.sh, der Inhalt ist wie folgt:

#!/bin/bash
##CATALINA_BASE ist hier das übergeordnete Verzeichnis des aktuellen Skripts. Wenn es sich nicht im Unterverzeichnis von CATALINA_BASE befindet, denken Sie daran, Folgendes zu ändern: export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)

echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'`

wenn [ -n "$TOMCAT_ID" ] ; dann
TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh`
anders
 echo "Tomcat-Instanz nicht gefunden: $CATALINA_BASE"
 Ausfahrt
fi

wenn [ "$?" = "0" ]; dann
 echo "Shell-Skript: $0"
 echo "CATALINA_BASE: $CATALINA_BASE"
 echo "Stopp erfolgreich!!!"
anders
 echo "$0 $CATALINA_BASE-Stopp fehlgeschlagen"
 echo $TOMCAT_STOP_LOG
fi

Kopiere zwei Kater:

##Löschen Sie den Inhalt der Ordner „lib“ und „bin“ vollständig und erstellen Sie einen leeren Ordner „bin“. cp -r apache-tomcat-9.0.13 /data/apache-tomcat-test1 && cd /data/apache-tomcat-test1 && rm -rf lib/ bin/ && mkdir bin && cd -

##Kopieren Sie die Start- und Stoppskripte in den Bin-Ordner, kopieren Sie sie mit den Berechtigungen cp -p tomcat-start.sh tomcat-stop.sh /data/apache-tomcat-test1/bin/

##Kopieren Sie dasselbe Tomcat-Verzeichnis mit den Berechtigungen cp -Rp /data/apache-tomcat-test1/ /data/apache-tomcat-test2/

Konfigurieren Sie den server.xml-Port

Wie Sie wissen, müssen verschiedene Tomcats, die auf demselben Server bereitgestellt werden, unterschiedliche Ports festlegen, da es sonst zu Portkonflikten kommt. Daher müssen wir nur die ersten drei Ports in conf/server.xml ändern. Aber es gibt vier davon:

  • Server-Port: Dieser Port wird verwendet, um auf den Shutdown-Befehl zum Herunterfahren von Tomcat zu warten. Der Standardwert ist 8005.
  • Connector-HTTP-Port: Dieser Port wird zum Abhören von HTTP-Anfragen verwendet. Der Standardwert ist 8080.
  • Connector AJP-Port: Dieser Port wird verwendet, um auf Anfragen des AJP-Protokolls (Apache JServ Protocol) zu warten. Er wird normalerweise verwendet, um andere HTTP-Server wie Apache Server zu integrieren. Der Standardport ist 8009.
  • Umleitungsport: Umleitungsport, erscheint in der Connector-Konfiguration. Wenn der Connector nur normale HTTP-Anfragen ohne SSL unterstützt, leitet der Port HTTPS-Anfragen an den durch den Umleitungsport angegebenen Port weiter. Der Standardwert ist 8443.

Unkommentierte Version:

<?xml version="1.0" encoding="UTF-8"?>
<Server-Port="8005" shutdown="HERUNTERFAHREN">
 <Listener-Klassenname="org.apache.catalina.startup.VersionLoggerListener" />
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
 <Listener-Klassenname="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
 <Listener-Klassenname="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
 <Listener-Klassenname="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 <GlobalNamingResources>
 <Ressourcenname="Benutzerdatenbank" auth="Container"
    Typ="org.apache.catalina.UserDatabase"
    Beschreibung="Aktualisierbare und speicherbare Benutzerdatenbank"
    Fabrik="org.apache.catalina.users.MemoryUserDatabaseFactory"
    Pfadname="conf/tomcat-users.xml" />
 </GlobalNamingResources>
 <Dienstname="Catalina">
 <Anschlussport="8080" Protokoll="HTTP/1.1"
    VerbindungsTimeout="20000"
    UmleitungsPort="8443" />
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 <Engine-Name="Catalina" Standardhost="localhost">
  <Realm-Klassenname="org.apache.catalina.realm.LockOutRealm">
  <Realm-Klassenname="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="Benutzerdatenbank"/>
  </Reich>
  <Hostname="localhost" appBase="webapps"
   unpackWARs="true" autoDeploy="true">
  <Valve-Klassenname="org.apache.catalina.valves.AccessLogValve" Verzeichnis="Protokolle"
    Präfix="localhost_access_log" Suffix=".txt"
    Muster="%h %l %u %t &quot;%r&quot; %s %b" />
  </Host>
 </Engine>
 </Dienst>
</Server>

tomcat-test1 wird geändert in:

  • Server-Port: 9015
  • HTTP-Anschluss des Connectors: 9010
  • Anschluss AJP-Port: 9019

tomcat-test2 wird geändert in:

  • Server-Port: 9025
  • HTTP-Anschluss des Connectors: 9020
  • Anschluss AJP-Port: 9029

Ändern Sie das Logo:

echo "test1"> /data/apache-tomcat-test1/webapps/ROOT/index.jsp
echo "test2"> /data/apache-tomcat-test2/webapps/ROOT/index.jsp

Nachdem die Änderung abgeschlossen ist, starten Sie Tomcat:

/data/apache-tomcat-test1/bin/tomcat-start.sh
/data/apache-tomcat-test2/bin/tomcat-start.sh


Der Curl-Prozess ist relativ langsam, da er noch nicht abgeschlossen ist. Nach dem Starten ist alles ok.

Locken 127.0.0.1:9010
Locken 127.0.0.1:9020

Beachten Sie, dass der Zugriffsport hier der Port ist, der Connector HTTP Port entspricht.

4. Nachtrag

Tatsächlich ist die Einrichtung nicht schwierig. Gemäß der Idee des Referenzartikels besteht sie darin, eine Tomcat-Bibliothek und einen Tomcat-Bin gemeinsam zu nutzen. Auf diese Weise müssen Sie beim Upgrade nur die Bibliothek ersetzen, und der Bin verwendet dasselbe Skript wie CATALINA_HOME. Tatsächlich rufen die Start- und Herunterfahrskripte unter dem Bin unter CATALINA_HOME einheitlich catalina.sh auf, und das System mit mehreren Instanzen auf einer Maschine巧妙運用了catalina.sh是通過環境中的CATALINA_HOME和CATALINA_BASE變量啟動tomcat的. Durch改變CATALINA_BASE的路徑達到同一條腳本啟動tomcat在不同目錄下.

5. Frage

5.1. Tomcat startet langsam

Es ist ersichtlich, dass die Gesamtzeit der Anwendungsbereitstellung erheblich zunimmt, da die Generierung der Sitzungs-ID 1 Minute und 6 Sekunden dauert, was zu lang ist. Dieses Problem kann gelöst werden, indem beim Starten der Anwendung der JVM-Parameter -Djava.security.egd=file:/dev/./urandom hinzugefügt wird. Dies schwächt jedoch die Fähigkeit der Anwendung, Zufallszahlen zu generieren, oder die Zufälligkeit ist nicht gleichmäßig genug, was Auswirkungen auf die Sicherheit von Anwendungen haben kann, die häufig Verschlüsselung verwenden.
Ändern Sie das Startskript und fügen Sie die Einstellung JAVA_OPTS hinzu. JAVA_OPTS kann verwendet werden, da catalina.sh diese Variable liest.

#!/bin/bash
##CATALINA_BASE ist hier das übergeordnete Verzeichnis des aktuellen Skripts. Wenn es sich nicht im Unterverzeichnis von CATALINA_BASE befindet, denken Sie daran, Folgendes zu ändern: export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)
echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`

export JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom";

wenn [ -n "$TOMCAT_ID" ] ; dann
echo "tomcat($TOMCAT_ID) läuft noch, bitte zuerst herunterfahren";
 Ausgang 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`

wenn [ "$?" = "0" ]; dann
  echo "Shell-Skript: $0"
 echo "CATALINA_BASE: $CATALINA_BASE"
 echo "Tomcat-Thread: $TOMCAT_ID"
 echo "Start erfolgreich!!!"
anders
 echo "$0 $CATALINA_BASE-Start fehlgeschlagen"
 echo $TOMCAT_START_LOG
fi

5.2. Bei der Verwendung von Remote-SSH werden die Umgebungsvariablen nicht wirksam

Verwenden Sie den Quellbefehl, um die aktuellen Umgebungsvariablen zu aktualisieren.

Die spezifischen Änderungen sind wie folgt:

tomcat-start.sh :

#!/bin/bash
##CATALINA_BASE hier ist das übergeordnete Verzeichnis des aktuellen Skripts. Wenn es sich nicht im Unterverzeichnis von CATALINA_BASE befindet, denken Sie daran, die Quelle /etc/profile zu ändern
export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)
export JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom";
TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`

Echo "----------------------------------"
echo "Verwende CATALINA_BASE:$CATALINA_BASE"
echo "Verwende CATALINA_HOME:$CATALINA_HOME"
Echo "----------------------------------"

wenn [ -n "$TOMCAT_ID" ] ; dann
echo "tomcat($TOMCAT_ID) läuft noch, bitte zuerst herunterfahren";
 Ausgang 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`

wenn [ "$?" = "0" ]; dann
	echo "Shell-Skript: $0"
 echo "Tomcat-Thread: $TOMCAT_ID"
 echo "Start erfolgreich!!!"
anders
 echo "$0 $CATALINA_BASE-Start fehlgeschlagen"
	echo "CATALINA_BASE: $CATALINA_BASE"
 echo $TOMCAT_START_LOG
fi

tomcat-stop.sh

#!/bin/bash
## CATALINA_BASE ist hier das übergeordnete Verzeichnis des aktuellen Skripts. Wenn es sich nicht im Unterverzeichnis von CATALINA_BASE befindet, denken Sie daran, die Quelle /etc/profile zu ändern
export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)
TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'`

Echo "----------------------------------"
echo "Verwende CATALINA_BASE:$CATALINA_BASE"
echo "Verwende CATALINA_HOME:$CATALINA_HOME"
Echo "----------------------------------"

wenn [ -n "$TOMCAT_ID" ] ; dann
TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh`
anders
 echo "Tomcat-Instanz nicht gefunden: $CATALINA_BASE"
 Ausfahrt
fi

wenn [ "$?" = "0" ]; dann
 echo "Shell-Skript: $0"
 echo "Stopp erfolgreich!!!"
anders
 echo "$0 $CATALINA_BASE-Stopp fehlgeschlagen"
	echo "CATALINA_BASE: $CATALINA_BASE"
 echo $TOMCAT_STOP_LOG
fi

Hängen Sie das Neustartskript an:
tomcat-restart.sh :

#!/bin/bash

Quelle /etc/Profil
export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd)
GRÜNE_FARBE='\E[1;32m' # Grün RES='\E[0m'

TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`

SLEEP_TIME = 1

Echo "----------------------------------"
echo "Verwende CATALINA_BASE:$CATALINA_BASE"
echo "Verwende CATALINA_HOME:$CATALINA_HOME"
Echo "----------------------------------"

wenn [ -n "$TOMCAT_ID" ] ; dann
 echo -e "${GREEN_COLOR}Tomcat-Instanz in PID $TOMCAT_ID gefunden, jetzt herunterfahren!${RES}";
 echo -e "${GREEN_COLOR}---------------Herunterfahren starten-------------------${RES}"
 Quelle $(Verzeichnisname $0)/tomcat-stop.sh;
 echo -e "${GREEN_COLOR}--------------- Ende des Herunterfahrens -------------------${RES}"
fi

während [ -n "$TOMCAT_ID" ]
Tun 
 schlafen $SLEEP_TIME
 echo warte "$SLEEP_TIME" s
 TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`
Erledigt 

echo -e "${GREEN_COLOR}----------------Start Start-------------------${RES}"
Quelle $(Verzeichnisname $0)/tomcat-start.sh
echo -e "${GREEN_COLOR}----------------Start beenden-------------------${RES}"

Referenzblog:

Lassen Sie uns über Tomcats Einzelmaschine mit mehreren Instanzen sprechen

Langsamer Start der Spring Boot-Anwendung beim ersten Mal

Dies ist das Ende dieses Artikels über die Implementierung mehrerer Instanzen von Tomcat auf einer einzelnen Maschine. Weitere relevante Inhalte zu mehreren Instanzen von Tomcat auf einer einzelnen Maschine finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des Shell-Skripts zum Bereitstellen mehrerer Instanzen eines einzelnen Tomcat unter Linux
  • Detaillierte Erläuterung des Prozesses zur Bereitstellung von Tomcat und zur Erstellung des ersten Webprojekts in IDEA 2020.3.1
  • Wo wird der von IntelliJ IDEA mit Tomcat bereitgestellte Projektspeicherort verwendet?
  • Grundsätze für die Bereitstellung und Konfiguration mehrerer Tomcat-Instanzen

<<:  js, um einen Ein- und Ausblendeffekt des Bildes zu erzielen

>>:  Warum MySQL große Transaktionen vermeiden sollte und wie man sie löst

Artikel empfehlen

Zusammenfassung der HTML-Formatierungsstandards für webbasierte E-Mail-Inhalte

1. Seitenanforderungen 1) Verwenden Sie standardm...

Forschung zur Größe von Webseiten

<br />Statistiken zufolge hat sich die durch...

Node.js verwendet die Express-Fileupload-Middleware zum Hochladen von Dateien

Inhaltsverzeichnis Initialisieren des Projekts Sc...

Vue verwendet Canvas, um den Bildkomprimierungs-Upload zu realisieren

In diesem Artikel wird der spezifische Code von V...

So löschen Sie eine MySQL-Tabelle

Das Löschen einer Tabelle in MySQL ist sehr einfa...

Starten Sie die auf Docker basierende nginxssl-Konfiguration

Voraussetzungen Ein Cloud-Server (centOS von Alib...

Einführung in die SSL- und WSS-Schritte für die Nginx-Konfiguration

Inhaltsverzeichnis Vorwort 1. Nginx-Installation ...

Zwei Möglichkeiten zum vollständigen Löschen von Benutzern unter Linux

Linux-Betrieb Experimentelle Umgebung: Centos7-Vi...

js-Objekt, um einen Daten-Paging-Effekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Richtige Schritte zur Installation von Nginx unter Linux

Vorwort Wenn Sie wie ich ein fleißiger Java-Backe...

HTML löst das Problem ungültiger Tabellenbreiteneinstellungen

Wenn Sie den Stil „table-layer:fixed“ für eine Ta...

Führen Sie die Initialisierungs-SQL aus, wenn Docker MySQL startet

1. Ziehen Sie das Mysql-Image docker pull mysql:5...

W3C Tutorial (4): W3C XHTML Aktivitäten

HTML ist eine Hybridsprache, die zum Veröffentlic...