Layer の負荷分散 - AWS OpsWorks

Layer の負荷分散

AWS OpsWorks スタックには、2 つの負荷分散オプションとして Elastic Load BalancingHAProxy が用意されています。これらのオプションは一般的に、アプリケーションサーバー Layer のインスタンス間で負荷を分散するために使用します。このトピックでは、Layer に負荷分散を追加するときのオプションの選択に役立つように、各オプションの利点と制限事項について説明します。場合によって、両方のオプションの使用をお勧めします。

SSL ターミネーション

SSL ターミネーションは組み込み HAProxy Layer で処理されません。サーバーで行う必要があります。このアプローチの利点は、トラフィックがサーバーに到達するまで暗号化されることです。ただし、サーバーによる復号の処理が必要であり、それによりサーバーの負荷が増えます。また、アプリケーションサーバーに SSL 証明書を配置し、ユーザーからアクセスできるようにする必要があります。

Elastic Load Balancing では、SSL ターミネーションをロードバランサーで行うことができます。これにより、アプリケーションサーバーの負荷は減りますが、ロードバランサーとサーバーとの間のトラフィックは暗号化されません。Elastic Load Balancing では、SSL ターミネーションをサーバーで行うこともできますが、そのセットアップは若干複雑になります。

スケーリング

受信トラフィックが HAProxy ロードバランサーの容量を超える場合は、その容量を手動で増やす必要があります。

Elastic Load Balancing では、受信トラフィックを処理するようにスケーリングは自動的に行われます。最初にオンラインになったときに想定負荷を処理するための容量を十分に確保するには、Elastic Load Balancing ロードバランサーを事前ウォーミングします。

ロードバランサーの障害

HAProxy サーバーをホストしているインスタンスに障害が発生した場合、インスタンスを再起動できるようになるまで、サイト全体をオフラインにすることができます。

Elastic Load Balancing は HAProxy よりも高い耐障害性を備えています。たとえば、EC2 インスタンスを登録している各アベイラビリティーゾーンで負荷分散ノードがプロビジョニングされます。1 つのゾーンでサービスが中断された場合は、他のノードで受信トラフィックの処理が継続されます。詳細については、「Elastic Load Balancing の概念」を参照してください。

アイドルタイムアウト

指定したアイドルタイムアウト値よりも長い時間アイドル状態になった場合、両方のロードバランサーによって接続が終了されます。

  • HAProxy – アイドルタイムアウト値に上限はありません。

  • Elastic Load Balancing – デフォルトのアイドルタイムアウト値は 60 秒で、最大値は 3,600 秒(60 分)です。

Elastic Load Balancing のアイドル時間の制限は、ほとんどの目的に対して十分です。それより長いアイドルタイムアウトが必要な場合は、HAProxy を使用することをお勧めします。(例:

  • HTTP 接続を長時間開いたままにして、プッシュ通知を行う場合。

  • 管理インターフェイスを使用して、60 分を超える可能性のあるタスクを実行する場合。

URL ベースのマッピング

ロードバランサーで、リクエストの URL に基づいて、特定のサーバーに受信リクエストを転送することが必要な場合があります。たとえば、オンラインコマースアプリケーションをサポートする 10 台のアプリケーションサーバーのグループがあるとします。そのうちの 8 台のサーバーではカタログを処理し、2 台のサーバーでは支払いを処理します。リクエスト URL に基づいて、すべての支払い関連の HTTP リクエストを支払サーバーに割り振ります。この場合、"payment" または "checkout" を含むすべての URL を支払サーバーのいずれかに割り振ります。

HAProxy では、URL ベースのマッピングを使用して、指定した文字列を含む URL を特定のサーバーに割り振ることができます。AWS OpsWorks スタックで URL ベースのマッピングを使用するには、haproxy 組み込みクックブックの haproxy-default.erb テンプレートを上書きして、カスタム HAProxy 設定ファイルを作成する必要があります。詳細については、HAProxy 設定マニュアルと「カスタムテンプレートの使用」を参照してください。HTTPS リクエストに URL ベースのマッピングを使用することはできません。HTTPS リクエストは暗号化されているため、HAProxy にはリクエスト URL を調べる方法がありません。

Elastic Load Balancing では、URL マッピングが制限付きでサポートされています。詳細については、「Elastic Load Balancing のリスナー設定」を参照してください。

推奨事項: HAProxy でのみ満たせる要件がない限り、負荷分散には Elastic Load Balancing を使用することをお勧めします。そのような要件がある場合は、一連の HAProxy サーバーに受信トラフィックを割り振るフロントエンドロードバランサーとして Elastic Load Balancing を使用することで、これら 2 つを組み合わせることをお勧めします。目的:

  • スタックの各アベイラビリティーゾーンの HAProxy インスタンスを設定して、ゾーンのアプリケーションサーバーにリクエストが割り振られるようにします。

  • Elastic Load Balancing ロードバランサーに HAProxy インスタンスを割り当て、このロードバランサーから HAProxy ロードバランサーに受信リクエストが割り振られるようにします。

このアプローチでは、HAProxy の URL ベースのマッピングを使用して、さまざまなタイプのリクエストを適切なアプリケーションサーバーに割り振ることができます。ただし、HAProxy サーバーのいずれかがオフラインになっても、サイトのサービスは継続されます。Elastic Load Balancing ロードバランサーによって正常な HAProxy サーバーに受信トラフィックが自動的に割り振られるためです。フロントエンドロードバランサーとして Elastic Load Balancing を使用する必要があります。HAProxy サーバーによって他の HAProxy サーバーにリクエストを割り振ることはできません。