仮想化でプリセールスしてるSEの一日

VMware から Azure まで、インフラや仮想化の最新情報をベンダー色をできるだけ抑えて綴っていきます

WANem で Software-Defined なネットワーク帯域制御装置を作る (1)

(1) (2) (3)

ご存じのとおり、VDIBCP/DR はネットワークの帯域・回線品質に大きく左右されるソリューション。
本社オフィスであればリッチな専用線を契約しているかもしれませんが、拠点オフィスなどではフレッツ系などを利用しているケースも多々あります。
WAN 回線が潤沢でない場合も支障が無い設計を行うために「回線シミュレータ」「帯域制御装置」を使って事前検証しておきたいところです。


しかし、帯域制限ならまだしも遅延まで作れるような装置は意外と高価。。。
検証のためだけに購入するのは難しいところです。"ぶっつけ本番" で導入してしまうケースもありますが、遊休サーバーや仮想マシンを使ってソフトウェアベースの帯域制御装置を作ってみましょう。昨今流行りの "Software-Defined" です。


Linux の「tc qdisc」で回線シミュレーション

Linux にある程度詳しい方は、tc qdisc コマンドを応用することで本格的な回線シミュレーションができることをご存じだと思います。

Linux Advanced Routing & Traffic Control
http://lartc.org/
http://archive.linux.or.jp/JF/JFdocs/traffic-control.txt


少し具体例を挙げると、、、

  • 帯域制限(300Kbps)
# tc qdisc add dev eth0 root tbf limit 15Kb buffer 10Kb/8 rate 300Kbit
  • 回線遅延(100msec ± 10ms)
# tc qdisc add dev eth0 root netem delay 100ms 10ms
  • パケットロス(10%)
# tc qdisc add dev eth0 root netem loss 10%
  • パケット破損(10%)
# tc qdisc add dev eth0 root netem corrupt 10%


実際に 200msec + 150kbps の遅延を設定してみました(netem delay)。


             ↓


かなり正確にシミュレーションできていることが分かります。
送信パケットにしか適用されないらしいのですが、VDI や DR のトラフィックは基本的に一方向ですし、市販されている専用装置も実は組込み Linux 上でこのコマンドを動かしているだけのものも多いらしいので "本格的" と言えそうです。


tc qdisc のフロントエンド「WANem」

「帯域制限」+「距離遅延」といったように、先ほどのコマンドは併用可能です。
日本の WAN 回線は品質が良いので、簡単な組合せだけで本格的なシミュレーションができるでしょう。「3G 携帯回線での VDI 品質」なども頑張れば可能です。

しかし、併用するには少しコツが要ります。そもそもパラメータの意味が難しい。"呪文" のように感じた方も多いでしょう。私はいまでもそう思っていますし、tc を完全にマスターして使いこなすというのはかなり敷居が高い。。。
特に、クライアントチームがリードすることも多い VDI ソリューションの場合は、Linux のスキルセットを持ち合わせていないケースもあるかもしれません。


tc は精度は高いが、難しすぎる。。。
私と同じ印象を受けた方のために、
"お手軽に" tc を利用できるフリー*1 のフロントエンド「WANem」があります。

WANem - Wide Area Network Emulator
http://wanem.sourceforge.net/
http://sourceforge.net/projects/wanem/


WANem はあの TATA Consultancy Services が作った Web UI の tc フロントエンドです。KNOPPIX ベースの Live CD で公開されているため、CD ブートするだけで利用することができます。


CD ブートすると KNOPPIX が起動し...


自動ログオンされて WANem のフロントエンドが立ち上がります。*2


「Basic Mode」では、帯域制限や遅延時間を入力するだけなのですが、


その裏では、次のような凄まじい呪文を実行してくれています。

tc qdisc add dev eth1 root handle 1: netem delay 200ms
tc qdisc add dev eth1 parent 1:1 handle 10: htb default 1 r2q 10
tc qdisc add dev eth1 parent 10: classid 0:1 htb rate 500kbit ceil 500kbit 


「Advanced Mode」では、驚くほど細かくシミュレーションが可能です。

※ いずれもクリックすると拡大します


また、20 種類くらいはあらかじめプリセットもされており、


ping に頼らずとも設定効果を確認する機能も用意されています。



WANem の不便なところを改善する!!

このように、とても簡単ながら本格的なコントロールを行える WANem ですが、
これを「装置」として考えると不便に感じる部分もあります。

  • 通信元デバイスゲートウェイ設定を
    一台一台 WANem サーバーに変更しなければならない
  • Live CD のため、再起動のたびにネットワーク設定などがクリアされてしまう
  • 一部のコンポーネントをアップデートしたい


この辺りを改善するために、いくつかカスタマイズを加えてみましょう。
理想は「既存環境のネットワーク設定には一切触らず、間に挟むだけ」です。
次回 につづく。




vExpert Advent Calendar の前日担当 mihiguch さんから受けた 質問 については、
We can deal with the problem using customized WANem. になるでしょうか?
明日 12/12 は アプリ仮想化奉行 さんです。

*1:GNU General Public License

*2:v3.0 Beta の場合。DHCP が無い場合はブラウザと一緒にネットワーク設定も起動します。