TCPCopyの使い方

6016 ワード


ネットワーク技術    
転載する
王斌
2013-03-12 10:35
今週はストレステストの仕事で、TCPCopyを使って、とても良いツールです.
TCPCopyは、オンライントラフィックをテストシステムにインポートするためのレプリケーション(tcpベースのすべてのpackets)を要求するツールです.リアル、リアルタイム、低負荷、分散などの特徴があります.
 
TCPCopy七大機能:
  • 分布式圧力試験ツールは、オンラインデータを利用して、システムが耐えられる圧力の大きさ(ab圧力試験ツールよりはるかに多い)を試験することができ、いくつかのbug
  • を事前に発見することができる.
  • 普通のオンラインテストは、新しいシステムが安定しているかどうかを発見することができ、事前にオンライン過程で発生する多くの問題を発見し、開発者に
  • オンラインに自信を持たせる.
  • 比較試験、同様に要求し、異なるバージョンのプログラムに対して、性能比較などの試験
  • を行うことができる.
  • 流量増幅機能は、多種の手段を利用して無限のオンライン圧力を構築することができ、中小サイトの圧力テスト要求
  • を満たすことができる.
  • TCPCopyを利用して従来の圧力テストツールからの要求を転送し、ネットワーク遅延を増加させ、圧力テストをよりリアルにすることができる
  • .
  • ホット・バックアップ
  • 実戦演習(アーキテクチャ必須)
  • TCPCopyは、TCPCopyクライアント(すなわち、tcpcopy)とTCPCopy server(すなわちintercept)に分けられる.TCPCopy clientはオンラインサーバ上で実行され、オンライン要求パケットをキャプチャする.TCPCopy server(デフォルトのリスニングポートは36524)は、応答パケットをキャプチャし、TCPCopy clientに応答パケットヘッダ情報を渡してTCPCopy clientを完了するためにテストマシン上で動作する.
    使用方法は次のとおりです.
    TCPCopy server
    # modprobe ip_queue  #   ip_queue
    # iptables -I OUTPUT -p tcp --sport <port> -j QUEUE  #  , output 
    # ./intercept
    

    注:ip_を起動した場合Queueとiptablesが設定されており、3番目の項目を実行するだけです.テストが終わったら、上記の設定したiptablesエントリを削除することを忘れないでください.
    TCPCopy client
    # ./tcpcopy -x <online server app port>-<test server ip>:<test server app port>
    

    1.2.3.25、1.2.3.26はオンラインアプリケーションサーバ、1.2.3.161はテストサーバ、オンラインアプリケーションポートは11311、テストサーバのアプリケーションポートは11511と仮定します.私たちの目的は1.2.3.161テストサーバが現在の2台のオンラインの圧力に耐えられるかどうかを確認することです.
    TCPCopyを使用してテストを行います.
    ターゲットテストサーバ(1.2.3.161)
    # modprobe ip_queue
    # iptables -I OUTPUT -p tcp --sport 11511 -j QUEUE
    # ./intercept
    

    オンラインサーバ(1.2.3.25)
    # ./tcpcopy -x 11311-1.2.3.161:11511
    

    オンラインサーバ(1.2.3.26)
    # ./tcpcopy -x 11311-1.2.3.161:11511
    

    1.2.3.25:
    21158 appuser   15   0  271m 226m  756 S 24.2  0.9  16410:57 asyn_server
    9168  root      15   0 18436  12m  380 S  8.9  0.1  40:59.15 tcpcopy
    

    1.2.3.26:
    16708 appuser   15   0  268m 225m  756 S 25.8  0.9  17066:19 asyn_server
    11662 root      15   0 17048  10m  372 S  9.3  0.0  53:51.49 tcpcopy
    

    1.2.3.161:
    27954 root      15   0  284m  57m  828 S 58.6  1.4 409:18.94 asyn_server
    1476  root      15   0 14784  11m  308 S  7.7  0.3  49:36.93 intercept
    

    1.2.3.25:
    $ wc -l access_1109_09.log
      7867867,  2185 reqs/sec
    

    1.2.3.26:
    $ wc -l access_1109_09.log
      7843259,  2178 reqs/sec
    

    1.2.3.161:
    $ wc -l access_1109_09.log
      15705229, 4362 reqs/sec
    

    要求損失率:(7867867+7843259-15705229)/(7867867+7843259)=0.0375%
    1.2.3.161テストサーバは、現在のオンライン圧力の2倍に耐えられることがわかります.
    負荷状況を見ると、tcpcopy自体の負荷は8.9%と9.3%、interceptは7.7%で、負荷から見ると、いずれも高くなく、メモリも多くありません.
    注意事項:
  • Linuxプラットフォーム、カーネル2.6+、netlinkメカニズムまたはnfqueueをサポートする必要があります(0.6.5+nfqueueをサポートし、./configureでnfqueueを指定すればいい).
  • TCPCopyのtcpcopyとinterceptプログラムの実行にはroot権限が必要です.
  • interceptは、同じマシンで1つのインスタンスを実行するだけで複数のアプリケーションのレプリケーションをサポートします(複数のiptablesコマンドを設定します).
  • TCPCopy clientは、テストサーバ(デフォルト36524ポート)に接続する必要があるため、対応するポートを公開します.
  • TCPCopyパケット関数に依存しているため、圧力が大きい場合、パケット関数自体が信頼できないため、パケットが失われ、要求が失われる.
  • interceptプログラムでip_と密接にQueueカーネルモジュールは関連しているため、圧力が大きい場合に要求損失率が高く、cat/proc/net/ip_を介してsysctlシステムパラメータを最適化する必要がある.queue、ip_を表示Queue運転状況、Queue droppedの値がどんどん大きくなっている場合はip_を修正する必要がありますqueue_maxlenパラメータ、例えばecho 4096>/proc/sys/net/ipv 4/ip_queue_maxlen ;Netlink droppedの数値が増加し続ける場合はnet.を変更します.core.rmem_maxとnet.core.wmem_maxパラメータ、例えばsysctl-w net.core.rmem_max=167777216とsysctl-w net.core.wmem_max=16777216 .
  • 127.0.0.1から発行されたリクエストを別のマシンにコピーする場合は、-cパラメータを設定する必要があります.
  • テスト環境は、接続がkeepaliveを維持するなど、オンライン環境と一致することが望ましい.
  • TCPCopyはip、tcp層のデータのみに関係し、tcp層以上のプロトコルに関係する検証を要求すると、システムは正常に動作しません.たとえば、mysql接続プロトコルは、権限認証がtcpレイヤ上のmysqlプロトコルに関連しているため、過去のリクエストをコピーするとターゲットテストサーバから不正なリクエストとみなされます.この場合、mysqlプロトコルに対して具体的な処理を行う必要があります.tcpcopyプログラムは正常に実行されます.
  • 多層アーキテクチャ環境では、テストシステムは必ず独立して、オンラインシステムと業務関連がなく、そうでなければオンラインに影響します.
  • 損失要求率はネットワーク状況に関係しており、イントラネット内で要求をコピーすることが望ましい.
  • 本システムはドメイン名をサポートせず、ipアドレスのみをサポートします.
  • 不要なトラブルを避けるために、閉じるときはtcpcopyを閉じてからinterceptを閉じます.

  • 詳細については、「https://github.com/downloads/wangbin579/tcpcopy/TCPCopy_0.6.5_Manual.pdf」を参照してください.
    ソース:
    http://code.google.com/p/tcpcopy/
    リンク:
    http://www.yeolar.com/note/2013/03/12/tcpcopy/