機械翻訳について

HAProxyでのKeepalivedを使用したロード・バランシングの拡張

Keepalivedは、バックアップ・ルーターにフェイルオーバー・サービスを提供できますが、同時にHAProxyを使用してロード・バランシングを行い、分散サーバー間の高可用性を実現します。 この方法の利点は、パケット・レイヤーとアプリケーション・レイヤーが分離されていることです。つまり、ロード・バランシング・サーバーに対してKeepalivedによって実行されるヘルス・チェックは、HAProxyが管理しているインバウンドHTTPまたはTCPトラフィックによって影響を受けません。 また、VRRPを使用して実現されるフェイルオーバー・ルーティングは、クライアントのレスポンスがタイムアウトするのを待たずに、自動的にアクティブ化できます。 VRRPの有用性の詳細は、「VRRPでのKeepalivedの使用」を参照してください。

この方法の使用が現実的であるのは、パブリック対応のHAProxyロード・バランサがオフラインになった場合、Keepalivedによってこのイベントが自動的に検出され、別のHAProxyサーバーに動的に切り替えられるという点です。 Keepalivedプライマリ・ルーターがオフラインになると、設定したVRRP設定により、トラフィックは自動的にKeepalivedバックアップ・ルータで処理されます。

設定におけるHAProxyの役割は、インバウンド・ロード・バランシングおよびセッション永続性をバックエンド・サーバーに提供することです。Keepalivedは、HAProxyのステータスの監視と代替ルーティング・メカニズムの提供のみを実行します。 両方のツールを組み合せて使用すると、可用性が高く、自己回復性を備えたロード・バランシング・ソリューションが得られます。

次の手順は「NATモードでのロード・バランシングの設定」と似ていますが、この場合、HAProxyはKeepalivedプライマリ・サーバーとKeepalivedバックアップ・サーバーの両方にインストールされます。

この手順では、外部仮想IPアドレスは192.168.1.0/24外部ネットワーク上の192.168.1.1です。 このIPアドレスは、NATを介して、IPアドレスが192.168.1.10のKeepalivedプライマリ・サーバーと外部IPアドレスが192.168.1.11のKeepalivedバックアップ・サーバーの間に動的に割り当てられます。

内部ネットワークは、10.0.0.0/24サブネットでホストされます。 IPアドレスの場合、websvr1には10.0.0.71websvr2には10.0.0.72があります。

図3-2 高可用性ロード・バランシングのためのKeepalivedおよびHAProxy構成


この図は、HAProxyを実行しているKeepalivedプライマリ・サーバーのネットワーク・アドレスが192.168.1.10、10.0.0.10および10.0.0.100 (仮想)であることを示しています。 HAProxyを実行するKeepalivedバックアップ・サーバーも、ネットワーク・アドレス192.168.1.11および10.0.0.11を持ち、現在のプライマリ・ルーターが使用できなくなった場合は新しいプライマリ・ルーターになります。 IPアドレスの場合、websvr1には10.0.0.71、websvr2には10.0.0.72があります。
  1. プライマリ・サーバーでKeepalivedを構成します。

    次の例に、プライマリ・サーバーの/etc/keepalived/keepalived.confファイルの構成を示します

    global_defs {
     
      notification_email {
        root@example.com
      }
     
      notification_email_from srv1@example.com
      smtp_server localhost
      smtp_connect_timeout 30
    }
     
    vrrp_sync_group vg1 {
      group {
        external
        internal
      }
    }
     
    vrrp_script chk_haproxy {
      script "killall -0 haproxy" # check the haproxy process
      interval 2 # every 2 seconds
      weight 2 # add 2 points if OK
    }
     
    vrrp_instance external {
      state MASTER
      interface enp0s8
      virtual_router_id 91
      priority 200
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1215
      }
      virtual_ipaddress {
        192.168.1.1/24
      }
      track_script {
        chk_haproxy
      }
    }
     
    vrrp_instance internal {
      state MASTER
      interface enp0s9
      virtual_router_id 92
      priority 200
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1215
      }
      virtual_ipaddress {
        10.0.0.100/24
      }
    }     
  2. 構成ファイルが有効であることを確認します。
    sudo keepalived -t
  3. バックアップ・サーバーでKeepalivedを構成します。

    バックアップのKeepalivedサーバーの構成は同一ですが、state値はBACKUPに設定する必要があります。 このシナリオでは、Keepalivedはトラフィックのルーティングにのみ使用され、ロード・バランシングを実行しないため、virtual_serverを設定する必要はありません。 バックアップ・サーバーの構成例を次に示します:

    global_defs {
     
      notification_email {
        root@example.com
      }
     
      notification_email_from srv1@example.com
      smtp_server localhost
      smtp_connect_timeout 30
    }
     
    vrrp_sync_group vg1 {
      group {
        external
        internal
      }
    }
     
    vrrp_script chk_haproxy {
      script "killall -0 haproxy" # check the haproxy process
      interval 2 # every 2 seconds
      weight 2 # add 2 points if OK
    }
     
    vrrp_instance external {
      state MASTER
      interface enp0s8
      virtual_router_id 91
      priority 200
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1215
      }
      virtual_ipaddress {
        192.168.1.1/24
      }
      track_script {
        chk_haproxy
      }
    }
     
    vrrp_instance internal {
      state BACKUP
      interface enp0s9
      virtual_router_id 92
      priority 200
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1215
      }
      virtual_ipaddress {
        10.0.0.100/24
      }
    }     
  4. 構成ファイルが有効であることを確認します。
    sudo keepalived -t
  5. 各サーバーでKeepalivedのファイアウォール・ルールを構成します。

    Keepalivedの構成および適切なファイアウォール・ルールの設定の詳細は、Keepalivedを使用したロード・バランシングの設定を参照してください。

  6. 各サーバーでHAProxyを構成します。

    HAProxy設定は、/etc/haproxy/haproxy.cfgファイルに構成されます。 Keepalivedは必要に応じて自動的に構成間で動的にルーティングされるため、どちらのHAProxyインストールでも設定は同じです。

    global
      daemon
      log 127.0.0.1 local0 debug
      maxconn 4000
      nbthread 1
     
    defaults
      mode          http
      retries       3
      timeout connect 5s
      timeout client 25s
      timeout server 25s
      timeout queue 10s
    
    listen http-incoming
      mode http
      bind internal-server-ip:80
      option http-server-close
      option forwardfor
      default_backend app
    
    backend app
      balance roundrobin
      option httpchk 
      http-check send meth HEAD ver HTTP/1.1 hdr Host localhost
      option httpclose
      option forwardfor
      server websrv1 192.168.1.71:80 weight 1 maxconn 512 check
      server websrv2 192.168.1.72:80 weight 1 maxconn 512 check

    構成例では、option http-server-closeおよびoption httpcloseオプションを使用してアイドル接続を停止します。 この構成は、ラウンド・ロビン・ロード・バランシング戦略を示しています。 オプションを指定しない場合、HAProxyはデフォルトでoption http-keep-aliveオプションを使用します。これにより、関連付けられたすべてのリクエストおよびレスポンス・ジャーニが処理されるまで、新しい接続が開いたままになります。

    HAProxyの構成および適切なファイアウォール・ルールの設定の詳細は、HAProxyを使用したロード・バランシングの設定を参照してください。