準備

ストレステストを実行する前に、以下の実施を推奨ます。

  • short-live コネクションを使用して、SLB インスタンスの転送パフォーマンスをテストします。
  • 持続的な接続を有効にして、SLB インスタンスのスループットをテストします。
  • テストツールには、5 秒などの短いタイムアウト値を設定します。
  • バックエンドサーバーで静的な Web ページを構築します。
次のリスナー設定も推奨します。
  • セッション維持を有効化しません。
  • ヘルスチェック機能を無効にします。
  • 少なくとも 5 つのクライアントを使用します。

Alibaba Cloud PTS ツール

Alibaba Cloud PTS をテストツールとして使用することを推奨します。 SLB は複数のバックエンドサーバーがテストされるときに一貫性のないコンテンツ長を返し、Apache ab はリクエストが成功したかどうかを判断するためにコンテンツ長を使用するため、Apache Bench (ab) は推奨しません。 ストレステストの結果を正確に出すことができません。

Alibaba Cloud PTS を使用したストレステストの例

この例では、SLB インスタンスが作成され、バックエンドサーバーとして 2 つの ECS インスタンスと共に追加されています。 さらに、TCP リスナーと HTTP リスナーが作成され、バックエンドポートが 80 に設定されています。 ECS インスタンスは、シングルコア CPU、512 MB メモリ、および CentOS 6.3 (64 ビット) で構成されています。 ストレステストを実行するには、次のコマンドを実行します。

  1. Web サービスを提供するために Apache Web Server をインストールします。
    yum install -y httpd
  2. デフォルトのホームページ index.html を初期化します。
    echo "testvm" > /var/www/html/index.html
  3. HTTP サービスを開始します。
    service httpd start
  4. ローカルポート 80 にアクセスして、Web サービスが利用可能であることを確認してください。
    curl localhost
  5. PTS でテストスクリプトを作成してストレステストを開始します。

ストレステスト中にレイヤー 7 リスナーのパフォーマンスが低下するのはなぜですか。

レイヤー 4 Server Load Balancer (SLB) は、LVS (Linux Virtual Server) と Keepalived を使用してロードバランシングサービスを実現しますが、レイヤー 7 SLB は Tengine を使用します。 レイヤー 4 リスナーでは、リクエストは LVS を通過した後にバックエンドサーバーに直接送信されます。 ただし、レイヤー 7 リスナーでは、リクエストはバックエンドサーバーに送信される前に Tengine に送信されます。 この追加のステップのため、レイヤー 7 リスナーのパフォーマンスはレイヤー 4 リスナーと比較すると不十分です。

ストレステスト中にレイヤー 7 リスナーのパフォーマンスが低下することがあります。 2 つの ECS インスタンスを持つレイヤー 7 リスナーは、1 つの ECS インスタンスを持つレイヤー 4 リスナーよりもかなり劣っています。 プロセスに関する上記の理由を除いて、次の状況でもストレステスト中にレイヤー 7 リスナーのパフォーマンスが低下する可能性があります。

  • クライアントポートの不足

    ストレステストの間、クライアントポート数が不足すると接続が失敗します。 具体的には、TCP 接続のタイムスタンプ属性がデフォルトで SLB によって消去されます。 その結果、Linux プロトコルスタックの tw_reuse (time_wait 状態のポートの再利用) は機能せず、time_wait 状態の接続が累積します。

    解決策:FIN パケットを使用する代わりに、クライアントで持続的な接続を有効にし、RST (ソケットに SO_LINGER 属性を設定) を使用して接続を閉じることを推奨しあす。

  • バックエンドサーバーの受け入れキューがいっぱいの状態

    バックエンドサーバーの受け入れキューがいっぱいの場合、バックエンドサーバーは syn_ack パケットで応答せず、クライアントはタイムアウトします。

    解決方法:sysctl -w net.core.somaxconn = 1024 コマンドを実行して、net.core.somaxconn の値を変更して、バックエンドサーバーでアプリケーションを再起動します。 net.core.somaxconn のデフォルト値は 128 です。

  • バックエンドサーバーへの過剰な接続

    レイヤー 7 SLB インスタンスを使用すると、ネットワークアーキテクチャの設計上、接続が Tengine を通過した後に持続的接続が short-lived コネクションに変更されます。 その結果、バックエンドサーバに送信される接続が多すぎになり、ストレステスト中のレイヤー 7 SLB インスタンスのパフォーマンスが低下します。

  • バックエンドサーバーの依存関係による制限

    リクエストが送信された後もバックエンドサーバーが正常に動作するが、それでもシステムのパフォーマンスが低い場合は、バックエンドサーバーの依存関係(データベースからの不適切なシステムサポートなど)が原因である可能性があります。

  • バックエンドサーバーの異常

    ヘルスチェックの結果バックエンドサーバーの異常を宣言された場合、またはサーバーのヘルスステータスが不安定な場合、ストレステスト中にレイヤー7 SLB インスタンスのパフォーマンスの低下の原因になる場合があります。