Maison > Opération et maintenance > Nginx > Comment Nginx implémente l'équilibrage de charge

Comment Nginx implémente l'équilibrage de charge

WBOY
Libérer: 2023-05-11 20:07:04
avant
4494 Les gens l'ont consulté

    1 Introduction à Nginx

    Nginx est un Http et inverse haute performance. serveur Le serveur proxy est également un serveur IMAP/POP3/SMTP (proxy de messagerie). L'un des premiers objectifs du développement de ce produit est également celui de serveur proxy de messagerie. Il est largement utilisé dans divers déploiements de production en raison de sa stabilité, de son riche ensemble de fonctionnalités, de ses exemples de fichiers de configuration, de sa faible consommation de ressources système et de ses performances de concurrence élevées. De plus, nginx implémente un multiplexage d'E/S basé sur le modèle événementiel (epoll) et traite les requêtes de manière asynchrone et non bloquante. Dans le cas d’une forte concurrence de connexions, Nginx est une bonne alternative au serveur Apache. Et pourquoi devrions-nous choisir Nginx ?

    2. Fonctionnalités Nginx

    • Haute simultanéité et hautes performances

    •  ; Haute fiabilité (peut fonctionner 24h/24 et 7j/7

    • Forte évolutivité (conception hautement modulaire, ajout de modules en douceur

      #🎜 🎜#
    • ) ;
    • En tant que serveur Web : par rapport à Apache, Nginx utilise moins de ressources et prend en charge plus de connexions simultanées ;

    • En tant que serveur à charge équilibrée : une configuration personnalisée peut être effectuée , prenant en charge les hôtes virtuels, la redirection d'URL, la surveillance du réseau, etc.

    • L'installation de Nginx est très simple, le fichier de configuration est très concis (il peut également supporter la syntaxe perl), et il y a peu de bugs ; #

      # 🎜🎜#Traitez les fichiers statiques, les fichiers indexés et l'indexation automatique ;

    • Accélération du proxy inverse (pas de mise en cache), équilibrage de charge simple et tolérance aux pannes ;

      # 🎜🎜#
    • Prend en charge le déploiement à chaud (nginx peut être mis à niveau sans arrêter le serveur).

    • C'est pourquoi vous devriez choisir Nginx. Et les fonctions et fonctionnalités de Nginx ne se limitent pas à celles-ci. Ce qui précède n'est qu'une brève liste de quelques fonctions courantes.

    3. Équilibrage de charge Nginx

    Dans notre production actuelle, la puissance de traitement et l'espace de stockage d'un serveur sont limités, alors n'essayez pas de le changer vers un serveur plus puissant Pour les grands sites Web, quelle que soit la puissance du serveur, il ne peut pas répondre à la croissance continue des besoins commerciaux du site Web. Dans ce cas, une approche plus appropriée consiste à ajouter un serveur pour partager la pression d’accès et de stockage du serveur d’origine. En fait, c'est ce que nous appelons

    Load Balancing
    . En tant que serveur d'équilibrage de charge, Nginx utilise un proxy inverse pour équilibrer la charge de plusieurs serveurs back-end. Parlons d’abord de la stratégie d’équilibrage de charge Nginx et de l’algorithme d’équilibrage de charge.

    3.1 Comprendre le module en amont

    upstream Ce module consiste à écrire un ensemble d'adresses de serveur proxy (c'est-à-dire, sélectionner un serveur dans la liste de serveurs back-end définie pour accepter la demande de l'utilisateur), puis configurez l'algorithme d'équilibrage de charge. Jetons un coup d'œil à l'exemple d'équilibrage de charge le plus basique :

    upstream test { 
          server 10.20.151.114:80;
          server 10.20.151.115:80;
    }
    server {
          ....
          location / {         
                 proxy_pass  http://test;     --请求转向 test 定义的服务器列表         
          }
    Copier après la connexion

    3.2 Stratégie d'équilibrage de charge Nginx

    (1) Sondage

    La configuration la plus basique méthode , l'exemple ci-dessus est la méthode d'interrogation, qui est la stratégie d'équilibrage de charge par défaut du module en amont. Chaque requête est distribuée à un serveur backend différent une par une dans l'ordre chronologique.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }
    Copier après la connexion

    (2)ip_hash

    Chaque requête est attribuée en fonction du résultat de hachage de l'IP d'accès, et le même client IP accède toujours à un serveur back-end. Il peut garantir que les requêtes provenant de la même adresse IP sont envoyées à une machine fixe, ce qui peut résoudre le problème de session.

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

    (3) url_hash

    Distribuez les requêtes en fonction du résultat de hachage de l'URL consultée, afin que chaque URL soit dirigée vers le même serveur backend. Une fois la ressource mise en cache, elle peut être lue depuis le cache lorsqu'une demande est reçue.

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

    (4) lesast_conn

    Transférez la requête au serveur backend avec moins de connexions. L'algorithme d'interrogation transmet les requêtes à chaque backend de manière uniforme afin que leurs charges soient à peu près les mêmes ; cependant, certaines requêtes prennent beaucoup de temps, ce qui entraînera une charge plus élevée du backend où elles se trouvent. Dans ce cas, less_conn peut obtenir un meilleur effet d'équilibrage de charge.

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

    (5) poids

    La méthode de pondération spécifie la probabilité d'interrogation en fonction de la stratégie d'interrogation.

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

    (6)fair

    Cet algorithme peut effectuer intelligemment un équilibrage de charge en fonction de la taille de la page et du temps de chargement, c'est-à-dire allouer les requêtes en fonction du temps de réponse du back- serveur final, la priorité est donnée à ceux ayant des temps de réponse courts.

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

    paramètres d'état de configuration de l'équilibrage de charge nginx

    down : indique que le serveur actuel est temporairement Ne participe pas à l’équilibrage de charge.

    • backup : Machine de sauvegarde réservée. La machine de sauvegarde sera demandée lorsque toutes les autres machines non de sauvegarde tombent en panne ou sont occupées, cette machine a donc le moins de pression.

    • max_fails : Le nombre d'échecs de requête autorisés, la valeur par défaut est 1. Lorsque le nombre maximum de fois est dépassé, l'erreur définie par le module proxy_next_upstream est renvoyée.

    • fail_timeout : après avoir rencontré des échecs max_fails, l'unité de temps pour suspendre le service est en secondes. max_fails peut être utilisé avec fail_timeout.

    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  --配置子配置文件
    Copier après la connexion

    Comment Nginx implémente léquilibrage de charge

    Comment Nginx implémente léquilibrage de charge

    (2)后端服务器配置

    vim /usr/local/nginx/conf/nginx.conf    --修改配置文件
    vim /usr/local/nginx/html/index.html    --添加测试数据
    Copier après la connexion

    Comment Nginx implémente léquilibrage de charge

    Comment Nginx implémente léquilibrage de charge

    (3)负载均衡测试

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

    Comment Nginx implémente léquilibrage de charge

    Comment Nginx implémente léquilibrage de charge

    当我添加权重(weight)时

    Comment Nginx implémente léquilibrage de charge

    再次访问http://10.20.151.240/

    Comment Nginx implémente léquilibrage de charge

    Comment Nginx implémente léquilibrage de charge

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

    当我添加backup状态参数时

    Comment Nginx implémente léquilibrage de charge

    再次访问http://10.20.151.240/

    Comment Nginx implémente léquilibrage de charge

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

    Comment Nginx implémente léquilibrage de charge

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

    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:yisu.com
    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