Classic Load Balancer (CLB) は、レイヤー4とレイヤー7での負荷分散をサポートしています。 このトピックでは、CLBインスタンスでストレステストを実行する方法について説明します。
ストレステスト方法
CLBインスタンスでストレステストを実行する場合、次の考慮事項に注意してください。
CLBインスタンスの転送能力をテストする場合は、短期間の接続を使用します。
通常、CLBストレステストは、セッションの持続性と負荷分散機能に加えて、CLBインスタンスの転送能力をベンチマークするために使用されます。 短期間の接続は、CLBインスタンスとそのバックエンドサーバーの両方の容量をベンチマークするのに適しています。 ストレステストで短期間の接続を使用する場合は、NLBインスタンスにクライアントに接続するのに十分なフロントエンドポートがあることを確認する必要があります。
CLBインスタンスのスループットをテストする場合は、永続接続を使用します。 永続接続は、帯域幅制限または特定のサービスのテストに適しています。
ストレステストツールのタイムアウト時間を5秒などの小さな値に設定します。 タイムアウト期間を大きな値に設定すると、テスト結果に表示される平均往復時間 (RTT) が増加することがあります。 その結果、CLBインスタンスが極端なストレス条件下にあるかどうかを判断することは困難である。 タイムアウト期間を小さな値に設定すると、テスト結果に示されているリクエスト成功率に基づいて、CLBインスタンスが負荷に耐えることができるかどうかを判断できます。
ストレステスト用にバックエンドサーバーで静的ページをホストします。 これにより、ストレステスト結果に対するアプリケーションロジックの影響を最小限に抑えることができます。
また、次のリスナー設定を使用することを推奨します。
CLBインスタンスがネットワークトラフィックを一部のバックエンドサーバーにのみ配信する場合は、セッション維持を無効にします。
バックエンドサーバーに送信されるリクエストの数を減らすために、ヘルスチェックを無効にすることを推奨します。
NLBインスタンスが最大5,000の同時接続をサポートしている場合は、少なくとも5つのEIPアドレス (EIP) をNLBインスタンスに関連付けます。
ストレステストツール
Apache abを使用してストレステストを実行しないことを推奨します。 同時実行性の高いシナリオでは、Apache abの待機時間は3秒単位 (3秒、6秒、9秒など) で増加します。 Apache abは、指定されたコンテンツ長に基づいてリクエストが成功したかどうかを判断します。 ベンチマークするNLBインスタンスが複数のバックエンドサーバーに関連付けられている場合、これらのバックエンドサーバーから返される応答コンテンツの実際の長さは、指定されたコンテンツの長さと異なる場合があります。 これは、ストレス試験結果を不正確にする。
ストレステストのスコアが低い原因
ストレステストの低得点の考えられる原因:
不十分なクライアントポート
ストレステスト中、NLBインスタンスに十分なフロントエンドポートがない場合、クライアントはNLBインスタンスとの接続を確立できません。 NLBインスタンスは、デフォルトでTCP接続のtimestampプロパティを削除します。 その結果、Linuxスタックのtw_reuseフラグは無効になります。 tw_reuseフラグは、time_wait状態にある接続を再利用するために使用されます。 したがって、このフラグが無効になると、time_wait状態の接続が蓄積され、NLBインスタンスのフロントエンドポートを占有します。
解決策: クライアントでは短期間の接続ではなく、永続的な接続を使用します。 さらに、リセット (RST) パケットを使用して、SO_LINGERソケットオプションを設定して接続を閉じます。
バックエンドサーバーの完全な受け入れキュー
バックエンドサーバーの受け入れキューがいっぱいになると、バックエンドサーバーはsyn_ackパケットを返すことができなくなります。 その結果、クライアントはタイムアウトします。
解決策:
sysctl -w net.core.somaxconn=1024
コマンドを実行して、net.core.somaxconnの値を変更し、バックエンドサーバーでアプリケーションを再起動します。 net.core.somaxconn のデフォルト値は 128 です。アプリケーションのバックエンドサーバーへの依存関係がパフォーマンスのボトルネックになります
バックエンドサーバーのトラフィック負荷がバックエンドサーバーのパフォーマンス制限を下回っています。 しかしながら、バックエンドサーバ上のアプリケーションは、データベースなどの別のアプリケーションに依存し得る。 したがって、依存性は、ストレステストにおけるNLBインスタンスのパフォーマンスを制限する可能性もあります。
解決策: バックエンドサーバーで使用されなくなったアプリケーションをクリアします。
異常なバックエンドサーバー
バックエンドサーバーが異常であると宣言された場合、またはバックエンドサーバーのヘルスステータスが頻繁に変化した場合、ストレステストでのNLBインスタンスのパフォーマンスが低下する可能性があります。
解決策: ヘルスチェックを無効にして、バックエンドサーバーに送信されるリクエストの数を減らします。