Maison  >  Article  >  Java  >  Comment réaliser l'équilibrage de charge avec Nginx+SpringBoot

Comment réaliser l'équilibrage de charge avec Nginx+SpringBoot

WBOY
WBOYavant
2023-05-29 17:28:061496parcourir

Introduction à l'équilibrage de charge

Avant de présenter l'implémentation de l'équilibrage de charge de nginx, parlons brièvement de la classification de l'équilibrage de charge, qui est principalement divisé en équilibrage de charge matérielle et équilibrage de charge logicielle, l'équilibrage de charge matérielle utilise des équipements combinant des logiciels et du matériel spécialisés. Les fournisseurs d'équipements proposent des solutions complètes et matures, telles que f5, qui sont très fiables en termes de stabilité et de sécurité des données, mais par rapport à The. le coût du logiciel sera plus élevé ; l'équilibrage de la charge logicielle repose principalement sur des logiciels tels que nginx, qui implémente un mécanisme de distribution de files d'attente de messages.

En termes simples, ce qu'on appelle l'équilibrage de charge consiste à décharger de nombreuses requêtes et à les affecter à différents serveurs pour traitement. Par exemple, j'ai 3 serveurs, à savoir a, b et c, puis j'utilise nginx pour l'équilibrage de charge et une stratégie d'interrogation. Si 9 requêtes sont reçues à ce moment, les 9 requêtes seront réparties uniformément entre a et b. cf serveur, chaque serveur gère 3 requêtes, afin que nous puissions utiliser les caractéristiques de plusieurs clusters de machines pour réduire la pression sur un seul serveur.

nginx Exemple d'équilibrage de charge :

Comment réaliser léquilibrage de charge avec Nginx+SpringBoot

Stratégie d'équilibrage de charge#🎜🎜 ## 🎜🎜#nginx open source prend en charge quatre méthodes d'équilibrage de charge, et nginx plus ajoute deux méthodes supplémentaires.

1.round robin :

Interrogation et envoi de requêtes pour toutes les requêtes, la méthode d'allocation par défaut.

nginx.conf Exemple de configuration :

Remarque : Le nom de domaine ci-dessus peut également être remplacé par ip.

2.le moins de connexions :

Envoyez la requête au serveur avec le moins de connexions actives, en tenant également compte du poids du serveur.

nginx.conf Exemple de configuration :

3.ip hash :

Le serveur qui envoie la requête est envoyé par le client Déterminé par l'adresse IP. Dans ce cas, la valeur de hachage est calculée en utilisant les trois premiers octets de l'adresse ipv4 ou l'intégralité de l'adresse ipv6. Cette méthode garantit que les requêtes provenant de la même adresse atteignent le même serveur, sauf si ce serveur est indisponible.

4.hachage générique :

Le serveur auquel la requête est envoyée est déterminé par une clé définie par l'utilisateur, qui peut être une chaîne de texte ou une variable ou une combinaison.

5.le moins de temps (nginx plus uniquement)

Pour chaque requête, nginx plus choisit celle avec la latence moyenne la plus faible et la plus faible nombre de connexions actives au serveur, où la latence moyenne la plus faible est calculée en fonction des paramètres suivants contenant la directive less_time :

    header : Le temps nécessaire pour recevoir le premier octet du serveur.
  • last_byte : L'heure de réception de la réponse complète du serveur.
  • last_byte inflight : Le délai de réception de la réponse complète du serveur.
6.random :

Chaque demande sera envoyée à un serveur sélectionné au hasard. Si deux paramètres sont spécifiés, nginx sélectionne d'abord au hasard deux serveurs en fonction des poids des serveurs, puis en sélectionne un à l'aide de la méthode spécifiée.

    least_conn : Nombre minimum de connexions actives
  • least_time=header (nginx plus) : Reçu du serveur Temps moyen minimum pour les en-têtes de réponse ($upstream_header_time).
  • least_time=last_byte (nginx plus) : Le délai moyen le plus court pour recevoir une réponse complète du serveur ($upstream_response_time).
nginx+springboot parvient à équilibrer la charge

Préparation de l'environnement

#🎜 🎜#

Dépend de jdk1.8 ou supérieur

  • Dépend de l'environnement nginx ; #

  • Le projet ici utilise l'un de mes précédents projets Springboot. L'adresse du projet Springboot est : https://github.com/xuwujing/springboot-study/tree/. master /springboot-thymeleaf

  • Nous téléchargeons d'abord ce projet et entrons dans le port :
, par exemple, changez-le en 8086.

configuration nginx mvn clean package 将项目进行打包为jar文件,然后将application.properties和此jar项目放在一个文件夹中,然后复制该文件夹(这里为了清晰所以进行复制,实际不复制更改端口重启也行),修改复制文件夹application.properties

On retrouve le fichier de configuration nginx nginx.conf, qui se trouve dans nginx/conf/nginx.conf répertoire, puis nous modifions la configuration et ajoutons la configuration suivante :

upstream pancm : Définissez un nom, faites simplement ce que vous voulez

#🎜🎜 ; ## 🎜🎜#
    serveur + ip : port ou nom de domaine
  • Si vous ne souhaitez pas utiliser la stratégie round robin , vous pouvez également le remplacer par un autre.


    Puis ajoutez/modifiez la configuration suivante sur le serveur :

  • Instructions de configuration :

serveur : Le nom de l'hôte virtuel, plusieurs serveurs peuvent être configurés sur un seul http ; 🎜#server_name : L'adresse du service nginx Vous pouvez utiliser plusieurs noms de domaine séparés par des espaces.

    proxy_pass : chemin du proxy, configurez généralement le nom après en amont pour réaliser l'équilibrage de charge, vous pouvez directement configurer l'adresse IP pour le saut
  • # ; 🎜🎜#

  • nginx.conf Configuration complète :

    Test d'équilibrage de charge

    Après avoir terminé la configuration de nginx, nous démarrons nginx.
    linux input /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf, s'il a déjà été démarré, vous pouvez utiliser /usr/local /nginx/sbin/nginx -s reload pour charger à chaud le fichier de configuration Sous Windows, cliquez directement sur nginx.exe ou cmd. pour exécuter dans le répertoire nginx. démarrez nginx pour démarrer. S'il est démarré, vous pouvez toujours utiliser nginx -s reload pour le chargement à chaud. /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,如果已经启动可以使用/usr/local/nginx/sbin/nginx -s reload命令进行热加载配置文件,windows直接点击nginx目录下的nginx.exe或者 cmd运行start nginx进行启动,如果启动了依旧可以使用nginx -s reload进行热加载。

    nginx启动完成之后,我们依次启动刚刚下载的springboot和复制更改端口的项目,输入:java -jar springboot-jsp-thymeleaf.jar

    Après le démarrage de nginx, nous démarrons le springboot que nous venons de télécharger et copions le projet pour changer le port. Entrez : java -jar springboot-jsp-thymeleaf.jar pour démarrer. .

    Une fois que tout est démarré avec succès, nous pouvons saisir l'adresse IP du service dans le navigateur pour y accéder.

    Exemple d'image :

    Comment réaliser léquilibrage de charge avec Nginx+SpringBoot

    Remarque : j'utilise le système Windows pour tester ici, et le Linux actuel est le même .

    Ensuite, nous procédons et vérifions le journal de la console !

    Comment réaliser léquilibrage de charge avec Nginx+SpringBoot

    À partir de l'exemple de diagramme ci-dessus, nous avons effectué 4 demandes de rafraîchissement d'interface, et les avons finalement réparties uniformément entre les deux services à partir des résultats des tests ci-dessus que nous avons implémentés. équilibrage de charge.

    Ici, je parle des précautions d'utilisation de nginx, lors de l'apprentissage et des tests, il n'y a généralement aucun problème à utiliser le port par défaut de nginx pour réaliser l'équilibrage de charge, mais lorsque nous l'utilisons dans le projet, surtout. lorsqu'il existe une interface de connexion et que le port n'est pas 80, l'interface de connexion ne peut pas être sautée. Lors du débogage, une erreur telle que net::err_name_not_resolved apparaîtra. La raison en est que le port par défaut de nginx est 80, donc la valeur par défaut. jump est C'est également le cas, donc lorsque cela se produit, vous devez ajouter la configuration proxy_set_header host $host:port sous location. #🎜🎜#

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