Heim > Artikel > Backend-Entwicklung > Nginx-Anwendung: Verwendung von Nginx für den Lastausgleich
In diesem Artikel wird hauptsächlich die Anwendung von Nginx vorgestellt: Die Verwendung von Nginx für den Lastausgleich hat einen bestimmten Referenzwert. Jetzt können Freunde in Not darauf verweisen.
nginx Es kann im Allgemeinen für den Lastausgleich auf sieben Ebenen verwendet werden. In diesem Artikel werden einige grundlegende Kenntnisse zum Lastausgleich und ein einfaches Beispiel für die Verwendung von Nginx für den Lastausgleich vorgestellt.
Es wird oft gesagt, dass der siebenschichtige Lastausgleich oder der vierschichtige Lastausgleich tatsächlich anhand des Namens der Schicht entschieden wird des ISO-OSI-Netzwerkmodells: Da Nginx das HTTP-Protokoll verwendet, um Lastausgleichsvorgänge auf der Anwendungsebene durchzuführen, wird es als siebenschichtiger Lastausgleich bezeichnet. Beispielsweise wird LVS, das Lastausgleichsvorgänge auf der TCP-Ebene durchführt, als Schicht-4-Lastausgleich bezeichnet. Im Allgemeinen gibt es die folgenden Lastausgleichsklassifizierungen:
类别 | OSI模型层 | 说明 |
---|---|---|
二层负载均衡 | MAC层 | 根据MAC地址进行响应 |
三层负载均衡 | IP层 | 根据IP地址进行响应 |
四层负载均衡 | TCP层 | 在IP地址的基础上结合端口号进行响应 |
七层负载均衡 | HTTP层 | 在四层的基础上,可继续根据URL/浏览器类别等七层的信息进行进一步的响应 |
软件 | 四层负载均衡 | 七层负载均衡 |
---|---|---|
nginx | 轻量实现 | 支持http和mail,性能与haproxy相近 |
haproxy | - | 支持七层负载均衡 |
LVS | 支持四层负载均衡,实现较重 | - |
F5 | 硬件实现,成本高 | - |
Gemeinsame Lastausgleichsalgorithmen sind wie folgt. Mehrere Algorithmen :
Lastausgleichsalgorithmus | Lastausgleichsalgorithmus (E) | nginx unterstützt und Nein th> | Erläuterung | Anwendbare Szenarien | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Normale Abfrage | Round Robin | Unterstützt | Polling mit gleicher Gewichtung | Geeignet für Szenarien, in denen externe Serviceanfragen und interne Server relativ ausgeglichen sind | Gewichtetes Round Robin | Gewichtetes Round Robin | Unterstützung (Gewicht) | Sie können unterschiedliche Gewichtungen für die Abfrage festlegen | Server haben unterschiedliche Verarbeitung Funktionen, oder Sie möchten den Datenverkehr steuern, z. B. Canary Release | |||||||||||||||||||||||||||||||||||
Random Balance | Random | - | Zufällig dem Server zugewiesenIn Situationen, in denen sowohl externe als auch interne Salden sehr ausgeglichen sind oder eine starke Nachfrage nach zufälliger Zuweisung besteht | |||||||||||||||||||||||||||||||||||||||||
Gewichtet Zufällig | Gewichteter Zufall | - | Zufällig dem Server in Kombination mit der Gewichtung zugewiesen | Die Zufallsstrategie kann in Kombination angepasst werden mit der Gewichtung, um den realen Vertriebsstatus besser anzupassen | ||||||||||||||||||||||||||||||||||||||||
Reaktionsgeschwindigkeit | Reaktionszeit | Support (fair) | Je nach Server basierend auf Antwortgeschwindigkeit zuweisen | Basierend auf der Kombination aus Serverleistung und dem aktuellen Betriebsstatus des Servers kann diese Strategie den Status dynamisch anpassen, um die Zuweisung einer großen Zahl zu vermeiden von Jobs, auch wenn die fähigen nicht mehr in der Lage sind | ||||||||||||||||||||||||||||||||||||||||
Kleinste Verbindung | Kleinste Verbindung | Zuweisen entsprechend der Anzahl der Verbindungen | Abfragen dienen der Zuweisung von Aufgaben. Aufgrund der tatsächlichen Situation ist es unmöglich, die durch Rotationstraining zugewiesenen Aufgaben zu kontrollieren, es ist jedoch unmöglich, die Geschwindigkeit der Aufgabenerledigung zu bestätigen, was zu Unterschieden in der Anzahl führt Es eignet sich für Unternehmen, die langfristige Verbindungsdienste wie die Implementierung von WebSocket für den Online-Kundendienst oder FTP/SFTP und andere Dienste bereitstellen. |
|
||||||||||||||||||||||||||||||||||||||||
DNS-Antwort | Flash-DNS | - | Fordern Sie weiterhin Dienste basierend auf dem schnellsten zurückgegebenen DNS-Auflösungsergebnis an und ignorieren Sie dabei die von anderen DNS zurückgegebenen IP-Adressen. | Gilt für Situationen mit globalem Lastausgleich, z. B. CDN |
Als nächstes demonstrieren Sie mit Nginx, wie eine normale Abfrage durchgeführt wird:
负载均衡算法 | 负载均衡算法(E) | nginx支持与否 | 说明 | 适用场景 |
---|---|---|---|---|
普通轮询 | Round Robin | 支持 | 权重相同的轮询 | 适用于外部服务请求和内部服务器都相对均衡的场景 |
Starten Sie im Voraus zwei Dienste auf den beiden Ports 7001/7002, um unterschiedliche Informationen anzuzeigen. Zur Vereinfachung der Demonstration habe ich Tornado verwendet, um ein Bild zu erstellen und die beim Docker übergebenen Parameter zu übergeben Der Container wurde gestartet, um die Unterschiede zwischen Diensten anzuzeigen.
[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "User Service 1: 7001"ddba0abd24524d270a782c3fab907f6a35c0ce514eec3159357bded09022ee57 [root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "User Service 1: 7002"95deadd795e19f675891bfcd44e5ea622c95615a95655d1fd346351eca707951 [root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7001Hello, Service :User Service 1: 7001[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7002Hello, Service :User Service 1: 7002[root@kong ~]#
[root@kong ~]# docker run -p 9080:80 --name nginx-lb -d nginx 9d53c7e9a45ef93e7848eb3f4e51c2652a49681e83bda6337c89a3cf2f379c74 [root@kong ~]# docker ps |grep nginx-lb9d53c7e9a45e nginx "nginx -g 'daemon ..." 11 seconds ago Up 10 seconds 0.0.0.0:9080->80/tcp nginx-lb [root@kong ~]#
Bereiten Sie das folgende Nginx-Code-Snippet vor und fügen Sie es zu /etc/nginx/conf.d/default.conf von nginx hinzu
http { upstream nginx_lb { server 192.168.163.117:7001; server 192.168.163.117:7002; }server { listen 80; server_name www.liumiao.cn 192.168.163.117; location / { proxy_pass http://nginx_lb; } }
Sie können den Effekt erzielen, indem Sie vim im Container installieren. Sie können es auch lokal ändern und es dann über Docker CP übergeben oder es direkt mit sed ändern . Wenn Sie vim in einem Container installieren, verwenden Sie die folgende Methode
[root@kong ~]# docker exec -it nginx-lb sh# apt-get update...省略# apt-get install vim...省略
# cat default.confserver { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #}}#
# cat default.confupstream nginx_lb { server 192.168.163.117:7001; server 192.168.163.117:7002; }server { listen 80; server_name www.liumiao.cn 192.168.163.117; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { #root /usr/share/nginx/html; #index index.html index.htm; proxy_pass http://nginx_lb; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #}}#
[root@kong ~]# docker restart nginx-lbnginx-lb [root@kong ~]#
Sie können deutlich erkennen, dass die Abfrage in der folgenden Reihenfolge durchgeführt wird:
[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]#
Auf dieser Basis erfordert die Gewichtsabfrage nur einfach Gewicht hinzufügen
负载均衡算法 | 负载均衡算法(E) | nginx支持与否 | 说明 | 适用场景 |
---|---|---|---|---|
权重轮询 | Weighted Round Robin | 支持(weight) | 可以设定不同权重进行轮询 | 服务器的处理能力不同,或则希望进行流量的控制,比如Canary Release |
Standard.conf wie folgt ändern
# cp default.conf default.conf.org # vi default.conf # diff default.conf default.conf.org 2,3c2,3 < server 192.168.163.117:7001 weight=100;< server 192.168.163.117:7002 weight=200; ---> server 192.168.163.117:7001; > server 192.168.163.117:7002; #
[root@kong ~]# docker restart nginx-lbnginx-lb [root@kong ~]#
Sie können sehen, dass die Abfrageergebnisse gemäß dem Verhältnis von 1/3 und 2/3 durchgeführt werden:
[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]#
Verwandte Empfehlungen:
Optimierung der Nginx-Verwaltungskonfiguration
Nginx-Reverse-Proxy-Websocket-Konfigurationsbeispiel
Das obige ist der detaillierte Inhalt vonNginx-Anwendung: Verwendung von Nginx für den Lastausgleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!