Maison  >  Article  >  Opération et maintenance  >  Comment utiliser nginx pour implémenter un cluster d'équilibrage de charge avec séparation dynamique et statique

Comment utiliser nginx pour implémenter un cluster d'équilibrage de charge avec séparation dynamique et statique

WBOY
WBOYavant
2023-05-22 22:52:411356parcourir

1. Environnement expérimental

1.1 Système et services

Le système d'exploitation et les services utilisés cette fois :

Cette expérience nécessite un total de 3 serveurs, un nginx est utilisé comme distributeur d'équilibrage de charge et comme distributeur de séparation dynamique et statique. Deux serveurs Apache sont utilisés comme serveurs principaux, et nginx est utilisé pour réaliser l'équilibrage de charge et la séparation dynamique des deux serveurs Apache.

Système d'exploitation : centos7.6
Version nginx : version 1.22
Version apache : 2.4.6 fournie avec le système par défaut
Version php : 5.4.16 fournie avec le système par défaut

Les versions apache et php peuvent être mis à niveau vers la dernière version, vous pouvez le télécharger et l'installer à partir du site officiel.

1.2 Le schéma d'architecture à mettre en œuvre cette fois

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

Généralement, nos serveurs sont divisés en plusieurs types, notamment les serveurs de fichiers, les serveurs d'images et les serveurs de bases de données.

Il existe également divers services :

  • Traitement de fichiers statiques : Vous pouvez utiliser nginx ou apache

  • Traitement de fichiers dynamiques : apache, tomcat

  • Traitement de fichiers images : squid

Dans cet article, nous Utilisez nginx pour réaliser un cluster d'équilibrage de charge avec séparation dynamique et statique.

2. Explication détaillée de l'équilibrage de charge nginx

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

L'équilibrage de charge du serveur fait référence à une technologie qui alloue les requêtes des clients à plusieurs serveurs pour améliorer les performances du système, augmenter la fiabilité du système et éviter les points de défaillance uniques.

Grâce à l'équilibrage de charge, plusieurs serveurs peuvent traiter conjointement les demandes des clients, améliorant ainsi les performances globales et la disponibilité du système.

Dans l'équilibrage de charge, plusieurs serveurs sont généralement formés dans un cluster de serveurs. Le client envoie une requête à l'équilibreur de charge, et l'équilibreur de charge alloue la requête à un ou plusieurs serveurs du cluster de serveurs selon un certain algorithme pour le traitement. . Il existe de nombreux algorithmes d'équilibrage de charge, les plus courants incluent l'interrogation, l'aléatoire, le nombre minimum de connexions, etc.

Les stratégies d'équilibrage de charge peuvent devenir plus sophistiquées, par exemple en utilisant des fonctionnalités avancées telles que la persistance de session, les contrôles de santé et les ajustements dynamiques de poids. En configurant et en ajustant les besoins réels, la flexibilité et l'efficacité du système d'équilibrage de charge peuvent être améliorées.

2.2 5 façons d'équilibrer la charge

5 façons de charger en amont de Nginx, les 3 méthodes les plus couramment utilisées sont actuellement :
1) Polling (par défaut)
Chaque requête est allouée à différents backends un par un dans l'ordre chronologique Serveur, si le serveur backend tombe en panne, il peut être automatiquement éliminé.
2) Weight
spécifie la probabilité d'interrogation, le poids est proportionnel au taux d'accès et est utilisé lorsque les performances du serveur backend sont inégales.
3) ip_hash
Chaque requête est allouée en fonction du résultat de hachage de l'IP d'accès, afin que chaque visiteur ait un accès fixe à un serveur backend, ce qui peut résoudre le problème de session.
4) air (tiers)
Attribue les requêtes en fonction du temps de réponse du serveur backend, avec une priorité donnée à celles ayant des temps de réponse courts.
5) url_hash (tiers)
Distribuez les requêtes en fonction du résultat de hachage de l'url consultée, afin que la même url soit dirigée vers le même serveur back-end. C'est plus efficace lorsque le serveur back-end est mis en cache

. 3. Installez nginx en tant que distributeur de trafic

3.1 Avant d'installer nginx, préparez-vous à installer les outils dépendants

[root@mufeng41 ~]#  yum -y install gcc gcc-c++ autoconf automake

[root@mufeng41 ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

Lorsque Mu Feng Xiaoyue a effectué cette étape d'installation, elle a oublié de monter l'image, ce qui lui a fait perdre beaucoup de temps, elle a donc dû pour le monter à l'avance et configurer la source yum.

Téléchargez le package compressé nginx et décompressez-le

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

[root@mufeng41 ~]# ll nginx-1.12.2.tar.gz 
-rw-r--r--. 1 root root 981687 8月  27 2019 nginx-1.12.2.tar.gz
[root@mufeng41 ~]# tar xf nginx-1.12.2.tar.gz  -C /usr/local/src/

Connectez-vous et visualisez

root@mufeng41 ~]# cd !$
cd /usr/local/src/
[root@mufeng41 src]# ls
nginx-1.12.2
[root@mufeng41 src]# cd nginx-1.12.2/
[root@mufeng41 nginx-1.12.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@mufeng41 nginx-1.12.2]#

3.2 Commencez à compiler

./configure --prefix=/usr/local/nginx  --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module  --with-http_mp4_module

Explication des paramètres :

  • –with-http_dav_module Enable ng Prise en charge de x_http_dav_module (ajouter P UT, DELETE, MKCOL : Créer une collection, les méthodes COPY et MOVE) sont désactivées par défaut et doivent être compilées et activées

  • –with-http_stub_status_module pour activer la prise en charge de ngx_http_stub_status_module (obtenir l'état de fonctionnement de nginx depuis le dernier démarrage)

  • –with -http_addition_module active la prise en charge de ngx_http_addition_module (agit comme un filtre de sortie, prend en charge la mise en mémoire tampon incomplète, répond aux requêtes en partie)

  • –with-http_sub_module active la prise en charge de ngx_http_sub_module (permet de remplacer du texte dans la réponse nginx par du autre texte)

  • –with-http_flv_module active la prise en charge de ngx_http_flv_module (fournissant des fichiers de décalage basés sur le temps pour rechercher l'utilisation de la mémoire)

  • –with-http_mp4_module active la prise en charge des fichiers mp4 (fournissant des fichiers de décalage basés sur le temps pour rechercher utilisation de la mémoire)

3.3 Commencez à compiler et à installer nginx

Utilisez make && make install pour installermake && make install进行安装

[root@mufeng41 nginx-1.12.2]# make && make install

如何判断是否执行成功?

答: echo $?

3.4 生成运行的nginx用户

[root@mufeng41 nginx-1.12.2]# useradd -u 8000 -s /sbin/nologin  nginx
[root@mufeng41 nginx-1.12.2]# id nginx
uid=8000(nginx) gid=8000(nginx) 组=8000(nginx)
[root@mufeng41 nginx-1.12.2]#

3.5 启动nginx并测试

如果你不知道nginx配置文件和启动脚本在哪,可以搜一下,使用find / -name nginx.conf

[root@itlaoxin163 ~]# find / -name nginx.conf
/usr/local/nginx/conf/nginx.conf

# 启动
[root@mufeng41 nginx-1.12.2]# /usr/local/nginx/sbin/nginx 

[root@mufeng41 nginx-1.12.2]# netstat -antup |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      25286/nginx: master 
udp        0      0 0.0.0.0:58076           0.0.0.0:*

Comment juger si l'exécution est réussie ?

Réponse : echo $ ?

3.4 Générer un utilisateur nginx en cours d'exécution🎜
[root@mufeng41 nginx-1.12.2]# systemctl stop firewalld.service
[root@mufeng41 nginx-1.12.2]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 24 Mar 2023 11:06:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 24 Mar 2023 11:01:53 GMT
Connection: keep-alive
ETag: "641d8321-264"
Accept-Ranges: byte
🎜3.5 Démarrez nginx et testez🎜🎜Si vous ne savez pas où se trouvent le fichier de configuration nginx et le script de démarrage, vous pouvez les rechercher et utiliser find / - nom nginx.conf .🎜🎜Démarrez le service🎜
[root@mufeng41 conf]# pwd
/usr/local/nginx/conf
[root@mufeng41 conf]# cp nginx.conf nginx.conf.bak
[root@mufeng41 conf]#
🎜Voir l'effet🎜
[root@mufeng41 nginx-1.12.2]# systemctl stop firewalld.service
[root@mufeng41 nginx-1.12.2]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 24 Mar 2023 11:06:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 24 Mar 2023 11:01:53 GMT
Connection: keep-alive
ETag: "641d8321-264"
Accept-Ranges: byte

四. 配置nginx成为分发器

4.1 先备份配置文件

[root@mufeng41 conf]# pwd
/usr/local/nginx/conf
[root@mufeng41 conf]# cp nginx.conf nginx.conf.bak
[root@mufeng41 conf]#

4.2 把nginx设置成分发器,实现动静分离

配置如下图:

配置分发器

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

location / {
            root   html;
            index  index.html index.htm;


        if ($request_uri ~* \.html$){
                   proxy_pass http://htmlservers;
           }
        if ($request_uri ~* \.php$){
                   proxy_pass http://phpservers;
           }
                   proxy_pass http://picservers;

        }

注释:
location 的作用是根据请求的 URI,将请求转发到不同的后端服务器上进行处理。具体解释如下:

  • location /:表示所有请求(URI)都会被这个 location 块所匹配。

  • root html:表示当访问的 URI对应的文件不存在时,会在 nginx 安装目录下的 html 目录中查找对应的文件。

  • index index.html

  • index.htm:表示当访问的 URI 对应的目录中没有指定的默认文件时,会尝试访问 index.html 或 index.htm 文件。

  • if ($request_uri ~* .html$):表示如果请求的 URI 包含 .html,则执行下面的语句。

  • proxy_pass http://htmlservers:表示将请求转发到名为 htmlservers 的后端服务器处理。

  • if ($request_uri ~* .php$):表示如果请求的 URI 包含 .php,则执行下面的语句。

  • proxy_pass http://phpservers:表示将请求转发到名为 phpservers 的后端服务器处理。

  • proxy_pass http://picservers:表示将请求转发到名为 picservers 的后端服务器处理,这个语句没有条件限制,如果以上两个if 语句都不匹配,则会执行这个语句。

接下来设置负载均衡对应的IP

定义负载均衡设备的IP

在nginx配置文件最后一行}前添加一下内容:

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

代码如下:

 upstream  htmlservers {  
         server 192.168.1.42:80;   
         server 192.168.1.43:80;
 }
 upstream  phpservers{
         server 192.168.1.42:80;
         server 192.168.1.43:80;
 }
 upstream  picservers {
         server 192.168.1.42:80;
         server 192.168.1.43:80;
 }

配置文件是否有错误

[root@mufeng41 conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启nginx

[root@mufeng41 conf]# /usr/local/nginx/sbin/nginx -s reload

五. 配置两台http服务器

接下来,需要在 mufeng42和mufeng43上操作

5.1 配置mufeng42服务器 配置web服务器:

[root@mufeng42 ~]# yum install httpd  php -y

生成静态测试文件

[root@mufeng42 ~]# echo 192.168.1.42  > /var/www/html/index.html

在创建一个php文件:

[root@itlaoxin162 ~]# vim /var/www/html/test.php

写入内容:

echo "我是42服务器";echo "我是沐风晓月"<?phpphpinfo();?>

启动apache

[root@mufeng42 ~]# systemctl  restart httpd

5.2 配置mufeng43服务器

安装http并生成静态文件

[root@mufeng43 ~]# yum install httpd php -y
[root@mufeng43 ~]# echo 192.168.1.43 > /var/www/html/index.html

建立php文件

[root@mufeng43 ~]# cd /var/www/html/

[root@mufeng43 html]# vi mufeng.php
[root@mufeng43 html]# cat mufeng.php 
echo "我是43服务器";
<?php
phpinfo();
?>

启动配置文件

[root@mufeng43 html]# systemctl restart httpd

5.3 测试

到目前为止,nginx负载均衡就结束了,接下来就可以测试了:

测试静态页面

浏览器输入: http://192.168.1.41/ 进行测试

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

测试转发动态页面:

浏览器输入 http://192.168.1.41/test.php

Comment utiliser nginx pour implémenter un cluster déquilibrage de charge avec séparation dynamique et statique

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