負荷分散 は、リクエストを複数のバックエンド サーバーに分散し、システムのスケーラビリティと可用性を向上させるための優れた戦略です。 Apache は、mod_proxy_balancer モジュールを使用して ロード バランサー として構成できます。
これは、Apache で 負荷分散 を実装するための完全なガイドです:
まず、Apache で必要なモジュールを有効にします。
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod proxy_balancer sudo a2enmod lbmethod_byrequests
Apache を再起動してモジュールをロードします:
sudo systemctl restart apache2
次に、仮想ホストの構成ファイルを編集して負荷分散ディレクティブを追加します。
設定ファイルを開きます:
sudo your_editor /etc/apache2/sites-available/php.conf
次のコード ブロックを追加して、複数のバックエンド サーバー間で 負荷分散 を構成します。
<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>
上記の要素の説明:
上記の例では、ローカルホストのポート 8080、8081、および 8082 で 3 つのバックエンド サービスが実行されていると仮定しています。これらのサービスが実行されていることを確認してください。
それ以外の場合は、バックエンド サーバーに正しいポートを設定するか、Docker コンテナを使用して複数のサービスをシミュレートできます。
HTTPS 経由で負荷分散する場合は、SSL 仮想ホスト (/etc/apache2/sites-available/php-le-ssl.conf) も追加して、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>
サーバーの重みを設定する
サーバーに異なる重みを設定できます。つまり、一部のサーバーが他のサーバーよりも多くのトラフィックを受信します。例:
BalancerMember http://localhost:8080 loadfactor=1 BalancerMember http://localhost:8081 loadfactor=2 BalancerMember http://localhost:8082 loadfactor=1
この場合、localhost:8081 のサーバーは他のサーバーの 2 倍のリクエストを受信します。
失敗のタイムアウトと再試行を設定する
バックエンドサーバーでの障害を検出するためにタイムアウトと再試行を設定できます:
<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>
ロードバランサーの監視と管理
ロード バランサーの状態を監視し、アクティブ/非アクティブなメンバーを動的に管理するには、バランサー マネージャー インターフェイスを起動します。
<Location "/balancer-manager"> SetHandler balancer-manager Require host localhost </Location>
http://php.info/balancer-manager にアクセスして、ロード バランサーの状態を表示し、リアルタイムで設定を調整できるようになりました。
設定を変更した後、Apache を再起動して変更を有効にします。
sudo systemctl restart apache2
ここで http://php.info にアクセスすると、Apache は定義されたバックエンド サーバー間でリクエストを分散します。
バックエンド サーバーの状態をチェックし、ダウンしている場合はプールから自動的に削除するように Apache を設定できます。これを行うには、mod_proxy_hcheck モジュールを使用できます。
まず、モジュールを有効にします:
sudo a2enmod proxy_hcheck sudo systemctl restart apache2
次に、次の設定を
<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 はバックエンド サーバーを自動的にチェックし、失敗した場合はプールから削除するようになりました。
Apache をロード バランサーとして構成すると、トラフィックを複数のバックエンド サーバーに分散して、スケーラビリティと冗長性を確保できます。 SSL と追加のヘルスチェックを使用すると、環境を安全かつ堅牢に保つことができます。
以上がApache 仮想ホスト: ロード バランサーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。