20仮想マシンで1000仮想IPアドレスを使うWEB負荷試験環境の準備!
今日は朝からお客さんのところで、WEB負荷テストマシンを構築してきました。当社のWEB負荷テストツール「SADEE2」を使うのですが、テストしたい内容として、
・異なるソースIPアドレスからの負荷をかけたい
・同時接続クライアント数は1万〜1.5万は欲しい
ということで、SADEE2は基本仕様として1000スレッドまでとしているので(改造すればもっといけるのですが・・・)、仮想マシンを20個立ち上げ、それぞれで1000スレッドを実行しよう、ということになりました。また、SADEE2はソースIPアドレスを使い分ける機能は持っていなかったので、機能追加し(ソースを直すのは簡単ですので)、各仮想マシンで、仮想IPアドレスを1000個持たせ、1000スレッドがそれぞれ別のソースIPアドレスを使って負荷をかける、という構成にしました。
ハードはお客さんに用意していただき、8コアのxeonで、20VMを立ち上げて実験してみました。最近のハードは高性能なので、20VMくらい何でもなく、それぞれ1000個の仮想IPアドレスを持たせても平気な顔をして動いてくれます。仮想IPアドレスを1000個設定するのも手でコマンドを打つと一日かかっても終わりませんので、コマンド自動生成プログラムを作り、開始IPアドレスと個数を指定すると簡単にifconfigコマンドを列挙したスクリプトを作ってくれ、さらに、SADEE2のソースIP指定パラメータファイルも同時生成するようにしました。
さて、準備は終わり、とりあえず、本当のテスト対象は別の場所にあるので、動くかどうかを確認しようと思ったのですが、手頃な攻撃対象のWEBサーバがありません。。
仕方ないので、私のMacBookAirで、その場でささっとオレオレWEBサーバを作り、実験することにしました。クライアントからTCP/IP接続を受け付け、何でもいいのでリクエストを受けたら200 OKのレスポンスを返す、という単純な機能にし、その代わり、事前起動2000スレッドで、そこそこ高性能に動くようにしたものを使いました。
実際に動かしてみると・・・
オレオレWEBサーバを実行している(要するに、攻撃を受けている)MacBookAirの
CPU負荷は平均300%くらい、瞬間的に2600%という、見たこともない数値をたたき出しました!それでも、順番にVMを設定してSADEE2を起動して、とやっている1時間くらいの間、ちゃんと問題なく動き続けてくれました。先週まで使っていた初代MacBookAirだったらあっという間に熱暴走で使えなくなっていましたね。。右の大きいターミナルに、オレオレWEBサーバが受け付けたクライアントのソースIPアドレスが出ていますが、見事にばらついてくれています。
ただし、何の問題もないかというとそうでもなく、さすがに常に20000個の別IPアドレスからの通信を裁いていると、ARPテーブルもひどい状態になり、そのためか、たまにsshが切断してしまったり、MacBookAir自体の通信が不安定になる感じでした。
このテスト環境を統合管理するUIでも用意して、WEB負荷試験アプライアンスとして販売したら、意外と需要があるのかなぁ。。と思いつつも、結構巨大なサーバ機なので、テストする場所に移動するのも大変そうです・・・。