Question d'entretien PHP 7 : Comment configurer l'équilibrage de charge nginx

不言
Libérer: 2023-03-24 09:26:02
original
7137 Les gens l'ont consulté

Le contenu de cet article explique comment configurer l'équilibrage de charge de nginx dans la question d'entretien PHP 7. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Équilibrage de charge


L'équilibrage de charge nginx dispose de 4 modes :

1),

Interrogation (par défaut) Chaque requête est attribuée à un serveur back-end différent une par une dans l'ordre chronologique. Si le serveur back-end tombe en panne, il peut être automatiquement éliminé.
2),
poids Spécifiez la probabilité d'interrogation, le poids est proportionnel au taux d'accès et est utilisé lorsque les performances du serveur principal sont inégales.
2),
ip_hash Chaque requête est allouée en fonction du résultat de hachage de l'adresse IP d'accès, de sorte que chaque visiteur dispose d'un accès fixe à un serveur back-end, ce qui peut résoudre le problème de session.
3),
équitable (tiers) Les requêtes sont allouées en fonction du temps de réponse du serveur back-end, et celles avec des temps de réponse courts sont allouées en premier.
4),
url_hash (tiers)

Méthode de configuration :

Ouvrir le fichier nginx.cnf

Ajouter un nœud en amont sous le nœud http :

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}
Copier après la connexion
Le nom du site est le nom que vous choisissez. Il sera accessible dans l'URL via ce nom. Comme dans l'exemple ci-dessus, si rien n'est ajouté, le sondage par défaut sera effectué. accédé. Le premier serveur, la deuxième demande d'accès au deuxième serveur. Venez à votre tour.

upstream webname {  
  server 192.168.0.1:8080 weight 2;  
  server 192.168.0.2:8080 weight 1;  
}
Copier après la connexion
Ce poids est également facile à comprendre. Plus le poids est lourd, plus la probabilité d'être accédé est grande. Dans l'exemple ci-dessus, le serveur1 est accédé deux fois et le serveur2 est accédé une fois

.
upstream webname {  
  ip_hash;  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}
Copier après la connexion
ip_hash La configuration est également très simple, il suffit d'ajouter une ligne, pour que toute personne venant de la même IP aille sur le même serveur

puis de le configurer sous le nœud du serveur :

location /name {  
    proxy_pass http://webname/name/;  
    proxy_http_version 1.1;  
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection "upgrade";  
}
Copier après la connexion
proxy_pass Le nom Web configuré ci-dessus remplace l'adresse IP d'origine.

Cela termine essentiellement la configuration de l'équilibrage de charge.

Ce qui suit est la configuration de l'actif et de la sauvegarde :

Toujours en amont

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 backup;  
}
Copier après la connexion
Définissez un certain nœud comme sauvegarde, puis dans des circonstances normales, toutes les demandes seront accéder au serveur1. Le serveur1 n'accédera au serveur2 que lorsque le serveur1 raccroche ou est occupé

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 down;  
}
Copier après la connexion
Définissez un nœud vers le bas, ce serveur ne participera pas au chargement.

Exemple d'implémentation

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. aux étudiants dans le besoin.

Équilibrage de charge

Commençons par comprendre brièvement ce qu'est l'équilibrage de charge. Pour le comprendre littéralement, cela peut expliquer que N serveurs partagent la charge de manière égale, et ce ne sera pas le cas parce qu'un certain serveur a un serveur. charge élevée. Une situation dans laquelle un serveur est en panne et un serveur est inactif. 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

Comme 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 la charge du serveur A est équilibrée en serveur B ( 192.168.5.27) et C sur le serveur (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 a.com à des fins de test, donc la résolution de a.com ne peut être définie que dans le fichier hosts.

Ouvrir :

C:WindowsSystem32driversetchosts

Ajouter

192.168.5.149    a.com
Copier après la connexion
à la fin pour enregistrer et quitter, puis démarrer le mode commande et pinger pour voir si le réglage est 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 et l'emplacement du fichier est dans la conf répertoire 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; 
    } 
}
Copier après la connexion
Enregistrez et redémarrez nginx

Paramètres nginx.conf du serveur B et C

Ouvrez nginx.confi et ajoutez dans la section http Le code suivant

server{ 
    listen 80; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Copier après la connexion
Enregistrer et redémarrer nginx

Test

Lors de l'accès à a.com, afin de distinguer vers quel serveur transférer pour le traitement, je en a écrit un sous les serveurs B et C respectivement. fichiers Index.html avec des contenus différents pour les distinguer.

Ouvrez le navigateur pour accéder à a.com Refresh et vous constaterez que toutes les requêtes sont allouées par le serveur principal (192.168.5.149) au serveur B (192.168.5.27) et au serveur C (192.168.5.126). . Effet d'équilibrage de charge obtenu.

Page de traitement du serveur B

Page de traitement du serveur C

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.

如果b.com也要设置负载均衡怎么办?
很简单,跟a.com设置一样。如下:

假设b.com的主服务器IP是192.168.5.149,负载均衡到192.168.5.150和192.168.5.151机器上

现将域名b.com解析到192.168.5.149IP上。

在主服务器(192.168.5.149)的nginx.conf加入以下代码:

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; 
    } 
}
Copier après la connexion

保存重启nginx

在192.168.5.150与192.168.5.151机器上设置nginx,打开nginx.conf在末尾添加以下代码:

server{ 
    listen 80; 
    server_name b.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Copier après la connexion

保存重启nginx

完成以后步骤后即可实现b.com的负载均衡配置。

主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。

如以上案例三台服务器:

A服务器IP :192.168.5.149 (主)

B服务器IP :192.168.5.27

C服务器IP :192.168.5.126

我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。

我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:

1、主服务器转发到了其它IP上,其它IP服务器正常处理;

2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。

怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:

server{ 
    listen 8080; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Copier après la connexion

重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问

既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
      server  127.0.0.1:8080; 
}
Copier après la connexion

由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。

重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。

主服务器也能正常加入服务了。

最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。

二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。

三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。

四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上

相关推荐:

php面试题六之memcache和redis的区别

php面试题五之nginx如何调用php和php-fpm的作用和工作原理

php面试题四之实现autoload

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:php.cn
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