Heim > Backend-Entwicklung > PHP-Tutorial > Wie führt Nginx den Lastausgleich durch? Zusammenfassung des Nginx-Lastausgleichsalgorithmus (mit Code)

Wie führt Nginx den Lastausgleich durch? Zusammenfassung des Nginx-Lastausgleichsalgorithmus (mit Code)

不言
Freigeben: 2023-04-03 12:22:02
Original
5766 Leute haben es durchsucht

Wie führt man einen Nginx-Lastausgleich durch? Tatsächlich gibt es viele Möglichkeiten, den Nginx-Lastausgleich zu implementieren. Jetzt werde ich den Nginx-Lastausgleichsalgorithmus im Detail vorstellen, einschließlich fünf Algorithmen: Polling, Weight, IP_Hash, Fair und URL_Hash.

1. Nginx-Lastausgleichsalgorithmus

1. Abfrage (Standard)

Jede Anfrage wird nacheinander in chronologischer Reihenfolge einem anderen Backend zugewiesen Service: Wenn ein Back-End-Server ausfällt, wird das fehlerhafte System automatisch beseitigt, sodass der Benutzerzugriff nicht beeinträchtigt wird.

2. Gewicht (Abfragegewicht)

Je größer der Gewichtswert, desto höher die ihm zugewiesene Zugriffswahrscheinlichkeit. Es wird hauptsächlich verwendet, wenn die Leistung jedes Servers im Backend unausgeglichen ist . Oder legen Sie einfach unterschiedliche Gewichte in der Master-Slave-Situation fest, um eine angemessene und effektive Nutzung der Host-Ressourcen zu erreichen.

3. ip_hash

Jede Anfrage wird entsprechend dem Hash-Ergebnis der Zugriffs-IP zugewiesen, sodass Besucher von derselben IP effektiv festen Zugriff auf einen Back-End-Server haben können Lösen Sie das Problem der dynamischen Webseitenfreigabe.

4. fair

Der Fair-Algorithmus ist ein intelligenterer Lastausgleichsalgorithmus als Gewicht und ip_hash und kann den Lastausgleich basierend auf Seitengröße und Ladezeit, also basierend auf der Antwort von, intelligent durchführen Dem Back-End-Server wird Zeit für Anfragen zugewiesen, und Anfragen mit kurzen Antwortzeiten werden zuerst zugewiesen. Nginx selbst unterstützt Fair nicht. Wenn Sie diesen Planungsalgorithmus benötigen, müssen Sie das Modul upstream_fair installieren.

5. url_hash

Weist Anfragen entsprechend dem Hash-Ergebnis der aufgerufenen URL zu, sodass jede URL an einen Back-End-Server weitergeleitet wird, was die Effizienz des Back-Ends weiter verbessern kann. Cache-Server beenden. Nginx selbst unterstützt url_hash nicht. Wenn Sie diesen Planungsalgorithmus benötigen, müssen Sie das Nginx-Hash-Softwarepaket installieren.

1. Abfrage (Standard)

Jede Anfrage wird nacheinander einem anderen Backend-Server zugewiesen. Wenn der Backend-Server ausfällt, kann dies der Fall sein automatisch eliminiert.

2.weight

Gibt die Abfragewahrscheinlichkeit an, die Gewichtung ist proportional zum Zugriffsverhältnis und wird verwendet, wenn die Leistung des Back-End-Servers ungleichmäßig ist.
Zum Beispiel:

upstream bakend {  
server 192.168.0.14 weight=10;  
server 192.168.0.15 weight=10;  
}
Nach dem Login kopieren

3.ip_hash

Jede Anfrage wird entsprechend dem Hash-Ergebnis der abgerufenen IP zugeordnet, sodass jeder Besucher über diese verfügt Ein fester Zugriff auf einen Backend-Server kann Sitzungsprobleme lösen.
Zum Beispiel:

upstream bakend {  
ip_hash;  
server 192.168.0.14:88;  
server 192.168.0.15:80;  
}
Nach dem Login kopieren

4.fair (Drittanbieter)

Anfragen werden entsprechend der Antwortzeit des Backend-Servers zugewiesen, mit kürzerer Zeit Reaktionszeit bei gegebener Prioritätsverteilung.

upstream backend {  
server server1;  
server server2;  
fair;  
}
Nach dem Login kopieren

5.url_hash (Drittanbieter)

Verteilen Sie Anfragen entsprechend dem Hash-Ergebnis der aufgerufenen URL, sodass jede URL auf dieselbe weitergeleitet wird Backend-Server, effektiver, wenn der Backend-Server zwischengespeichert ist.
Beispiel: Fügen Sie dem Upstream eine Hash-Anweisung hinzu. Andere Parameter wie Gewicht können nicht in die Server-Anweisung geschrieben werden.

upstream backend {  
server squid1:3128;  
server squid2:3128;  
hash $request_uri;  
hash_method crc32;
Nach dem Login kopieren

2. Nginx-Lastausgleich Planungsstatus

Im Nginx-Upstream-Modul können Sie den Status jedes Backend-Servers bei der Lastausgleichsplanung festlegen:

1. down, was den aktuellen Server anzeigt Vorerst nicht am Lastausgleich teilnehmen

2. Backup, reservierte Backup-Maschine. Wenn alle anderen Nicht-Backup-Maschinen ausfallen oder ausgelastet sind, wird die Backup-Maschine angefordert, sodass der Zugriffsdruck dieser Maschine am niedrigsten ist

3. max_fails, die Anzahl der zulässigen Anforderungsfehler, ist standardmäßig 1, Wenn die maximale Anzahl erreicht ist, wird der vom Modul „proxy_next_upstream“ definierte Fehler zurückgegeben.

4. fail_timeout, Zeitüberschreitung bei Anforderungsfehlern, die Zeit zum Anhalten des Dienstes nach max_fails-Fehlern. max_fails und fail_timeout können zusammen verwendet werden.

Wenn Nginx nicht nur einen Server vertreten könnte, wäre es nicht so beliebt wie heute. Nginx kann so konfiguriert werden, dass es mehrere Server unterstützt. Wenn ein Server ausfällt, kann das System weiterhin verfügbar bleiben. Der spezifische Konfigurationsprozess ist wie folgt:

1. Fügen Sie unter dem http-Knoten den Upstream-Knoten hinzu.

upstream linuxidc { 
      server 10.0.6.108:7080; 
      server 10.0.0.85:8980; 
}
Nach dem Login kopieren
Nach dem Login kopieren

2. Konfigurieren Sie Proxy_Pass im Standortknoten unter dem Serverknoten als: http:// + Upstream-Name, also „
http://linuxidc“.

location / { 
            root  html; 
            index  index.html index.htm; 
            proxy_pass http://linuxidc; 
}
Nach dem Login kopieren

3. Der Lastausgleich ist nun zunächst abgeschlossen. Upstream-Ladungen werden gemäß der Polling-Methode (Standard) nacheinander verschiedenen Back-End-Servern zugewiesen. Wenn der Back-End-Server ausfällt, kann er automatisch eliminiert werden. Obwohl diese Methode einfach und kostengünstig ist. Die Nachteile sind jedoch: geringe Zuverlässigkeit und ungleichmäßige Lastverteilung. Gilt für Bildserver-Cluster und rein statische Seitenserver-Cluster.

Darüber hinaus verfügt Upstream über andere Zuteilungsstrategien, wie folgt:

Gewicht (Gewicht)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{ 
      server 10.0.0.77 weight=5; 
      server 10.0.0.88 weight=10; 
}
Nach dem Login kopieren
Nach dem Login kopieren

ip_hash(访问ip)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream favresin{ 
      ip_hash; 
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
}
Nach dem Login kopieren
Nach dem Login kopieren

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

upstream favresin{      
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
      fair; 
}
Nach dem Login kopieren

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

 upstream resinserver{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}
Nach dem Login kopieren

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下:

down 表示单前的server暂时不参与负载.

weight 默认为1.weight越大,负载的权重就越大。

max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.

fail_timeout : max_fails次失败后,暂停的时间。

backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态 
      ip_hash; 
      server 10.0.0.11:9090 down; 
      server 10.0.0.11:8080 weight=2; 
      server 10.0.0.11:6060; 
      server 10.0.0.11:7070 backup; 
}
Nach dem Login kopieren
Nach dem Login kopieren

如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下:

1. 在http节点下,添加upstream节点。

upstream linuxidc { 
      server 10.0.6.108:7080; 
      server 10.0.0.85:8980; 
}
Nach dem Login kopieren
Nach dem Login kopieren

2. 将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“
http://linuxidc”.

location / { 
            root  html; 
            index  index.html index.htm; 
            proxy_pass http://linuxidc; 
}
Nach dem Login kopieren

3. 现在负载均衡初步完成了。upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

除此之外,upstream还有其它的分配策略,分别如下:

weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{ 
      server 10.0.0.77 weight=5; 
      server 10.0.0.88 weight=10; 
}
Nach dem Login kopieren
Nach dem Login kopieren

ip_hash(访问ip)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream favresin{ 
      ip_hash; 
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
}
Nach dem Login kopieren
Nach dem Login kopieren

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

 upstream favresin{      
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
      fair; 
}
Nach dem Login kopieren

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream resinserver{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}
Nach dem Login kopieren

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下:

down 表示单前的server暂时不参与负载.

weight 默认为1.weight越大,负载的权重就越大。

max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.

fail_timeout : max_fails次失败后,暂停的时间。

backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态 
      ip_hash; 
      server 10.0.0.11:9090 down; 
      server 10.0.0.11:8080 weight=2; 
      server 10.0.0.11:6060; 
      server 10.0.0.11:7070 backup; 
}
Nach dem Login kopieren
Nach dem Login kopieren

相关推荐:

Nginx负载均衡与反向代理扩展功能详解

Das obige ist der detaillierte Inhalt vonWie führt Nginx den Lastausgleich durch? Zusammenfassung des Nginx-Lastausgleichsalgorithmus (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage