Das Prinzip und die Konfiguration des Nginx-Lastausgleichs sowie der dynamischen und statischen Trennung

Das Prinzip und die Konfiguration des Nginx-Lastausgleichs sowie der dynamischen und statischen Trennung

1. Nginx implementiert das Lastausgleichsprinzip

Nginx implementiert Lastenausgleich durch Reverse-Proxy


Der Nginx-Server wird als Front-End verwendet, der Tomcat-Server als Back-End und Webseitenanforderungen werden vom Nginx-Dienst weitergeleitet.

Anstatt jedoch alle Webanforderungen weiterzuleiten, werden die statischen Seitenanforderungen vom Nginx-Server selbst verarbeitet und die dynamischen Seitenanforderungen zur Verarbeitung an den Back-End-Tomcat-Server weitergeleitet.

Tomcat ist ein leichtgewichtiger Anwendungsserver und die Menge an Datenverkehr, die er verarbeiten kann, reicht möglicherweise nicht aus. Daher benötigen wir mehrere Tomcat-Server und müssen dann Nginx verwenden, um Gewichte zu konfigurieren und den Tomcat-Server für die Verarbeitung auszuwählen. Dies ist eine Lastausgleichsstrategie .

Nginx-Server

1. Verwenden Sie Exact Matching auf der Homepage

2. Statische Seiten nutzen regelmäßiges Matching, um sie selbst zu verarbeiten

3. Dynamische Seiten verwenden reguläre Ausdrücke, um Anfragen abzugleichen, die mit jsp enden, und verwenden proxy_pass, um sie an den Tomcat-Server weiterzuleiten

2. Prinzip der dynamischen und statischen Trennung von Nginx

Der Server empfängt Anfragen vom Client, die sowohl statische als auch dynamische Ressourcen enthalten. Statische Ressourcen werden von Nginx bereitgestellt und dynamische Ressourcen werden von Nginx an das Backend weitergeleitet.

Vorteile der statischen Verarbeitung von Nginx

  • Nginx ist bei der Verarbeitung statischer Seiten viel effizienter als Tomcat
  • Wenn das Anforderungsvolumen von Tomcat 1000-mal so hoch ist, dann ist das Anforderungsvolumen von Nginx 6000-mal so hoch
  • Der Durchsatz von Tomcat beträgt 0,6 M pro Sekunde und der Durchsatz von Nginx beträgt 3,6 M pro Sekunde
  • Die Fähigkeit von Nginx, statische Ressourcen zu verarbeiten, ist 6-mal so gut wie die von Tomcat

3. Dynamische und statische Trennung von Nginx + Tomcat sowie Konfigurationsschritte zum Lastenausgleich

Umweltvorbereitung:

Nginx-Server: 192.168.121.13

Tomcat-Server 1: 192.168.121.12:8080 192.168.121.12:8081

Tomcat-Server 2: 192.168.121.10

1. Stellen Sie den Nginx-Lastausgleichsserver bereit

Laden Sie zunächst das komprimierte Paket nginx-1.12.0.tar.gz in das Verzeichnis /opt hoch. systemctl stop firewalld.service 
systemctl deaktivieren Sie Firewalld.service 
0

yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

Benutzeradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./konfigurieren \
--prefix=/usr/local/nginx \
--Benutzer=nginx \
--group=nginx \
--mit-Datei-aio \
--mit-http_stub_status_module \
--mit-http_gzip_static_module \
--mit-http_flv_module \
--mit-http_ssl_module

machen && machen installieren

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

vim /lib/systemd/system/nginx.service
[Einheit]
Beschreibung=nginx
Nach=Netzwerk.Ziel
[Service]
Typ=Forking
PID-Datei = /usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Installieren]
WantedBy=Mehrbenutzer.Ziel

chmod 754 /lib/systemd/system/nginx.service
systemctl starte nginx.service
systemctl aktiviere nginx.service

2. Stellen Sie zwei Tomcat-Anwendungsserver bereit

Die erforderlichen Installationspakete sind:
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpm 
#scp apache-tomcat-9.0.16.tar.gz [email protected]:/opt #Laden Sie das erforderliche komprimierte Paket von Tomcat1 auf den Tomcat2-Server hoch. Natürlich können wir das komprimierte Paket auch direkt in das Verzeichnis /opt ziehen systemctl stop firewalld.service 
systemctl deaktivieren Sie Firewalld.service 
0

rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm 
Java-Version

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

Quelle /etc/profile.d/java.sh
Java-Version

cd /opt
vim abc.java
öffentliche Klasse abc {
  öffentliche statische void main(String[] args){
    System.out.println("Hallo Welt!")
  }
}

[root@localhost?opt]#javac abc.java #Wird verwendet, um festzustellen, ob die JDK-Umgebung erfolgreich eingerichtet wurde [root@localhost?opt]#java abc
Hallo Welt!

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

##Tomcat starten##
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep 8080


Dynamische und statische Trennkonfiguration

(1) Tomcat1 Serverkonfiguration mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ Seitensprache="java" import="java.util.*" Seitenkodierung="UTF-8"%>
<html>
<Kopf>
<title>JSP-Test1-Seite</title> #Als Test1-Seite angeben</head>
<Text>
<% out.println("Dynamische Seite 1, http://www.test1.com");%>
</body>
</html>


vim /usr/local/tomcat/conf/server.xml
#Da der Hostname als localhost konfiguriert ist, müssen Sie die vorherige HOST-Konfiguration löschen <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/test" Pfad="" reloadable="true">
 </Kontext>
</Host>

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

(2) Tomcat2-Serverkonfiguration mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ Seitensprache="java" import="java.util.*" Seitenkodierung="UTF-8"%>
<html>
<Kopf>
<title>JSP test2-Seite</title> #Als test2-Seite angeben</head>
<Text>
<% out.println("Dynamische Seite 2, http://www.test2.com");%>
</body>
</html>


vim /usr/local/tomcat/tomcat1/conf/server.xml
#Löschen Sie die vorherige HOST-Konfiguration <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" Pfad="" reloadable="true" />
</Host>

/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 


vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ Seitensprache="java" import="java.util.*" Seitenkodierung="UTF-8"%>
<html>
<Kopf>
<title>JSP test3-Seite</title> #Als test3-Seite angeben</head>
<Text>
<% out.println("Dynamische Seite 3, http://www.test3.com");%>
</body>
</html>


vim /usr/local/tomcat/tomcat2/conf/server.xml
#Löschen Sie die vorherige HOST-Konfiguration <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" Pfad="" reloadable="true" />
</Host>

/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/lokal/tomcat/tomcat2/

Nginx-Lastausgleichsmodus

rr Lastausgleichsmodus:

Jede Anfrage wird in chronologischer Reihenfolge einem anderen Backend-Server zugewiesen. Wenn die maximale Anzahl von Fehlern überschritten wird (max_fails, Standard ist 1), wird das Fehlergewicht des Knotens innerhalb der Fehlerzeit (fail_timeout, Standard ist 10 Sekunden) 0. Nach der Fehlerzeit wird der Normalzustand wiederhergestellt. Oder wenn alle Knoten ausgefallen sind, werden alle Knoten wieder gültig und erkennen weiter. Im Allgemeinen kann rr entsprechend dem Gewicht gleichmäßig verteilt werden.

least_conn Mindestanzahl an Verbindungen:

Priorisieren Sie die Weiterleitung von Clientanforderungen an den Server mit den wenigsten aktuellen Verbindungen.

ip_hash-Lastausgleichsmodus:

Jede Anfrage wird entsprechend dem Hash-Ergebnis der Zugriffs-IP zugewiesen, sodass jeder Besucher auf einen festen Backend-Server zugreift, was das Sitzungsproblem lösen kann. Allerdings führt ip_hash zu einer ungleichmäßigen Belastung. Einige Dienste erhalten mehr Anfragen, während andere weniger Anfragen erhalten. Daher wird die Verwendung des ip_hash-Modus nicht empfohlen. Das Problem der Sitzungsfreigabe kann gelöst werden, indem die Sitzungsfreigabe des Backend-Dienstes anstelle von ip_hash von nginx verwendet wird.

Fairer (Drittanbieter-)Lastausgleichsmodus:

Die Anfragen werden basierend auf der Antwortzeit des Backend-Servers verteilt, wobei Anfragen mit kürzeren Antwortzeiten Vorrang erhalten.

url_hash (Drittanbieter) Lastausgleichsmodus:

Ähnlich wie der ip_hash-Algorithmus verteilt er jede Anfrage entsprechend dem Hash-Ergebnis der URL, sodass jede URL an denselben Backend-Server weitergeleitet wird. Dies führt jedoch auch zu dem Problem einer ungleichmäßigen Verteilung. Dieser Modus ist besser, wenn der Backend-Server zwischengespeichert ist.

Zusammenfassen

Damit ist dieser Artikel über die Prinzipien und die Konfiguration des Nginx-Lastausgleichs und der dynamischen und statischen Trennung abgeschlossen. Weitere relevante Inhalte zum Nginx-Lastausgleich und zur dynamischen und statischen Trennung 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:
  • Grundlegendes Konfigurationsbeispiel von Nginx mit Apache oder Tomcat zur dynamischen und statischen Trennung
  • Verwenden von Nginx+uWsgi zum Trennen der dynamischen und statischen Teile der Django-Framework-Site von Python
  • Einfache Implementierung des Nginx+Tomcat-Reverse-Proxys und der dynamischen und statischen Trennung
  • Detaillierte Erklärung von Nginx zum Trennen von statischem und dynamischem Tomcat
  • nginx realisiert Lastausgleich und dynamische und statische Trennung
  • Nginx-Beispielcode zur Implementierung dynamischer und statischer Trennung
  • Detailliertes Beispiel für die Bereitstellung der dynamischen und statischen Trennung von Nginx+Apache
  • Beispielcode für Nginx zur Erreichung dynamischer und statischer Trennung
  • Nginx implementiert dynamische und statische Trennung Beispielerklärung
  • Implementierungsfallcodeanalyse für dynamische und statische Trennung von Nginx
  • Detaillierte Erläuterung des Prozesses zur Realisierung der dynamischen und statischen Trennung in Springmvc nginx
  • Docker Nginx-Container und Tomcat-Container zur Realisierung von Lastausgleich und dynamischen und statischen Trennungsvorgängen
  • Analyse des Prinzips von Nginx + Tomcat zur Erreichung eines Lastausgleichs sowie einer dynamischen und statischen Trennung
  • Beispiel, wie nginx dynamische und statische Trennung implementiert
  • Detaillierte Anleitung für nginx von der Installation bis zur Konfiguration (Installation, Sicherheitskonfiguration, Anti-Hotlinking, dynamische und statische Trennung, HTTPS-Konfiguration, Leistungsoptimierung)
  • Implementierung des Nginx+Tomcat-Lastausgleichs und der dynamischen und statischen Clustertrennung
  • Server-Lastausgleich von Nginx + Tomcat zur Erzielung einer dynamischen und statischen Trennung
  • Implementierung und Beschreibung der dynamischen und statischen Trennungskonfiguration von Nginx

<<:  CSS erzielt den Effekt, dass die äußerste Schicht einer mehrschichtigen verschachtelten Struktur rotiert, während die anderen Schichten unverändert bleiben.

>>:  Facebooks nahezu perfekte Neugestaltung aller Internetdienste

Artikel empfehlen

HTML-Tutorial: Titelattribut und Alt-Attribut

XHTML ist die Grundlage des CSS-Layouts. jb51.net...

Kann die wiederholbare Leseebene von MySQL Phantomlesevorgänge lösen?

Einführung Als ich mehr über die Datenbanktheorie...

So konfigurieren Sie Http, Https, WS und WSS in Nginx

Vorne geschrieben Im heutigen Internetbereich ist...

Detailliertes Tutorial zum Bereitstellen eines Django-Projekts unter CentOS

Grundlegende Umgebung Pagoden-Montageservice [Pyt...

Tutorial zur Installation von MongoDB unter Linux

MongoDB ist plattformübergreifend und kann sowohl...

Das Prinzip und die Richtung von JavaScript

Wie lässt sich feststellen, worauf dies hinweist?...

Zusammenfassung häufiger Probleme und Lösungen in Vue (empfohlen)

Es gibt einige Probleme, die nicht auf Vue beschr...

Detaillierte Erklärung der Destrukturierungszuweisung in JavaScript

Inhaltsverzeichnis Konzept Array-Destrukturierung...

Vue2.x - Beispiel für die Verwendung von Anti-Shake und Throttling

Inhaltsverzeichnis Dienstprogramme: Verwendung in...

VUE+Canvas realisiert den gesamten Prozess eines einfachen Gobang-Spiels

Vorwort In Bezug auf das Layout ist Gobang viel e...

Detaillierte Erklärung der Verwendung des Bash-Befehls

Unter Linux wird Bash als Standard übernommen, wa...

Einige Fragen zu Hyperlinks

Ich freue mich sehr, an dieser Folge der Kartoffe...