Maison >Java >javaDidacticiel >Comment réaliser l'équilibrage de charge avec Nginx+SpringBoot
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 :
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 :
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.
Préparation de l'environnement
#🎜 🎜#
Dépend de jdk1.8 ou supérieur
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
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
#🎜🎜 ; ## 🎜🎜#
Puis ajoutez/modifiez la configuration suivante sur le serveur :
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.
# ; 🎜🎜#
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
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 :
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 !
À 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!