L'équilibrage de charge est quelque chose que notre site Web à fort trafic doit faire. Je vais maintenant vous présenter la méthode de configuration de l'équilibrage de charge sur le serveur Nginx. J'espère qu'elle sera utile aux étudiants. dans le besoin.
Équilibrage de charge
Commençons par comprendre brièvement ce qu'est l'équilibrage de charge. Si vous le comprenez littéralement, vous pouvez expliquer que N serveurs partagent la charge de manière égale. un certain serveur est inactif en raison d'une charge élevée sur un certain serveur. Ensuite, le principe de l'équilibrage de charge est qu'il peut être réalisé par plusieurs serveurs, c'est-à-dire que plus de deux serveurs suffisent.
Environnement de test
Puisqu'il n'y a pas de serveur, ce test héberge directement le nom de domaine spécifié, puis installe trois CentOS dans VMware.
Nom de domaine de test : a.com
IP du serveur A : 192.168.5.149 (principal)
IP du serveur B : 192.168.5.27
Serveur C IP : 192.168.5.126
Idée de déploiement
Un serveur est utilisé comme serveur principal, le nom de domaine est directement résolu en serveur A (192.168.5.149), et le A La charge du serveur est équilibrée sur le serveur B (192.168.5.27) et le serveur C (192.168.5.126).
Résolution du nom de domaine
Comme il ne s'agit pas d'un environnement réel, le nom de domaine est juste un.com à des fins de test, donc la résolution d'un.com ne peut être effectué que dans les paramètres du fichier hosts.
Ouvrir : C:WindowsSystem32driversetchosts
Ajouter
192.168.5.149 à la fin a.com
Enregistrer et quitter, puis démarrer le mode commande et pinger pour voir si la configuration a réussi
À en juger par la capture d'écran, a.com a été analysé avec succès en 192.168.5.149IP
Paramètres nginx.conf d'un serveur
Ouvrez nginx.conf , l'emplacement du fichier se trouve dans le répertoire conf du répertoire d'installation de nginx.
Ajoutez le code suivant dans la section http
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; } server{ listen 80; server_name a.com; location / { proxy_pass http://a.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Enregistrez et redémarrez nginx
Paramètres nginx.conf du serveur B et C
Ouvrez nginx.confi et ajoutez ce qui suit code dans la section http
server{ listen 80; server_name a.com; index index.html; root /data0/htdocs/www; }
Enregistrer et redémarrer nginx
Test
Lors de l'accès à a.com, afin de distinguer vers quel serveur rediriger pour le traitement, j'écris un index avec différents contenu sous les serveurs B et C respectivement.
Ouvrez le navigateur pour accéder à a.com Refresh et vous constaterez que toutes les requêtes sont distribuées par le serveur principal (192.168.5.149) vers le serveur B (192.168.5.27) et le serveur C (192.168.5.126). . Effet d'équilibrage de charge obtenu.
Et si l'un des serveurs tombe en panne ?
Lorsqu'un serveur tombe en panne, l'accès sera-t-il affecté ?
Jetons d'abord un coup d'œil à l'exemple. Sur la base de l'exemple ci-dessus, supposons que le serveur C de la machine 192.168.5.126 est en panne (car il est impossible de simuler le temps d'arrêt, j'ai donc arrêté le serveur C) puis visitez-le à nouveau.
Résultats d'accès :
Nous avons constaté que même si le serveur C (192.168.5.126) était en panne, cela n'affectait pas l'accès au site Web. De cette façon, vous n'aurez pas à vous soucier de faire glisser l'ensemble du site car une certaine machine est en panne en mode d'équilibrage de charge.
Et si b.com devait également mettre en place un équilibrage de charge ?
C'est très simple, comme pour les paramètres a.com. Comme suit :
Supposons que l'adresse IP du serveur principal de b.com est 192.168.5.149 et que la charge est équilibrée entre les machines 192.168.5.150 et 192.168.5.151.
Résolvez maintenant le nom de domaine. b.com au 192.168.5.149 sur IP.
Ajoutez le code suivant à nginx.conf du serveur principal (192.168.5.149) :
upstream b.com { server 192.168.5.150:80; server 192.168.5.151:80; } server{ listen 80; server_name b.com; location / { proxy_pass http://b.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Enregistrez et redémarrez nginx
à 192.168. 5.150 et 192.168 .Définissez nginx sur la machine 5.151, ouvrez nginx.conf et ajoutez le code suivant à la fin :
server{ listen 80; server_name b.com; index index.html; root /data0/htdocs/www; }
Enregistrez et redémarrez nginx
Après avoir terminé les étapes suivantes, vous pouvez implémenter la configuration d'équilibrage de charge de b.com.
Le serveur principal ne peut pas fournir de services ?
Dans les exemples ci-dessus, nous avons appliqué l'équilibrage de charge du serveur principal à d'autres serveurs, afin que le serveur principal lui-même puisse être ajouté à la liste des serveurs, afin qu'il ne soit pas gaspillé en utilisant un serveur uniquement comme fonction de transfert. , et oui, nous sommes également impliqués dans la fourniture de services.
Comme dans le cas ci-dessus, trois serveurs :
IP du serveur A : 192.168.5.149 (principal)
IP du serveur B : 192.168.5.27
IP du serveur C : 192.168.5.126
Nous résolvons le nom de domaine vers le serveur A, puis le transmettons au serveur B et au serveur C à partir du serveur A. Ensuite, le serveur A effectue uniquement une fonction de transfert. fournissent également des services sur site.
Analysons-le d'abord. Si vous ajoutez le serveur principal en amont, les deux situations suivantes peuvent se produire :
1 Le serveur principal est redirigé vers d'autres IP, et les autres serveurs IP sont normaux. . Traitement ;
2. Le serveur principal le transmet à sa propre IP, puis se rend au serveur principal pour attribuer l'IP. S'il est toujours alloué à la machine locale, cela provoquera une boucle infinie.
Comment résoudre ce problème ? Étant donné que le port 80 a été utilisé pour surveiller le traitement de l'équilibrage de charge, le port 80 ne peut plus être utilisé sur ce serveur pour traiter les demandes d'accès à a.com et un nouveau doit être utilisé. Nous avons donc ajouté le code suivant au nginx.conf du serveur principal :
server{ listen 8080; server_name a.com; index index.html; root /data0/htdocs/www; }
Redémarrez nginx et saisissez a.com:8080 dans le navigateur pour voir si vous pouvez y accéder. Le résultat est accessible normalement
Comme il est accessible normalement, nous pouvons ajouter le serveur principal en amont, mais le port doit être modifié, comme indiqué dans ce qui suit code :
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; server 127.0.0.1:8080; }
由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。
更多Nginx相关技术文章,请访问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!