Maison >développement back-end >tutoriel php >Hôte virtuel Apache : équilibreur de charge
L'
L'équilibrage de charge est une excellente stratégie pour répartir les requêtes sur plusieurs serveurs backend, améliorant ainsi l'évolutivité et la disponibilité du système. Apache peut être configuré comme un équilibreur de charge à l'aide du module mod_proxy_balancer.
Voici un guide complet pour implémenter l'équilibrage de charge dans Apache :
Tout d'abord, activez les modules requis dans Apache :
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod proxy_balancer sudo a2enmod lbmethod_byrequests
Redémarrez Apache pour charger les modules :
sudo systemctl restart apache2
Maintenant, modifiez le fichier de configuration de votre hôte virtuel pour ajouter les directives d'équilibrage de charge.
Ouvrez le fichier de configuration :
sudo your_editor /etc/apache2/sites-available/php.conf
Ajoutez le bloc de code suivant pour configurer l'équilibrage de charge sur plusieurs serveurs backend :
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName php.info # Load balancer configuration <Proxy "balancer://meucluster"> BalancerMember http://localhost:8080 BalancerMember http://localhost:8081 BalancerMember http://localhost:8082 ProxySet lbmethod=byrequests </Proxy> ProxyPreserveHost On ProxyPass / balancer://meucluster/ ProxyPassReverse / balancer://meucluster/ <Directory /var/www/html/php/> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/php_error_http.log CustomLog ${APACHE_LOG_DIR}/php_access_http.log combined </VirtualHost>
Explication des éléments ci-dessus :
Dans l'exemple ci-dessus, je suppose que trois services backend sont exécutés sur localhost sur les ports 8080, 8081 et 8082. Assurez-vous que ces services sont en cours d'exécution.
Sinon, vous pouvez configurer des serveurs backend avec les ports appropriés ou utiliser des conteneurs Docker pour simuler plusieurs services.
Si vous souhaitez équilibrer la charge via HTTPS, ajoutez également l'hôte virtuel SSL (/etc/apache2/sites-available/php-le-ssl.conf) pour équilibrer la charge sur les serveurs backend HTTPS :
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName php.info DocumentRoot /var/www/meu_projeto # Configuração do Balanceador de Carga <Proxy "balancer://meucluster"> BalancerMember http://localhost:8080 BalancerMember http://localhost:8081 BalancerMember http://localhost:8082 ProxySet lbmethod=byrequests </Proxy> ProxyPreserveHost On ProxyPass / balancer://meucluster/ ProxyPassReverse / balancer://meucluster/ SSLEngine on SSLCertificateFile /etc/letsencrypt/live/php.info/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/php.info/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf ErrorLog ${APACHE_LOG_DIR}/php_error_https.log CustomLog ${APACHE_LOG_DIR}/php_access_https.log combined </VirtualHost> </IfModule>
Définir les poids du serveur
Vous pouvez définir différentes pondérations pour les serveurs, ce qui signifie que certains serveurs reçoivent plus de trafic que d'autres. Exemple :
BalancerMember http://localhost:8080 loadfactor=1 BalancerMember http://localhost:8081 loadfactor=2 BalancerMember http://localhost:8082 loadfactor=1
Dans ce cas, le serveur localhost:8081 recevra deux fois plus de requêtes que les autres.
Définir les délais d'attente et les tentatives d'échec
Vous pouvez définir des délais d'attente et des tentatives pour détecter les pannes sur les serveurs backend :
<Proxy "balancer://mycluster"> BalancerMember http://localhost:8080 retry=5 timeout=10 BalancerMember http://localhost:8081 retry=5 timeout=10 BalancerMember http://localhost:8082 retry=5 timeout=10 ProxySet lbmethod=byrequests </Proxy>
Surveiller et gérer l'équilibreur de charge
Pour surveiller l'état de l'équilibreur de charge et gérer dynamiquement les membres actifs/inactifs, lancez l'interface Balancer Manager :
<Location "/balancer-manager"> SetHandler balancer-manager Require host localhost </Location>
Vous pouvez désormais accéder à http://php.info/balancer-manager pour consulter l'état de santé de l'équilibreur de charge et ajuster les paramètres en temps réel.
Après avoir apporté les modifications de configuration, redémarrez Apache pour que les modifications prennent effet :
sudo systemctl restart apache2
Désormais, lorsque vous accédez à http://php.info, Apache répartira les requêtes entre les serveurs backend définis.
Vous pouvez configurer Apache pour vérifier la santé des serveurs backend et les supprimer automatiquement du pool s'ils sont en panne. Pour ce faire, vous pouvez utiliser le module mod_proxy_hcheck.
Tout d'abord, activez le module :
sudo a2enmod proxy_hcheck sudo systemctl restart apache2
Ensuite, ajoutez la configuration suivante à votre
<Proxy "balancer://meucluster"> BalancerMember http://localhost:8080 hcheck=on hcmethod=HEAD BalancerMember http://localhost:8081 hcheck=on hcmethod=HEAD BalancerMember http://localhost:8082 hcheck=on hcmethod=HEAD ProxySet lbmethod=byrequests </Proxy>
Apache vérifiera désormais automatiquement les serveurs backend et les supprimera du pool en cas de panne.
Avec Apache configuré comme équilibreur de charge, vous pouvez répartir le trafic sur plusieurs serveurs backend, garantissant ainsi l'évolutivité et la redondance. L'utilisation de SSL et de contrôles de santé supplémentaires permet de maintenir l'environnement sécurisé et robuste.
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!