Maison  >  Article  >  développement back-end  >  Plusieurs façons pour Nginx d'atteindre l'équilibrage de charge

Plusieurs façons pour Nginx d'atteindre l'équilibrage de charge

小云云
小云云original
2018-03-05 11:12:033221parcourir

Qu'est-ce que l'équilibrage de charge

Lorsque le nombre de visites par unité de temps d'un serveur augmente, la pression sur le serveur devient plus grande. Lorsqu'il dépasse sa propre capacité, le serveur va. va planter. Afin d'éviter les pannes de serveur et d'offrir aux utilisateurs une meilleure expérience, nous utilisons l'équilibrage de charge pour partager la pression du serveur.

Nous pouvons construire de très nombreux serveurs pour former un cluster de serveurs Lorsqu'un utilisateur visite le site Web, il visite d'abord un serveur intermédiaire, puis laisse le serveur intermédiaire choisir un serveur avec moins de pression dans le cluster de serveurs, puis transférez les demandes d'accès vers le serveur. De cette manière, chaque visite d'un utilisateur garantira que la pression de chaque serveur du cluster de serveurs tend à être équilibrée, partageant la pression du serveur et évitant les pannes de serveur.

L'équilibrage de charge est mis en œuvre selon le principe du proxy inverse.

Plusieurs méthodes courantes d'équilibrage de charge

1. Polling (par défaut)
Chaque requête est allouée à différents serveurs un par un dans l'ordre chronologique. Le serveur final peut être automatiquement éliminé si le serveur principal tombe en panne.

upstream backserver {    server 192.168.0.14;    server 192.168.0.15;
}

2. Weight
spécifie la probabilité d'interrogation, le poids est proportionnel au taux d'accès et est utilisé dans
situations où les performances du serveur back-end sont inégales.

upstream backserver {    server 192.168.0.14 weight=3;    server 192.168.0.15 weight=7;
}

Plus le poids est élevé, plus la probabilité d'être accédé est grande. Comme dans l'exemple ci-dessus, ils sont respectivement de 30% et 70%.

3. Un problème avec la méthode ci-dessus est que dans le système d'équilibrage de charge, si l'utilisateur se connecte à un certain serveur, alors lorsque l'utilisateur fait une deuxième demande, car nous sommes un système d'équilibrage de charge, chaque time Chaque requête sera redirigée vers l'un des clusters de serveurs. Si un utilisateur connecté à un serveur est redirigé vers un autre serveur, ses informations de connexion seront perdues.

Nous pouvons utiliser l'instruction ip_hash pour résoudre ce problème. Si le client a déjà visité un certain serveur, lorsque l'utilisateur reviendra, la demande sera automatiquement localisée sur le serveur via l'algorithme de hachage.

Chaque requête est allouée en fonction du résultat de hachage de l'IP d'accès, de sorte que chaque visiteur ait un accès fixe à un serveur back-end, ce qui peut résoudre le problème de session.

upstream backserver {
    ip_hash;    server 192.168.0.14:88;    server 192.168.0.15:80;
}

4. équitable (tiers)
Les demandes sont allouées en fonction du temps de réponse du serveur backend, et celles avec des temps de réponse courts sont allouées en premier.

upstream backserver {    server server1;    server server2;
    fair;
}

5. url_hash (tiers)
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 back-end. le serveur principal est mis en cache.

upstream backserver {
    server squid1:3128;
    server squid2:3128;    hash $request_uri;    hash_method crc32;
}

Le statut de chaque appareil est réglé sur :

1.down signifie que le serveur devant le single ne participe temporairement pas à la charge
2.weight Le la valeur par défaut est 1. Plus le poids est élevé, plus la charge est importante.
3.max_fails : Le nombre d'échecs de requête autorisés est de 1 par défaut. Lorsque le nombre maximum est dépassé, l'erreur définie par le module proxy_next_upstream est renvoyée
4. > les échecs. fail_timeout:max_fails5.backup : lorsque toutes les autres machines autres que de sauvegarde sont en panne ou occupées, demandez la machine de sauvegarde. Cette machine aura donc le moins de pression.

Exemple de configuration :

#user  nobody;worker_processes  4;
events {    # 最大并发数
    worker_connections  1024;
}
http{    # 待选服务器列表
    upstream myproject{        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;        server 125.219.42.4 fail_timeout=60s;        server 172.31.2.183;
        }    server{                # 监听端口
                listen 80;                # 根目录下
                location / {                    # 选择哪个服务器列表
                    proxy_pass http://myproject;
                }

            }
}
Recommandations associées :

Proxy inverse Nginx et pratique d'équilibrage de charge

nginx configuration d'équilibrage de charge à quatre couches

Explication détaillée de l'équilibrage de charge 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!

Déclaration:
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