Application Load Balancer (ALB) のサーバーグループは、スロースタートモードをサポートしています。 ALBインスタンスのスロースタートモードを有効にすると、ALBインスタンスはスケールアウトされたバックエンドサーバーに転送されるリクエストの数を徐々に増やし、リソースの準備、キャッシュ、プリフェッチなどのシナリオでのトラフィックの急増を防ぎます。
シナリオ例
トラフィック負荷が高いシナリオでは、バックエンドサーバーは手動または自動でスケールアウトされます。 リクエストは、重みに基づいて正常なバックエンドサーバーに配信されます。 バックエンドサーバーが過負荷になると、バックエンドサーバーのCPU使用率が100% に達するか、メモリが使い果たされます。 その結果、バックエンドサーバーにアクセスできなくなる可能性があります。
ALBサーバーグループはスロースタートモードをサポートしています。 スロースタートモードを有効にすると、トラフィックの急増を防ぐために、ALBはスケールアウトされたバックエンドサーバーに配信されるリクエストを徐々に増やします。
以下の図は一例です。 企業が中国 (杭州) リージョンにインターネット向けALBインスタンスをデプロイしました。 ALBインスタンスは、HTTPリスナーおよびECS01という名前のバックエンドサーバーに関連付けられています。 ALBインスタンスはECS01上のサービスにリクエストを転送します。 会社はECS02という名前のバックエンドサーバーを追加し、スロースタートモードを有効にして要求をECS02に徐々に転送したいと考えています。 遅い開始モードはECS02のトラフィックのスパイクを防ぐことができます。
使用上の注意
標準およびWAF対応のALBインスタンスのみがスロースタートモードをサポートしています。 ベーシックALBインスタンスはスロースタートモードをサポートしていません。
このパラメーターは、Function Computeタイプのサーバーグループでは使用できません。
スロースタートモードは、スケジューリングアルゴリズムを加重ラウンドロビンに設定した場合にのみ、サーバーグループでサポートされます。
スロースタートモードを有効にすると、正常なバックエンドサーバーは自動的にスロースタートモードになりません。
空のサーバーグループに対してスロースタートモードを有効にした場合:
サーバーグループに追加された最初のバックエンドサーバーは、スロースタートモードになりません。
新しいバックエンドサーバーは、少なくとも1つの正常なバックエンドサーバーがスロースタートモードにある場合にのみスロースタートモードに入ることができます。
スロースタート期間が終了する前に削除されたバックエンドサーバーは、自動的にスロースタートモードを終了します。 バックエンドサーバーをサーバーグループに再度追加すると、バックエンドサーバーがヘルスチェックに合格した場合にのみ、バックエンドサーバーはスロースタートモードに入ることができます。
スロースタート期間が終了する前にバックエンドサーバーが異常であると宣言された場合、バックエンドサーバーはスロースタートモードになります。 バックエンドサーバーがヘルスチェックに合格すると、バックエンドサーバーは再びスロースタートモードに入ります。
スロースタートモードとヘルスチェックを有効にすると、正常なバックエンドサーバーのみがスロースタートモードになります。 ヘルスチェックを無効にすると、すべてのバックエンドサーバーはすぐにスロースタートモードになります。
前提条件
標準のALBインスタンスが作成され、そのALBインスタンスのサーバーグループが作成されます。 詳細については、「ALBインスタンスの作成」および「サーバーグループの作成と管理」をご参照ください。
ALBインスタンスのリスナーが作成され、ALBインスタンスのサーバーグループに関連付けられます。 詳細については、「HTTPリスナーの追加」をご参照ください。
ALBインスタンスのアクセスログが作成されます。 詳細は、「アクセスログ」をご参照ください。
次の例では、2つのECS (Elastic Compute Service) インスタンスが使用されています。
ECS01とECS02はバックエンドサーバーとして機能します。 NGINXアプリケーションは、ECS01およびECS02にデプロイされます。 インスタンスの作成方法については、「ウィザードを使用したインスタンスの作成」をご参照ください。
次のコマンドは、ECS01およびECS02にアプリケーションをデプロイする方法を示しています。
ECS01がサーバーグループに追加され、クライアントはECS01上のサービスにアクセスできます。 詳細については、「ALBインスタンスを使用してIPv4サービスを提供する」および「ALBを使用してIPv6サービスの負荷を分散する」をご参照ください。
ステップ1: スロースタートモードを有効にする
この例では、既存のサーバーグループの設定がスロースタートモードを有効にするように変更されています。 サーバーグループがない場合は、サーバーグループを作成してスロースタートモードを有効にします。
ALBコンソールにログインします。
上部のナビゲーションバーで、サーバーグループがデプロイされているリージョンを選択します。 この例では、中国 (杭州) が選択されています。
左側のナビゲーションウィンドウで、
を選択します。[サーバーグループ] ページで、管理するサーバーグループのIDをクリックします。
[詳細] タブで、[基本情報] セクションの [基本情報の変更] をクリックします。
[基本情報の変更] ダイアログボックスで、[詳細設定] をクリックし、[スロースタート] をオンにします。
スロースタート時間を30秒に設定し、[保存] をクリックします。
説明スロースタート時間を30秒に設定した場合、ALBは30秒以内にスケールアウトされたバックエンドサーバーに転送されるリクエストの数を徐々に増やします。
ステップ2: wrkツールを使用してクライアント要求をシミュレートする
この例では、64ビットAlibaba Cloud Linux 3.2104オペレーティングシステムを実行するクライアントが使用されています。 インストール方法は、オペレーティングシステムによって異なります。 詳細については、オペレーティングシステムのマニュアルを参照してください。
クライアントにログインし、コマンドラインインターフェイス (CLI) を開きます。 次のコマンドを実行してwrkをインストールします。
yum -y install git make gcc git clone https://github.com/wg/wrk.git yum install unzip cd wrk make
次のコマンドを実行して、ALBインスタンスのバックエンドサーバーでストレステストを実行します。
./wrk -c 1000 -d 6000s -t 3 -H "Connection:Close" http://<ALB domain name>
次のパラメータに注意してください。
-c: 接続を表し、各スレッドによって維持される同時接続の数を指定します。
-d: 期間を表し、テスト期間を指定します。
-t: スレッドを表し、同時クライアントのシミュレーションに使用するスレッドの数を指定します。
-H: ヘッダーの略で、リクエストに追加するHTTPヘッダーを指定します。 たとえば、-H「Connection:Close」は、非永続的な接続ヘッダーが各要求に追加されることを指定します。
手順3: バックエンドサーバーにECS02を追加
ストレステスト期間が終了する前に、バックエンドサーバーをサーバーグループに追加します。
ALBコンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。
左側のナビゲーションウィンドウで、
を選択します。[サーバーグループ] ページで、管理するサーバーグループを見つけ、[操作] 列の [バックエンドサーバーの変更] をクリックします。
[バックエンドサーバー] タブで、[バックエンドサーバーの追加] をクリックします。
[バックエンドサーバーの追加] パネルで、[ECS02] を選択し、[次へ] をクリックします。
[ポート /重み] ステップで、ポート80をECS02に割り当て、デフォルトのポート重み100を使用して、[OK] をクリックします。
ステップ4: Verify the result
ALBコンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、管理するNLBインスタンスのIDをクリックします。
[アクセスログ] タブをクリックし、[基本情報] セクションの [Simple Log Service] の右側にあるリンクをクリックして、[Simple Log Service] コンソールに移動します。 コンソールで、次の図に示すように、ECS02のネットワークトラフィックのステータスを表示します。
次の図は、リクエストがスロースタート期間内にECS02に徐々に転送されることを示しています。
いいえ
説明
①
次のコマンドを実行して、ALBインスタンスがECS02に転送するネットワークトラフィックの量を照会します。
alb-80ri6****** and upstream_addr : "10.0.2.51:80"
前述のコマンドでは:
alb-80ri6 ******
は、ALBインスタンスのIDを指定します。upstream_addr
は、バックエンドサーバーのIPアドレスとポートを指定します。 この例では、ECS02のプライベートIPアドレスとポートが使用されます。
②
クエリする期間を選択します。 この例では、
1分
が選択されています。③
[検索と分析] をクリックしてECS02のネットワークトラフィックを照会します。
関連ドキュメント
サーバーグループの作成時にスロースタートモードを有効にする方法の詳細については、「サーバーグループの作成」をご参照ください。
サービスのデプロイを正常に解除するには、接続ドレインを有効にします。 詳細については、「接続ドレインを使用してグレースフルアンデプロイメントを実装する」をご参照ください。
アクセスログのクエリと分析方法の詳細については、「ログのクエリと分析」をご参照ください。