Maison  >  Article  >  Opération et maintenance  >  Comment utiliser nginx pour l'équilibrage de charge

Comment utiliser nginx pour l'équilibrage de charge

WBOY
WBOYavant
2023-06-03 08:19:121934parcourir

Équilibrage de charge à quatre couches ou équilibrage de charge à sept couches

On dit souvent que l'équilibrage de charge à sept couches ou l'équilibrage de charge à quatre couches est en fait décidé en fonction du nom de la couche du modèle de réseau iso osi. nginx utilise le protocole http L'équilibrage de charge est effectué au niveau de la couche application, c'est pourquoi on l'appelle équilibrage de charge à sept couches. Par exemple, les LV qui effectuent des opérations d'équilibrage de charge au niveau de la couche TCP sont appelés équilibrage de charge de couche 4. De manière générale, il existe les classifications d'équilibrage de charge suivantes :

Comment utiliser nginx pour léquilibrage de charge

Prise en charge logicielle commune

Comment utiliser nginx pour léquilibrage de charge

Algorithmes d'équilibrage de charge courants

Les algorithmes d'équilibrage de charge courants sont les suivants :

Comment utiliser nginx pour léquilibrage de charge

Équilibrage de charge exemple de démonstration : interrogation ordinaire

Ensuite, utilisez nginx pour démontrer comment effectuer une interrogation ordinaire :

Comment utiliser nginx pour léquilibrage de charge

Préparez-vous à l'avance

Démarrez deux services sur les deux ports 7001/7002 à l'avance, utilisé pour afficher des informations différentes . Pour faciliter la démonstration, un miroir a été réalisé à l'aide de tornado, et différents paramètres transmis lors du démarrage du conteneur Docker sont utilisés pour afficher les différences de services.

[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:7001
hello, service :user service 1: 7001
[root@kong ~]# 
[root@kong ~]# curl http://192.168.163.117:7002
hello, service :user service 1: 7002
[root@kong ~]#

Démarrez nginx

[root@kong ~]# docker run -p 9080:80 --name nginx-lb -d nginx 
9d53c7e9a45ef93e7848eb3f4e51c2652a49681e83bda6337c89a3cf2f379c74
[root@kong ~]# docker ps |grep nginx-lb
9d53c7e9a45e    nginx           "nginx -g 'daemon ..."  11 seconds ago   up 10 seconds    0.0.0.0:9080->80/tcp                         nginx-lb
[root@kong ~]#

extrait de code nginx

Préparez l'extrait de code nginx suivant et ajoutez-le au /etc/nginx/conf.d/default.conf de nginx

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

Modifier default.conf La méthode

peut obtenir cet effet en installant vim dans le conteneur, vous pouvez également le modifier localement puis le transmettre via docker cp, ou le modifier directement avec sed. Si vous installez vim dans un conteneur, utilisez la méthode suivante

[root@kong ~]# docker exec -it nginx-lb sh
# apt-get update
...省略
# apt-get install vim
...省略

Avant modification

# cat default.conf
server {
  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;
  #}
}
#

Après modification

# cat default.conf
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;
  #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;
  #}
}
#

Redémarrez le conteneur nginx

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

Confirmez le résultat

Vous pouvez voir clairement le commandez, effectuez un sondage :

[root@kong ~]# curl
bonjour, service :user service 1 : 7001
[root@kong ~]# curl
bonjour, service :user service 1 : 7002
[root@kong ~]# curl
bonjour, service :user service 1 : 7001
[root@kong ~]# curl
bonjour, service :user service 1 : 7002
[root@kong ~]#

Exemple de démonstration d'équilibrage de charge : Sondage de poids

Sur cette base, pour effectuer un sondage de poids, il vous suffit d'ajouter du poids

Comment utiliser nginx pour léquilibrage de charge

Modifier default.conf

Modifier default.conf comme suit

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

Redémarrer le conteneur nginx

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

Confirmez le résultat

Vous pouvez constater que les résultats du sondage sont effectués selon le ratio de 1/3 et 2/3 :

[root@kong ~]# curl
bonjour, service :user service 1 : 7001
[root@kong ~]# curl
bonjour, service :user service 1 : 7002
[root@kong ~]# curl
bonjour, service :user service 1 : 7002
[root@kong ~]#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer