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
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.
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/浏览器类别等七层的信息进行进一步的响应 |
软件 | 四层负载均衡 | 七层负载均衡 |
---|---|---|
nginx | 轻量实现 | 支持http和mail,性能与haproxy相近 |
haproxy | - | 支持七层负载均衡 |
LVS | 支持四层负载均衡,实现较重 | - |
F5 | 硬件实现,成本高 | - |
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. |
|
||||||||||||||||||||||||||||||||||||||||
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 |
Ensuite, utilisez nginx pour montrer comment effectuer une interrogation ordinaire :
负载均衡算法 | 负载均衡算法(E) | nginx支持与否 | 说明 | 适用场景 |
---|---|---|---|---|
普通轮询 | Round Robin | 支持 | 权重相同的轮询 | 适用于外部服务请求和内部服务器都相对均衡的场景 |
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 ~]#
[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 ~]#
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; } }
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...省略
# 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; #}}#
# 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; #}}#
[root@kong ~]# docker restart nginx-lbnginx-lb [root@kong ~]#
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 ~]#
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 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; #
[root@kong ~]# docker restart nginx-lbnginx-lb [root@kong ~]#
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 ~]#
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!