Heim  >  Artikel  >  Backend-Entwicklung  >  Nginx-Anwendung: Verwendung von Nginx für den Lastausgleich

Nginx-Anwendung: Verwendung von Nginx für den Lastausgleich

不言
不言Original
2018-06-01 15:15:301877Durchsuche

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-Anwendung: Verwendung von Nginx für den Lastausgleich
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.

Vierschichtiger Lastausgleich vs. siebenschichtiger Lastausgleich

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/浏览器类别等七层的信息进行进一步的响应

Gemeinsame Softwareunterstützung

软件 四层负载均衡 七层负载均衡
nginx 轻量实现 支持http和mail,性能与haproxy相近
haproxy - 支持七层负载均衡
LVS 支持四层负载均衡,实现较重 -
F5 硬件实现,成本高 -

Gemeinsame Lastausgleichsalgorithmen

Gemeinsame Lastausgleichsalgorithmen sind wie folgt. Mehrere Algorithmen :

Zufällig dem Server zugewiesen
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 - In 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.
负载均衡算法 负载均衡算法(E) nginx支持与否 说明 适用场景
普通轮询 Round Robin 支持 权重相同的轮询 适用于外部服务请求和内部服务器都相对均衡的场景
权重轮询 Weighted Round Robin 支持(weight) 可以设定不同权重进行轮询 服务器的处理能力不同,或则希望进行流量的控制,比如Canary Release
随机均衡 Random - 随机分配给服务器 外部和内部均非常均衡的场合,或者需要随机的分配的需求较强
权重随机 Weighted Random - 结合权重随机分配给服务器 可结合权重调节随机策略,更好地适应现实中分布状况
响应速度 Response Time 支持(fair) 根据服务器的响应速度进行分配 服务器性能和服务器当前运行状况的结合,此种策略能动态的调整状态,避免能者已经不能的情况下仍然被大量分配作业
最少连接 Least Connection 根据连接的数量进行分配 轮询做的是分配任务,由于实际情况中无法控制轮训分配的任务,但是无法确认任务完成的速度,会导致反映真实服务器负荷的连接数产生不同,适合于长时间提供长连接服务的业务,比如网上的客服的WebSocket的实现,或者FTP/SFTP等服务。
DNS响应 Flash DNS - 根据最快返回的DNS解析结果来继续请求服务,忽略其他DNS返回的IP地址 适用于具有全局负载均衡的情况下,比如CDN
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

Demonstrationsbeispiel für den Lastausgleich: normale Abfrage

Als nächstes demonstrieren Sie mit Nginx, wie eine normale Abfrage durchgeführt wird:

负载均衡算法 负载均衡算法(E) nginx支持与否 说明 适用场景
普通轮询 Round Robin 支持 权重相同的轮询 适用于外部服务请求和内部服务器都相对均衡的场景

Vorbereitung im Voraus

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 ~]#

Nginx starten

[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 ~]#

Nginx-Code-Snippet

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;
    }

}

So ändern Sie default.conf

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...省略

Vor der Änderung

# 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;
    #}}#

Nach der Änderung

# 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;
    #}}#

Starten Sie den Nginx-Container neu

[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#

Bestätigen Sie die Ergebnis

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 ~]#

Lastausgleich-Demonstrationsbeispiel: Gewichtsabfrage

Auf dieser Basis erfordert die Gewichtsabfrage nur einfach Gewicht hinzufügen

负载均衡算法 负载均衡算法(E) nginx支持与否 说明 适用场景
权重轮询 Weighted Round Robin 支持(weight) 可以设定不同权重进行轮询 服务器的处理能力不同,或则希望进行流量的控制,比如Canary Release

Standard.conf ändern

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;
#

Nginx-Container neu starten

[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#

Ergebnis bestätigen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn