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

Alibaba Cloud Linux:IPVSの推定機能を無効にしてネットワークのジッターを防ぐ

最終更新日:Jul 05, 2024

デフォルトでは、LinuxオペレーティングシステムのIP仮想サーバー (IPVS) モジュールは推定機能を有効にします。 大規模なKubernetesクラスターシナリオなど、大規模なサーバーが多数のサービスをホストするシナリオでは、サーバーがネットワークリクエストを処理するときに、推定機能により数十〜数百ミリ秒のレイテンシまたはネットワークジッターが発生する可能性があります。 Alibaba Cloud LinuxイメージのIPVSの見積もり機能を無効にできます。 この機能を使用してパケット数や接続数などの統計情報を収集しない場合は、IPVSの推定機能を無効にして、統計情報収集中に発生する追加のオーバーヘッドやジッターを排除することをお勧めします。

背景情報

IPVS

IPVSは、カーネルモードのレイヤー4 Server Load Balancer (SLB) 操作を実装するために、TCPおよびUDPサービス要求を実際のサーバーに転送できるLinuxカーネルコンポーネントです。 Kubernetesコンテナーでは、IPVSはKube-proxyコンポーネントのプロキシとして機能し、サービスリクエストをバックエンドポッドに転送してKubernetesサービスのバランスを取ることができます。 大規模クラスタでは、IPVSは、サービス間トラフィック分散および負荷分散要件を満たすために、より高速な応答およびより高いリソース利用を提供することができる。

説明

Kube-proxyはKubernetesクラスターの重要なコンポーネントであり、サービスのネットワークプロキシと負荷分散機能を実装しています。

IPVSの見積もり機能とネットワーク要求のレイテンシまたはジッタの原因

IPVSにはestimation_timerという名前の組み込みタイマーがあります。これは、接続数と、各タイムスライスで各サービスによって送受信されるデータパケット数をカウントするために使用されます。 タイマーはデフォルトで有効になっています。

IPVSの推定機能では、次の理由により、ネットワーク要求の待ち時間またはジッタが発生します。

  • サービスの数が増加するにつれて、計算量は線形的に増加する。 コンピューティングリソースとストレージリソースのオーバーヘッドを減らすために、カーネルはCPUベースで統計データを保存します。 カーネルによって使用されるCPUの数が増加するにつれて、統計を収集するためにカーネルがトラバースしなければならないCPUの数も増加する。 サービスとCPUの数が増加すると、各estimation_timerの統計的オーバーヘッドが大幅に増加します。

    image
  • Linuxでは、タイマーの実行に高い優先度が割り当てられます。 タイマータスクを実行すると、他のタスクは実行できません。 これは、パケット受信の遅延をもたらす。 アプリケーションがサーバーに要求を送信すると、数十から数百ミリ秒のレイテンシが発生します。 この場合、サーバーのping操作中にジッターが発生します。

制限事項

IPVSの推定機能は、次のカーネルバージョンを実行するAlibaba Cloud Linuxイメージに対してのみ無効にできます。

  • Alibaba Cloud Linux 2: 4.19.91-22以降

  • Alibaba Cloud Linux 3: 5.10.134-14以降

推定機能を無効にしてネットワークジッタの問題を解決する

重要

sudo ipvsadm -Ln -- statsコマンドなどのコマンドを使用してIPVSの推定機能を無効にすると、IPVSのサービス統計機能は使用できなくなります。 そのため, 対応するサービスの接続数および受信パケット数の変更を取得できません。 対応するビジネスへの影響を評価します。 見積もり機能を無効にするときは注意してください。

  1. Elastic Compute Service (ECS) インスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. ECSインスタンスの見積もり機能を無効にします。

    1. 次のコマンドを実行して、/etc/sysctl.confという名前のsysctl構成ファイルを開きます。

      sudo vim /etc/sysctl.conf
    2. ファイルの末尾に次の行を追加します。 次に、ファイルを保存して閉じます。

      net.ipv4.vs.ru n_estimation = 0
    3. 次のコマンドを実行して、変更された構成を有効にします。

      sudo sysctl -p
    4. コンテナシナリオでは、次の操作を実行して推定機能を無効にする必要があります。

      • シナリオ1: IPVSモジュールがリロードされるたびに、sysctl -pコマンドを実行して設定を有効にする必要があります。 システムがIPVSモジュールを再ロードするたびに、modprobe構成ファイルを使用してsysctl -pコマンドを自動的に実行することを推奨します。 これにより、sysctl.conf設定が有効になり、推定機能が無効になります。

        1. modprobe構成ファイルを作成します。 次の例では、ipvs.confファイルが作成されています。

          sudo vim /etc/modprobe.d/ipvs.conf
        2. 次のコンテンツをファイルに追加します。 次に、ファイルを保存して閉じます。

          options ip_vs run_estimation=0 post-up sysctl -p
      • シナリオ2: ネットワーク名前空間コンテナなどのコンテナにIPVSルールを設定した場合、各コンテナの推定機能を無効にする必要があります。

        説明

        Alibaba Cloud Container Service For Kubernetes (ACK) の場合、Kube-proxyのデフォルトのプロキシモードはIPVSであり、IPVSルールはホスト側で設定されます。 この場合、各コンテナの推定機能を無効にする必要はありません。 ACKを使用する場合は、この操作をスキップします。

    5. 推定機能が無効になっていることを確認します。

      • 方法1: sudo sysctl net.ipv4.vs.ru n_estimationコマンドを実行します。 0が返された場合、推定機能は無効になります。

      • 方法2: sudo ipvsadm -Ln -- statsコマンドを実行します。 統計値が変化しない場合、推定機能は無効にされる。

        重要

        ipvsadmツールをインストールしていない場合は、sudo yum install ipvsadmコマンドを実行してツールをインストールします。

次に何をすべきか

ネットワークのジッタとレイテンシの問題が解決されたことを確認する

  • 方法1: ECSインスタンスのIPアドレスまたはドメイン名をPingします。 レイテンシ値が比較的安定しており、妥当な範囲内にある場合、ネットワークレイテンシの問題は解決されます。

  • 方法2: ネットワークパフォーマンステストツールを使用して、包括的なレイテンシとジッタテストを実行し、ロングテールのレイテンシが存在するかどうかを確認します。 ロングテールレイテンシの頻度と期間が大幅に短縮された場合、またはロングテールレイテンシが再発しない場合、ネットワークジッタとレイテンシの問題は解決されます。

    説明

    推定機能を無効にしても、ネットワークのジッターやレイテンシが残っている場合は、Container Service for Kubernetes (ACK) コンソールのネットワーク診断機能を使用して問題を診断できます。 詳細については、「ネットワーク診断」をご参照ください。

推定機能の再有効化

推定機能を再度有効にする場合は、sysctlおよびmodprobe構成ファイルのrun_estimation値を1に変更します。