レイヤーの負荷分散 - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

レイヤーの負荷分散

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは、通常どおり OpsWorks コンソール、API、CLI、および CloudFormation リソースを使用できます。その時点で廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行」を参照してください。

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

SSL ターミネーション

SSL ターミネーションは組み込み HAProxyLayer で処理されません。サーバーで SSL を終了させる必要があります。このアプローチの利点は、トラフィックがサーバーに到達するまで暗号化されることです。ただし、サーバーによる復号の処理が必要であり、それによりサーバーの負荷が増えます。また、アプリケーションサーバーに 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 Concepts」(Elastic Load Balancing のコンセプト) を参照してください。

アイドルタイムアウト

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

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

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

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

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

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

URL ベースのマッピング

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

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

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

[Recommendation:] (推奨事項:) HAProxy でしか処理できない要件がある場合を除き、負荷分散には Elastic Load Balancing for 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 サーバーにリクエストを分散させることはできないことに注意してください。