サーバをネットワーク遅延発生装置にする

今回はネットワーク遅延を擬似的に発生させる方法について。

ネットワーク遅延がある環境で色々検証したいこと。。
あると思います。

例えば、データセンターを地理的に離れた場所に借りたいがデータセンター間で
連携するようなアプリケーションがありネットワーク遅延が与える影響を事前に知りたい。
あると思います。

例えば、距離的に離れた場所でVirtual Chassis(Juniper)、VCS(Brocade)、FabricPath(Cisco)を組みたいが事前に検証してみたい。
あると思います。

ということでネットワーク遅延を擬似的に発生させる方法を紹介します。

サーバ構成

OS:CentOS 6.4
サーバをブリッジで動かすのでNICは2つ必要

構成図

f:id:kashigeru:20140212224259j:plain

サーバをブリッジにする

bridge-utilsをインストール

yum install bridge-utils

Interfaceを設定する
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0

/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes

ネットワーク再起動

/etc/init.d/network restart

これでイケそうな気がする~

設定

netemを使います。参考
tcコマンドで設定します。

設定

tc qdisc add dev [dev] root netem delay [遅延値]

変更

tc qdisc change dev [dev] root netem delay [遅延値]

確認

tc qdisc show dev [dev]

削除

tc qdisc del dev [dev] root

検証

何も設定していない場合の遅延は1ms(見づらくてすみません)

f:id:kashigeru:20140211224141j:plain

では遅延を20msに設定してみます。

tc qdisc add dev eth0 root netem delay 20ms

f:id:kashigeru:20140211224436j:plain

20msになりました(見づらくてすみません)
では設定も確認してみます。

tc qdisc show dev eth0 
qdisc netem 8004: limit 1000 delay 20.0ms

20msで設定されています。

まとめ

このようにtcコマンドを使って簡単に遅延を発生させることができます。
検証では遅延は一定ですが、+-の範囲を指定してランダムに遅延を発生させることもできます。

その場合は下記のように遅延値の後に+-させる範囲を設定します。

tc qdisc change dev eth0 root netem delay 1000ms 10ms 

この場合は1000ms+-10msでランダムに遅延が発生します。

その他tcコマンドではパケットロスさせたり、パケットを壊したりも出来ます。
簡単に出来るので機会があればやってみてください。
(ノ´▽`)ノ{+++THANK YOU+++}ヽ(´▽`ヽ)