機械翻訳について

HAProxyを使用したラウンド・ロビン・ロード・バランシングの構成

次の例では、HAProxyを使用して、受信リクエストを2つのバックエンドWebサーバー間で分散し、さらにバックエンド・サーバーでサービス停止も処理するフロントエンド・サーバーを実装します。

次の図は、外部公開ネットワーク(10.0.0.0/24)および内部ネットワーク(192.168.1.0/24)に接続されたHAProxyサーバー(10.0.0.10)を示しています。 内部ネットワークでは、2つのWebサーバーwebsrv1 (192.168.1.71)およびwebsrv2 (192.168.1.72)にアクセス可能です。 IPアドレス10.0.0.10はプライベート・アドレス範囲10.0.0.0/24内にあるため、インターネット上でルーティングできません。 アップストリーム・ネットワーク・アドレス変換(NAT)ゲートウェイまたはプロキシ・サーバーが、インターネットとの間のアクセスを提供します。

図2-1 ロード・バランシングのためのHAProxy構成の例


この図は、外部公開ネットワーク(10.0.0.0/24)および内部ネットワーク(192.168.1.0/24)に接続されたHAProxyサーバー(10.0.0.10)を示しています。 内部ネットワークでは、2つのWebサーバーwebsrv1 (192.168.1.71)およびwebsrv2 (192.168.1.72)にアクセス可能です。 IPアドレス10.0.0.10はプライベート・アドレス範囲10.0.0.0/24内にあり、インターネット上でルーティングできません。 アップストリームNATゲートウェイまたはプロキシ・サーバーが、インターネットとの間のアクセスを提供します。
  1. HAProxyサーバーの構成を更新します。

    次に、サーバー上の/etc/haproxy/haproxy.cfgの構成例を示します。

    global
        daemon
        log 127.0.0.1 local0 debug
        maxconn 50000
        nbthread 1
    
    defaults
        mode http
        timeout connect 5s
        timeout client 25s
        timeout server 25s
        timeout queue 10s
    
    # Handle Incoming HTTP Connection Requests
    listen  http-incoming
        mode http
        bind 10.0.0.10:80
    # Use each server in turn, according to its weight value
        balance roundrobin
    # Verify that service is available
        option httpchk 
        http-check send meth HEAD ver HTTP/1.1 hdr Host www
    # Insert X-Forwarded-For header
        option forwardfor
    # Define the back-end servers, which can handle up to 512 concurrent connections each
        server websrv1 192.168.1.71:80 maxconn 512 check
        server websrv2 192.168.1.72:80 maxconn 512 check

    この構成では、HTTPトラフィックが2つのバックエンドWebサーバー(websrv1およびwebsrv2)の間で分散され、これらのサーバーのファイアウォールは、ポート80で受信TCPリクエストを受け入れるように構成されています。 トラフィックはサーバー間で均等に分散され、各サーバーは最大512個の同時接続を処理できます。 ヘルス・チェックも構成され、これにより、各バックエンド・サーバーのWebルートに対するリクエストでHTTPヘッダーに対するリクエストが実行されます。

  2. HAProxy systemdサービスをリロードします。
    sudo systemctl reload haproxy
  3. ラウンドロビン・ロード・バランシングが機能していることを確認します。

    webサーバーがそれぞれWebページを提供するように構成されている場合、curlを使用して接続をテストします。 シェルでwhileループを使用して、一定期間テストを繰り返すことができます。 ループから取り消すには、CtrlキーとCキーの組合せを使用します:

    while true; do curl http://10.0.0.10; sleep 1; done

    次の出力は、HAProxyがサーバー間のトラフィックのバランスをとる方法と、websrv1で停止するhttpdサービスをどのように処理するかを示しています:

    This is HTTP server websrv1 (192.168.1.71).
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv1 (192.168.1.71).
    This is HTTP server websrv2 (192.168.1.72).
    ...
    This is HTTP server websrv2 (192.168.1.72).
    <html><body><h1>503 Service Unavailable</h1>
    No server is available to handle this request.
    </body></html>
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv2 (192.168.1.72).
    ...
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv1 (192.168.1.71).
    This is HTTP server websrv2 (192.168.1.72).
    This is HTTP server websrv1 (192.168.1.71).
    ...

    この例では、websrv1httpdサービスが再起動され、websrv2に加えてこのサーバーも再び使用し始めたことが、HAProxyによって検出されました。

    ノート:

    これらの例では、webサーバーは、Webサーバー名とIPアドレスを説明するページを提供するように構成されています。 実環境構成での出力は異なる可能性があります。

HAProxyのロード・バランシング機能をKeepalivedの高可用性機能と組み合せることにより、プライマリ・ロード・バランサが失敗した場合にサービスを継続できるようにバックアップ・ロード・バランサを構成できます。 この構成を拡張する方法の詳細は、HAProxyでのKeepalivedを使用したロード・バランシングの拡張を参照してください。