Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Wie Nginx den Lastausgleich implementiert

Wie Nginx den Lastausgleich implementiert

WBOY
WBOYnach vorne
2023-05-11 20:07:044406Durchsuche

    1. Einführung in Nginx

    Nginx ist ein leistungsstarkes HTTP und Reverse Server-Proxy-Server ist auch ein IMAP/POP3/SMTP-Server (E-Mail-Proxy). Einer der ersten Zwecke bei der Entwicklung dieses Produkts ist auch die Verwendung als Mail-Proxy-Server. Aufgrund seiner Stabilität, seines umfangreichen Funktionsumfangs, seiner Beispielkonfigurationsdateien, seines geringen Systemressourcenverbrauchs und seiner hohen Parallelitätsleistung wird es häufig in verschiedenen Produktionsbereitstellungen eingesetzt. Darüber hinaus implementiert Nginx E/A-Multiplexing auf Basis des ereignisgesteuerten Modells (Epoll) und verarbeitet Anfragen asynchron und nicht blockierend. Bei hoher Verbindungsparallelität ist Nginx eine gute Alternative zum Apache-Server. Und warum sollten wir uns für Nginx entscheiden?

    2. Nginx-Funktionen

    • Hohe Parallelität und hohe Leistung;

    • Hohe Zuverlässigkeit (kann rund um die Uhr laufen);

      Als Webserver: Im Vergleich zu Apache verbraucht Nginx weniger Ressourcen und unterstützt mehr gleichzeitige Verbindungen;
    • Als Lastausgleichsserver: Eine benutzerdefinierte Konfiguration kann durchgeführt werden , Unterstützung virtueller Hosts, URL-Umleitung, Netzwerküberwachung usw.
    • Die Installation von Nginx ist sehr einfach, die Konfigurationsdatei ist sehr prägnant (sie kann auch Perl-Syntax unterstützen) und es gibt wenige Fehler; #
    • # 🎜🎜#Verwaltung statischer Dateien, indizierter Dateien und automatischer Indizierung;
    • Reverse-Proxy-Beschleunigung (kein Caching), einfacher Lastausgleich und Fehlertoleranz;
    • # 🎜🎜#

      Unterstützt Hot-Deployment (Nginx kann aktualisiert werden, ohne den Server anzuhalten).
    • Deshalb sollten Sie sich für Nginx entscheiden. Und die Funktionen und Features von Nginx sind nicht darauf beschränkt. Das Obige ist nur eine kurze Liste einiger allgemeiner Funktionen.
    • 3. Nginx-Lastausgleich
    • In unserer tatsächlichen Produktion sind die Verarbeitungsleistung und der Speicherplatz eines Servers begrenzt, also versuchen Sie nicht, dies zu ändern zu einem leistungsfähigeren Server: Bei großen Websites kann der Server, egal wie leistungsfähig er ist, das kontinuierliche Wachstum der Geschäftsanforderungen der Website nicht erfüllen. In diesem Fall besteht ein geeigneterer Ansatz darin, einen Server hinzuzufügen, um den Zugriff und den Speicherdruck des ursprünglichen Servers zu teilen. Tatsächlich nennen wir das

      Load Balancing

      Als Lastausgleichsserver verwendet Nginx einen Reverse-Proxy, um den Lastausgleich mehrerer Back-End-Server durchzuführen. Lassen Sie uns zunächst über die Lastausgleichsstrategie und den Lastausgleichsalgorithmus von Nginx sprechen.
    3.1 Verständnis des Upstream-Moduls

    upstream Dieses Modul dient zum Schreiben eines Satzes von Proxyserveradressen (d. h. zum Auswählen eines Servers aus der definierten Back-End-Serverliste zum Akzeptieren). die Anforderung des Benutzers) und konfigurieren Sie dann den Lastausgleichsalgorithmus. Werfen wir einen Blick auf das grundlegendste Lastausgleichsbeispiel:

    upstream test { 
          server 10.20.151.114:80;
          server 10.20.151.115:80;
    }
    server {
          ....
          location / {         
                 proxy_pass  http://test;     --请求转向 test 定义的服务器列表         
          }
    3.2 Nginx-Lastausgleichsstrategie

    (1) Abfrage

    Die grundlegendste Konfiguration Methode: Das obige Beispiel ist die Abfragemethode, bei der es sich um die Standardlastausgleichsstrategie des Upstream-Moduls handelt. Jede Anfrage wird nacheinander in chronologischer Reihenfolge einem anderen Backend-Server zugewiesen.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (2)ip_hash

    Jede Anfrage wird entsprechend dem Hash-Ergebnis der Zugriffs-IP zugewiesen, und derselbe IP-Client greift immer auf einen Back-End-Server zu. Es kann sicherstellen, dass Anfragen von derselben IP an einen festen Computer gesendet werden, wodurch das Sitzungsproblem gelöst werden kann.

    upstream test { 
    	  ip_hash;  --同一个IP客户端固定访问一个后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (3) url_hash

    Verteilen Sie Anforderungen entsprechend dem Hash-Ergebnis der aufgerufenen URL, sodass jede URL an denselben Backend-Server weitergeleitet wird. Sobald die Ressource zwischengespeichert ist, kann sie bei Eingang einer Anfrage aus dem Cache gelesen werden.

    upstream test { 
    	  hash $request_uri;  --实现每个url定向到同一个后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (4) least_conn

    Leiten Sie die Anfrage mit weniger Verbindungen an den Backend-Server weiter. Der Abfragealgorithmus leitet Anfragen gleichmäßig an jedes Backend weiter, sodass ihre Auslastung ungefähr gleich ist. Einige Anfragen dauern jedoch lange, was dazu führt, dass das Backend, in dem sie sich befinden, eine höhere Auslastung aufweist. In diesem Fall kann least_conn einen besseren Lastausgleichseffekt erzielen.

    upstream test { 
    	  least_conn;  --把请求转发给连接数较少的后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (5) Gewicht

    Die Gewichtungsmethode gibt die Wahrscheinlichkeit einer Abfrage basierend auf der Abfragestrategie an.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;  --轮询的几率相对上一条要大
    }

    (6)fair

    Dieser Algorithmus kann einen intelligenten Lastausgleich basierend auf Seitengröße und Ladezeit durchführen, d. Endserver haben diejenigen mit kurzen Antwortzeiten Vorrang.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
          fair;  --实现响应时间短的优先分配
    }

    Nginx-Lastausgleichskonfigurationsstatusparameter

    down: Zeigt an, dass der aktuelle Server ist vorübergehend. Nimmt nicht am Lastausgleich teil.

    backup: Reservierte Backup-Maschine. Die Backup-Maschine wird angefordert, wenn alle anderen Nicht-Backup-Maschinen ausfallen oder ausgelastet sind, sodass diese Maschine den geringsten Druck hat.

    max_fails: Die Anzahl der zulässigen Anforderungsfehler, der Standardwert ist 1. Wenn die maximale Anzahl von Malen überschritten wird, wird der durch das Modul „proxy_next_upstream“ definierte Fehler zurückgegeben.
    • fail_timeout: Nach Auftreten von max_fails-Fehlern beträgt die Zeiteinheit für die Unterbrechung des Dienstes Sekunden. max_fails kann zusammen mit fail_timeout verwendet werden.

    Nginx可分为二层、三层、四层、七层负载均衡。 所谓的二层就是基于MAC地址的负载均衡, 三层就是基于IP地址的负载均衡,四层就是基于IP+端口的负载均衡,七层就是基于URL等应用层信息的负载均衡。因篇幅较长这里不再做具体的介绍,有兴趣的可自行百度。这里以七层负载均衡来做实例。

    3.3 Nginx负载均衡实例

    环境准备:准备3台Nginx服务器,一台作为负载均衡服务器,其它两台作为后端服务器。

    10.20.151.240 ----proxy_server(负载均衡服务器)

    10.20.151.112 ----server1(后端服务器1)

    10.20.151.113 ----server2(后端服务器2)

    (1)负载均衡服务器配置

    vim /etc/nginx/nginx.conf        --配置主配置文件
    vim /etc/nginx/conf.d/test.conf  --配置子配置文件

    Wie Nginx den Lastausgleich implementiert

    Wie Nginx den Lastausgleich implementiert

    (2)后端服务器配置

    vim /usr/local/nginx/conf/nginx.conf    --修改配置文件
    vim /usr/local/nginx/html/index.html    --添加测试数据

    Wie Nginx den Lastausgleich implementiert

    Wie Nginx den Lastausgleich implementiert

    (3)负载均衡测试

    在浏览器端访问http://10.20.151.240/,在实际生产中,这两个页面返回的结果是一样的,这里是为了测试效果,所以返回了不同的内容。而为什么刷新后又会返回不同结果呢?那是因为负载均衡默认的均衡策略(或算法)是轮询,所以每刷新一次就会从不同的后端服务器返回不同的请求结果,减轻单个后端服务器的访问量,提升客户端的访问效率,从而达到负载均衡的效果。

    Wie Nginx den Lastausgleich implementiert

    Wie Nginx den Lastausgleich implementiert

    当我添加权重(weight)时

    Wie Nginx den Lastausgleich implementiert

    再次访问http://10.20.151.240/

    Wie Nginx den Lastausgleich implementiert

    Wie Nginx den Lastausgleich implementiert

    加权重和没加权重有什么区别呢?在实际生产中,我们一般会将配置较高的服务器的权重设置高一点,其实就是客户端在访问时,权重较高的服务器会被多次请求,这样能减轻配置较低的服务器的请求量,从而更好的实现负载均衡。

    当我添加backup状态参数时

    Wie Nginx den Lastausgleich implementiert

    再次访问http://10.20.151.240/

    Wie Nginx den Lastausgleich implementiert

    此时我故意停掉第一台后端服务器,继续访问http://10.20.151.240/

    Wie Nginx den Lastausgleich implementiert

    当我给113这台后端服务器添加backup后,它就会作为热备服务器,添加的主要目的就是当我其他后端服务器都宕机的情况下,我的热备服务器还能继续提供同样的服务(注意:在其他后端服务器还未宕机之前,该热备服务器是不工作的)。因此负载均衡不仅能达到各个后端服务器负载的均衡,同时通过配置相关转态参数还能保证客户端请求时不造成服务器宕机的情况,保证了后端服务器的稳定性。其他状态参数这里我不再做演示(因为配置方式都一样)。

    Das obige ist der detaillierte Inhalt vonWie Nginx den Lastausgleich implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen