Maison >développement back-end >tutoriel php >Hôte virtuel Apache : équilibreur de charge

Hôte virtuel Apache : équilibreur de charge

Susan Sarandon
Susan Sarandonoriginal
2024-10-11 10:10:30739parcourir

L'

Apache Virtual Host: Load Balancer

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 :

Activer les modules requis

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

Configurer l'hôte virtuel avec l'équilibrage de charge

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 :

  • BalancerMember : définit les serveurs backend. Dans ce cas, nous configurons trois serveurs en écoute sur les ports 8080, 8081 et 8082. Vous pouvez remplacer ces valeurs par vos serveurs réels.
  • lbmethod=byrequests : Définit la méthode d'équilibrage. byrequests répartit les requêtes de manière égale entre les serveurs. D'autres méthodes incluent :
    • bytraffic : distribue en fonction de la quantité de trafic.
    • bybusyness : distribue en fonction du nombre de connexions actives.
    • battement de coeur : utilise une approche avancée de surveillance de la santé.

Ajouter des serveurs back-end

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.

Activer le module SSL pour HTTPS

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>

Options de configuration avancées

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.

Redémarrez Apache

Après avoir apporté les modifications de configuration, redémarrez Apache pour que les modifications prennent effet :

sudo systemctl restart apache2

Tester l'équilibrage de charge

Désormais, lorsque vous accédez à http://php.info, Apache répartira les requêtes entre les serveurs backend définis.

Mettre en œuvre des contrôles de santé (facultatif)

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 bloquer :

<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.

Conclusion

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!

Déclaration:
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