Detaillierte Erläuterung der Konfigurationsmethode für den Lastenausgleich von Apache + Tomcat7 unter Windows

Detaillierte Erläuterung der Konfigurationsmethode für den Lastenausgleich von Apache + Tomcat7 unter Windows

Vorbereitung

Windows Server 2008 R2 Enterprise (2,40 GHz, 8 GB, 64 Bit, 192.168.10.212)
2 Ubuntu 10.04.4 (192.168.10.98, 192.168.10.137)
JDK1.7.80
Tomcat7.0.68
Apache 2.4.4

1. Installieren Sie Apache 2.4.4

Während des Installationsvorgangs gibt es nichts zu beachten, klicken Sie einfach immer wieder auf „Weiter“. Nach Abschluss der Installation ist der Apache-Dienst standardmäßig aktiviert. Sie können localhost oder 127.0.0.1 in den Browser eingeben und die Worte „Es funktioniert“ werden angezeigt.

2. Java-Umgebung

Es gibt viele Konfigurationen für Ubuntu im Internet, daher werde ich nicht ins Detail gehen, aber denken Sie daran, JAVA_HOME und PATH zu konfigurieren

3.Tomcat-Installation

Entpacken Sie es einfach in das Verzeichnis. Mein Verzeichnis ist /opt/tomcat7/. Ich habe es auf beiden Ubuntu-Systemen entpackt. Möglicherweise stoßen Sie auf das Problem unzureichender Berechtigungen. Zu diesem Zeitpunkt müssen Sie Befehle eingeben. Der einfachste und brutalste ist sudo chmod 777 directory. Aus Sicherheitsgründen sollten Sie die Autorisierung ordnungsgemäß vornehmen, daher werde ich es hier nicht erwähnen.

Konfiguration starten

Apache-Konfiguration

1. Öffnen Sie zunächst einige notwendige Modulkommentare (entfernen Sie einfach das #-Zeichen davor) in der Datei conf/httpd

Lademodul proxy_module module/mod_proxy.so
Lademodul proxy_ajp_module module/mod_proxy_ajp.so
Lademodul proxy_balancer_module module/mod_proxy_balancer.so
Lademodul proxy_connect_module module/mod_proxy_connect.so
Lademodul slotmem_shm_module module/mod_slotmem_shm.so
Lademodul lbmethod_byrequests_module module/mod_lbmethod_byrequests.so

Hier erwähne ich die letzten beiden. Ich habe nur die ersten geöffnet und Apache konnte nicht gestartet werden.

Ich habe das Protokoll überprüft und festgestellt, dass immer wieder der Fehler „Anbieter ‚shm‘ für ‚slotmem‘ konnte nicht gesucht werden: Ist mod_slotmem_shm geladen??“ gemeldet wurde. Ich habe nachgesehen und festgestellt, dass das Modul nicht aktiviert war. Wenn ich das #-Zeichen entfernt hätte, wäre der Fehler nicht gemeldet worden.

Ein weiterer Grund ist, dass der Fehler (22) Ungültiges Argument: AH01183: Balancer kann nicht freigegeben werden gemeldet wird. Nach dem Öffnen dieses Moduls wird der Fehler nicht mehr gemeldet.

2. Entfernen Sie die Kommentarzeichen bei „Virtuelle Hosts“ in der Datei „conf/httpd“

Entfernen Sie das # vor Include

3. Fügen Sie die Konfiguration in conf/extra/httpd-vhosts.conf hinzu

Lassen Sie mich zuerst meine eigene Konfiguration posten.

<VirtuellerHost *:80>
  ServerAdmin [email protected]
  ProxyPass / Balancer: // Cluster / Stickysession = JSESSIONID | jsessionid nofailover = Ein
  ProxyPassReverse / Balancer: // Cluster /
  Servername 192.168.10.212
  Fehlerprotokoll „logs/error.log“
  CustomLog "logs/access.log" allgemein
</VirtualHost>
ProxyRequests aus
<Proxy-Balancer://Cluster>
  BalancerMember ajp://192.168.10.98:8009 Auslastung=1 Route=jvm1 smax=5 max=20 ttl=120 Wiederholung=300 Timeout=15
  BalancerMember ajp://192.168.10.137:8009 Auslastung=1 Route=jvm2 smax=5 max=20 ttl=120 Wiederholung=300 Timeout=15
</Proxy>

ProxyPass: Ordnet den Remote-Server dem URL-Bereich des lokalen Servers zu

balancer:// : Proxy-Anweisungstyp

stickysession: Name der Sticky-Sitzung des Balancers. Dieser Wert wird häufig auf etwa JSESSIONID oder PHPSESSIONID eingestellt, abhängig vom Back-End-Anwendungsserver, der Sitzungen unterstützt. Wenn der Backend-Server unterschiedliche Cookie-Namen oder URL-codierte IDs verwendet (z. B. ein Servlet-Container), trennen Sie sie mit |. Der erste Teil ist für das Cookie, der zweite für den Pfad.

nofailover: Wenn auf „Ein“ gesetzt, wird die Sitzung sofort beendet, wenn der Worker deaktiviert wird oder ein Fehler auftritt. Sie können diesen Wert auf „Ein“ setzen, wenn der Back-End-Server keine Sitzungsreplikation unterstützt.

ProxyRequests: Wenn Sie die ProxyPass-Direktive verwenden, sollte die ProxyRequests-Direktive normalerweise deaktiviert werden.

BalancerMember: Balancer-Mitglied

loadfactor: Auslastungsfaktor der Arbeitseinheit. Wird für BalancerMember verwendet. Es handelt sich um eine Zahl zwischen 1 und 100, die die normalisierte Gewichtsbelastung dieses Arbeiters definiert.

Route: Die Route des Workers, die im Load Balancer verwendet wird. Die Route ist ein Wert, der an die Sitzungs-ID angehängt wird.

smax: Erstellen Sie nach Bedarf bis zur maximalen Anzahl von Links (Soft Maximum oder smax). Jedem Link, der die Smax-Zahl überschreitet, wird eine Lebensdauer oder TTL zugewiesen.

max: Der Standardwert ist die Anzahl der Threads pro Prozess im aktuellen MPM. Im Prefork MPM ist dieser Wert immer 1 und im Worker MPM wird dieser Wert durch ThreadsPerChild gesteuert.

ttl: Time To Live (TTL) für inaktive Links, die die maximale Anzahl an Verbindungen überschreiten, in Sekunden. Apache schließt während dieser Zeit alle Verbindungen, die nicht verwendet wurden.

Wiederholung: Das Timeout für den Wiederholungsversuch des Thread-Pool-Workers in Sekunden. Wenn der Thread-Pool-Worker-Status für den Backend-Server ein Fehler ist, sendet Apache keine Anfragen an den Server, bis das Timeout abgelaufen ist. Dadurch kann der Backend-Server zu Wartungsarbeiten heruntergefahren und später wieder online gebracht werden. Ein Wert von 0 bedeutet, dass bei einem Fehler immer ein erneuter Versuch des Workers ohne Wartezeit durchgeführt wird.

Timeout: Link-Timeout in Sekunden. Wenn nicht festgelegt, wartet Apache, bis eine Verbindung verfügbar ist. Diese Anweisung wird häufig zusammen mit dem Max-Parameter verwendet, um die Verbindungen zum Backend-Server zu begrenzen.

Dies ist fast die Konfiguration, starten Sie einfach den Apache-Dienst neu.

Hinweis: Wenn Sie localhost oder 127.0.0.1 eingeben, wird der Hinweis „Es funktioniert“ nicht mehr angezeigt. Stattdessen wird ein 503-Fehler gemeldet. Dies ist normal, da Apache jetzt die Lastausgleichsfunktion aktiviert und die Ziel-IP über AJP an Tomcat weitergeleitet hat, Tomcat jedoch noch nicht gestartet wurde.

Tomcat-Konfiguration

Nehmen wir als Beispiel den Server 192.168.10.98

Verwenden Sie Vim, um die Datei server.xml unter conf zu öffnen (wenn Sie Vim nicht kennen, verwenden Sie bitte Ihre Vorstellungskraft ╮(╯▽╰)╭). Der hier eingeführte Lastausgleich besteht darin, dass Apache über das AJP-Protokoll eine Verbindung mit Tomcat herstellt, sodass die in Apache konfigurierte Portnummer die Portnummer von AJP in Tomcat ist.

Darüber hinaus müssen Sie jvmRoute in Engine konfigurieren

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

Die jvmRoute entspricht hier der Route in Apache. (Ich habe das gerade entfernt und festgestellt, dass es immer noch funktioniert. Ich finde es großartig, aber es muss konfiguriert werden.)

Endlich,

 <Cluster-Klassenname="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

Diese Notiz öffnet

An diesem Punkt ist die Konfiguration abgeschlossen. Konfigurieren Sie es entsprechend auf 192.168.10.137.

Schreiben Sie eine kleine test.jsp zum Testen

<%@ Seite contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*"%>
<html>
  <Kopf>
    <Titel>ApacheTomcatTest</Titel>
  </Kopf>
  <Text>
    <%
      out.println("<br> SITZUNGS-ID:" + session.getId() + "</br>");
    %>
  </body>
</html>

Erstellen Sie einen Balance-Ordner im Webapps-Verzeichnis von Tomcat, legen Sie test.jsp in den Ordner und starten Sie Tomcat.

Geben Sie abschließend 192.168.10.212/balance/test.jsp in den Browser ein
Sie werden feststellen, dass sich der Wert der SESSION ID zwischen zwei Zahlen geändert hat

Dies ist die Verkörperung des Lastausgleichs. Wenn Sie 192.168.10.212 eingeben, wird natürlich nicht „Es funktioniert“ angezeigt, sondern die klassische Tomcat-Homepage.

Übrigens basiert das oben genannte auf drei Servern

Weitere Informationen zur Lastenausgleichskonfiguration von Apache+Tomcat7 erhalten Sie unter den folgenden Links.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Konfigurationsmethode für die Bereitstellung von Apache-, WSGI- und Django-Programmen
  • Detaillierte Erläuterung der Apache-Website-Dienstkonfiguration basierend auf Linux
  • Detaillierte Erklärung zur korrekten Konfiguration von SSL (https-Zertifikat) in Apache unter Ubuntu
  • So konfigurieren Sie zwei oder mehr Sites mit dem Apache-Webserver
  • Installation, Aktivierung und Konfiguration von ModSecurity unter Apache
  • Tutorial zur Installation und Konfiguration des Apache-Webservers in CentOS 7
  • Alibaba Cloud Server Apache konfiguriert SSL-Zertifikate, um HTTPS erfolgreich zu aktivieren (verzeichnet verschiedene Fallstricke)
  • Lösung für den Fall, dass localhost nicht verfügbar ist, nachdem Apache unter Win10 den virtuellen Host konfiguriert hat
  • So konfigurieren Sie mehrere virtuelle Hosts lokal über Apache

<<:  Analyse der problematischen „Aborted“-Warnung in MySQL anhand von Fallstudien

>>:  Dieser Artikel hilft Ihnen, den Quellcode von PReact10.5.13 zu verstehen

Artikel empfehlen

So passen Sie geplante AT- und Cron-Aufgaben in Linux an

Es gibt zwei Arten von geplanten Tasks im Linux-S...

Erläuterung von JavaScript-Mikrotasks und Makrotasks

Vorwort: js ist eine Single-Thread-Sprache, daher...

32 typische spalten-/rasterbasierte Websites

Wenn Sie nach Inspiration für spaltenbasiertes Web...

Anpassungsmethode des Linux-Peripheriedateisystems

Vorwort Wenn wir von Linux-Systemen sprechen, mei...

Verwendung und Beispiele für Linux-Befehle zur Echotextverarbeitung

Die Beschreibung von echo im Linux-Hilfedokument ...

Was ist SSH? Wie benutzt man? Was sind die Missverständnisse?

Inhaltsverzeichnis Vorwort Was ist SSH? Wofür wir...

Detaillierte Erklärung zum Anzeigen und Einstellen des SQL-Modus in MySQL

Anzeigen und Einstellen des SQL-Modus in MySQL My...

Erweiterte MySQL-Datenbankabfrage und Mehrtabellenabfrage

MySQL-Abfrage für mehrere Tabellen Hinzufügen ein...

jQuery implementiert einen prozentualen Fortschrittsbalken

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

Verwenden von JavaScript zum Implementieren von Karusselleffekten

In diesem Artikel wird der spezifische Code für J...