ホームページ >バックエンド開発 >PHPチュートリアル >Apache 仮想ホスト: ロード バランサー

Apache 仮想ホスト: ロード バランサー

Susan Sarandon
Susan Sarandonオリジナル
2024-10-11 10:10:30739ブラウズ

Apache Virtual Host: Load Balancer

負荷分散 は、リクエストを複数のバックエンド サーバーに分散し、システムのスケーラビリティと可用性を向上させるための優れた戦略です。 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>

上記の要素の説明:

  • BalancerMember: バックエンド サーバーを定義します。この場合、ポート 8080、8081、および 8082 でリッスンする 3 つのサーバーを構成しています。これらの値は実際のサーバーに置き換えることができます。
  • lbmethod=byrequests: バランシング方法を定義します。 byrequests はリクエストをサーバー間で均等に分散します。他の方法には次のようなものがあります。
    • bytraffic: トラフィック量に基づいて配信します。
    • bybusyness: アクティブな接続の数に基づいて分散します。
    • heartbeat: 高度なヘルスモニタリングアプローチを使用します。

バックエンドサーバーの追加

上記の例では、ローカルホストのポート 8080、8081、および 8082 で 3 つのバックエンド サービスが実行されていると仮定しています。これらのサービスが実行されていることを確認してください。

それ以外の場合は、バックエンド サーバーに正しいポートを設定するか、Docker コンテナを使用して複数のサービスをシミュレートできます。

HTTPS の SSL モジュールを有効にする

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 を再起動します

設定を変更した後、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。