Wenn Sie Tomcat in einem Cluster mit mehreren Instanzen betreiben, müssen Sie die Dokumente in der jew. Tomcat Instanz einzeln hochladen, oder eine automatische Synchronisierung von der "Mutter-Instanz" zu den anderen Tomcats einrichten, z.B. mit rsync oder git. Der betr. Ordner lautet .../webapps/superx/WEB-INF/downloads.
Für rsync haben wir ein entsprechendes Script als Muster vorbereitet. Es läuft auf einer "Mutterinstanz" und holt sich zunächst alle Änderungen von den anderen Instanzen. Danach verteilt es die Dateien wieder auf alle Instanzen. Sie können den Quellcode unten herunterladen und
- z.B. auf der "Mutterinstanz" in der Datei /var/lib/tomcat9/sync_downloads.sh speichern.
- machen Sie es ausführbar mit "chmod +x /var/lib/tomcat9/sync_downloads.sh"
- In dem Script setzen Sie die Pfade entsprechend Ihrer Installation, und in der Variablen
- INSTANZEN tragen Sie die Hostnamen der Tomcat-Instanzen ein (oder IP-Nr.)
- Auf den Instanzen tragen Sie den SSH-Public-Key der Mutterinstanz ein
- In /etc/passwd müssen Sie dem User "tomcat" eine Login Shell geben
- Ggf. setzen Sie auch RSYNC_OPT="--dry-run", um den Lauf ohne Änderungne im Dateisystem zu testen.
- Nach einem Test können Sie das Script auch in die crontab übernehmen und z.B. alle 10 Minuten ausführen (siehe Kommentar im Script)
#!/bin/bash #Beispielscript zum Synchronisieren von Downloads: #Das Script liegt z.B. in /var/lib/tomcat9/sync_downloads.sh #nimmt als Beispielszenario folgende Einstellungen (Pfade und Hostnamen ggf. ändern) #die Webanwendung liegt in /var/lib/tomcat9/webapps/superx #Es gibt eine "Mutterinstanz" mit dem Hostnamen "quelltomcat1", #auf dieser Instanz liegt das Script #Die Ziel-Tomcat-Instanzen lauten haben den Hostnamen zieltomcat1, zieltomcat2 etc. #Der User Tomcat hat eine Login Shell, und der Public Key vom Quellrechner ist auf den Zielrechnern in der Datei TOMCAT_HOME/.ssh/authorized_keys hinterlegt #Beispiel für cronjobs auf Produktiv-Systemen #z.B. alle 10 Minuten: #0-59/10 * * * * /var/lib/tomcat9/sync_downloads.sh declare -a INSTANZEN=( zieltomcat1 zieltomcat2 zieltomcat3 ) echo "zuerst Dateien von allen Instanzen holen:" let ANZAHL=${#INSTANZEN[*]}-1 for i in 0 $(seq $ANZAHL); do INSTANZ=${INSTANZEN[$i]} rsync -rauvg $RSYNC_OPT -e ssh tomcat@"$INSTANZ":/var/lib/tomcat9/webapps/superx/downloads/* /var/lib/tomcat9/webapps/superx/downloads done echo "dann verteilen auf alle Instanzen:" for i in 0 $(seq $ANZAHL); do INSTANZ=${INSTANZEN[$i]} rsync -rauvg $RSYNC_OPT -e ssh /var/lib/tomcat9/webapps/superx/downloads/* tomcat@"$INSTANZ":/var/lib/tomcat9/webapps/superx/downloads/ done
Das Script soll nur als "Inspiration" dienen, ggf. wollen Sie es noch anpassen, z.B. wenn die Tomcat Instanzen unterschiedliche Zielpfade haben.