Application nginx : utiliser nginx pour l'équilibrage de charge

不言
Libérer: 2023-03-29 08:40:02
original
1875 Les gens l'ont consulté

Cet article présente principalement l'application de nginx : l'utilisation de nginx pour l'équilibrage de charge a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Application nginx : utiliser nginx pour léquilibrage de charge
nginx It. peut généralement être utilisé pour l'équilibrage de charge à sept couches. Cet article présentera quelques connaissances de base sur l'équilibrage de charge et un exemple simple d'utilisation de nginx pour l'équilibrage de charge.

É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 est appelé équilibrage de charge à sept couches car il utilise le protocole http pour effectuer des opérations d'équilibrage de charge au niveau de la couche application. Par exemple, LVS qui effectue des opérations d'équilibrage de charge sur la couche TCP est appelé équilibrage de charge de couche quatre. De manière générale, il existe les classifications d'équilibrage de charge suivantes :

类别 OSI模型层 说明
二层负载均衡 MAC层 根据MAC地址进行响应
三层负载均衡 IP层 根据IP地址进行响应
四层负载均衡 TCP层 在IP地址的基础上结合端口号进行响应
七层负载均衡 HTTP层 在四层的基础上,可继续根据URL/浏览器类别等七层的信息进行进一步的响应

Support logiciel commun

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

Algorithmes d'équilibrage de charge courants

L'équilibrage de charge commun est le suivant Plusieurs algorithmes :

Algorithme d'équilibrage de charge Algorithme d'équilibrage de charge (E) nginx prend en charge et non th> Explication Scénarios applicables
Interrogation normale Round Robin Prend en charge Interrogations avec le même poids Convient aux scénarios dans lesquels les demandes de service externes et les serveurs internes sont relativement équilibrés
Weighted Round Robin Weighted Round Robin Support (poids) Vous pouvez définir différents poids pour l'interrogation Les serveurs ont un traitement différent ou vous souhaiterez peut-être contrôler le trafic, comme Canary Release
Random Balance Random - Attribué aléatoirement au serveur Dans les situations où les équilibres externes et internes sont très équilibrés, ou où il existe une forte demande d'allocation aléatoire
Aléatoire pondéré Aléatoire pondéré - Attribué au hasard au serveur en combinaison avec le poids La stratégie aléatoire peut être ajustée en combinaison avec le poids pour mieux s'adapter Statut de distribution réel
Vitesse de réponse Temps de réponse Support (passable) td> Selon le serveur, allouer en fonction de la vitesse de réponse En fonction de la combinaison des performances du serveur et de l'état de fonctionnement actuel du serveur, cette stratégie peut ajuster dynamiquement l'état pour éviter de se voir attribuer une grande nombre de jobs même lorsque ceux qui en sont capables ne le peuvent plus
Moins de connexion Moins de connexion Allouer en fonction du nombre de connexions Le sondage consiste à attribuer des tâches. En raison de la situation réelle, il est impossible de contrôler les tâches assignées par la formation en rotation, mais il est impossible de confirmer la vitesse d'exécution des tâches, ce qui entraînera des différences dans les nombre de connexions qui reflète la charge réelle du serveur. Il convient aux entreprises qui fournissent des services de connexion à long terme, comme la mise en œuvre de WebSocket pour le service client en ligne, ou FTP/ SFTP et d'autres services.
负载均衡算法 负载均衡算法(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
Réponse DNS Flash DNS - Continuez à demander des services en fonction du résultat de résolution DNS renvoyé le plus rapidement, en ignorant les adresses IP renvoyées par d'autres DNS Applicable aux situations d'équilibrage de charge global, telles que CDN

Exemple de démonstration d'équilibrage de charge : interrogation ordinaire

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

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

Préparation à l'avance

Démarrez deux services sur les deux ports 7001/7002 à l'avance pour afficher différentes informations Pour faciliter la démonstration, j'ai utilisé tornado pour créer une image et transmis les paramètres transmis lors du docker. Le conteneur a été démarré. Different est utilisé pour afficher les différences entre les 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:7001Hello, Service :User Service 1: 7001[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7002Hello, Service :User Service 1: 7002[root@kong ~]#
Copier après la connexion

Démarrez nginx

[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 ~]#
Copier après la connexion

Extrait de code nginx

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

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

}
Copier après la connexion

dans .conf

peut être réalisée en installant vim dans le conteneur, ou vous pouvez le modifier localement puis le transmettre via docker cp, ou modifiez-le directement avec sed Soit. 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...省略
Copier après la connexion

Avant modification

# 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;
    #}}#
Copier après la connexion

Après modification

# 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;
    #}}#
Copier après la connexion

Redémarrez le conteneur nginx

[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#
Copier après la connexion
Copier après la connexion

Confirmez le résultat

Vous pouvez clairement voir que l'interrogation est effectuée dans l'ordre :

[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 ~]#
Copier après la connexion

Exemple de démonstration d'équilibrage de charge : interrogation pondérée

Et dans Sur cette base, pour effectuer une interrogation de poids, il vous suffit d'ajouter du poids

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

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;
#
Copier après la connexion

Redémarrer conteneur nginx

[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#
Copier après la connexion
Copier après la connexion

Confirmez le résultat

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

[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 ~]#
Copier après la connexion

Recommandations associées :

Optimisation de la configuration de la gestion Nginx

Exemple de configuration du proxy inverse Nginx

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!