すべてのプロダクト
Search
ドキュメントセンター

:スロースタートを使用してサービスのグレースフルデプロイメントを実装する

最終更新日:Sep 20, 2024

Application Load Balancer (ALB) のサーバーグループは、スロースタートモードをサポートしています。 ALBインスタンスのスロースタートモードを有効にすると、ALBインスタンスはスケールアウトされたバックエンドサーバーに転送されるリクエストの数を徐々に増やし、リソースの準備、キャッシュ、プリフェッチなどのシナリオでのトラフィックの急増を防ぎます。

シナリオ例

トラフィック負荷が高いシナリオでは、バックエンドサーバーは手動または自動でスケールアウトされます。 リクエストは、重みに基づいて正常なバックエンドサーバーに配信されます。 バックエンドサーバーが過負荷になると、バックエンドサーバーのCPU使用率が100% に達するか、メモリが使い果たされます。 その結果、バックエンドサーバーにアクセスできなくなる可能性があります。

ALBサーバーグループはスロースタートモードをサポートしています。 スロースタートモードを有効にすると、トラフィックの急増を防ぐために、ALBはスケールアウトされたバックエンドサーバーに配信されるリクエストを徐々に増やします。

以下の図は一例です。 企業が中国 (杭州) リージョンにインターネット向けALBインスタンスをデプロイしました。 ALBインスタンスは、HTTPリスナーおよびECS01という名前のバックエンドサーバーに関連付けられています。 ALBインスタンスはECS01上のサービスにリクエストを転送します。 会社はECS02という名前のバックエンドサーバーを追加し、スロースタートモードを有効にして要求をECS02に徐々に転送したいと考えています。 遅い開始モードはECS02のトラフィックのスパイクを防ぐことができます。

image

使用上の注意

  • 標準および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にアプリケーションをデプロイするためのコマンド

    yum install -y nginx
    systemctl start nginx.service
    cd /usr/share/nginx/html/
    echo "Hello World !  This is ECS01." > index.html

    ECS02にアプリケーションをデプロイするためのコマンド

    yum install -y nginx
    systemctl start nginx.service
    cd /usr/share/nginx/html/
    echo "Hello World !  This is ECS02." > index.html
  • ECS01がサーバーグループに追加され、クライアントはECS01上のサービスにアクセスできます。 詳細については、「ALBインスタンスを使用してIPv4サービスを提供する」および「ALBを使用してIPv6サービスの負荷を分散する」をご参照ください。

    クリックしてサンプルALBインスタンス設定を表示

    パラメーター

    設定

    ネットワークタイプ

    インターネットに接続

    ドメイン名: alb-1o44v ****** .cn-hangzhou.alb.aliyuncs.com

    リスナープロトコル

    HTTP (ポート80)

    バックエンドサーバー

    • ECS01

      • IPアドレス: 10.0.2.50

      • ポート: 80

      • 重量: 100

    • ECS02

      • IPアドレス: 10.0.2.51

      • ポート: 80

      • 重量: 100

ステップ1: スロースタートモードを有効にする

この例では、既存のサーバーグループの設定がスロースタートモードを有効にするように変更されています。 サーバーグループがない場合は、サーバーグループを作成してスロースタートモードを有効にします。

  1. ALBコンソールにログインします。

  2. 上部のナビゲーションバーで、サーバーグループがデプロイされているリージョンを選択します。 この例では、中国 (杭州) が選択されています。

  3. 左側のナビゲーションウィンドウで、ALB > サーバーグループを選択します。

  4. [サーバーグループ] ページで、管理するサーバーグループのIDをクリックします。

  5. [詳細] タブで、[基本情報] セクションの [基本情報の変更] をクリックします。

  6. [基本情報の変更] ダイアログボックスで、[詳細設定] をクリックし、[スロースタート] をオンにします。

  7. スロースタート時間30秒に設定し、[保存] をクリックします。

    説明

    スロースタート時間を30秒に設定した場合、ALBは30秒以内にスケールアウトされたバックエンドサーバーに転送されるリクエストの数を徐々に増やします。

ステップ2: wrkツールを使用してクライアント要求をシミュレートする

この例では、64ビットAlibaba Cloud Linux 3.2104オペレーティングシステムを実行するクライアントが使用されています。 インストール方法は、オペレーティングシステムによって異なります。 詳細については、オペレーティングシステムのマニュアルを参照してください。

  1. クライアントにログインし、コマンドラインインターフェイス (CLI) を開きます。 次のコマンドを実行してwrkをインストールします。

    yum -y install git make gcc
    git clone https://github.com/wg/wrk.git
    yum install unzip
    cd wrk
    make
  2. 次のコマンドを実行して、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を追加

重要

ストレステスト期間が終了する前に、バックエンドサーバーをサーバーグループに追加します。

  1. ALBコンソールにログインします。

  2. 上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。

  3. 左側のナビゲーションウィンドウで、ALB > サーバーグループを選択します。

  4. [サーバーグループ] ページで、管理するサーバーグループを見つけ、[操作] 列の [バックエンドサーバーの変更] をクリックします。

  5. [バックエンドサーバー] タブで、[バックエンドサーバーの追加] をクリックします。

  6. [バックエンドサーバーの追加] パネルで、[ECS02] を選択し、[次へ] をクリックします。

  7. [ポート /重み] ステップで、ポート80をECS02に割り当て、デフォルトのポート重み100を使用して、[OK] をクリックします。

ステップ4: Verify the result

  1. ALBコンソールにログインします。

  2. 上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。

  3. [インスタンス] ページで、管理するNLBインスタンスのIDをクリックします。

  4. [アクセスログ] タブをクリックし、[基本情報] セクションの [Simple Log Service] の右側にあるリンクをクリックして、[Simple Log Service] コンソールに移動します。 コンソールで、次の図に示すように、ECS02のネットワークトラフィックのステータスを表示します。

    次の図は、リクエストがスロースタート期間内にECS02に徐々に転送されることを示しています。

    测试结果-cn (2).png

    いいえ

    説明

    次のコマンドを実行して、ALBインスタンスがECS02に転送するネットワークトラフィックの量を照会します。

    alb-80ri6****** and upstream_addr : "10.0.2.51:80"

    前述のコマンドでは:

    • alb-80ri6 ****** は、ALBインスタンスのIDを指定します。

    • upstream_addrは、バックエンドサーバーのIPアドレスとポートを指定します。 この例では、ECS02のプライベートIPアドレスとポートが使用されます。

    クエリする期間を選択します。 この例では、1分が選択されています。

    [検索と分析] をクリックしてECS02のネットワークトラフィックを照会します。

関連ドキュメント