2012年11月26日月曜日

KVMと仮想スイッチ

Cです。KVMとVLANの話。

最近は用途にもよるけど、サーバ仮想化の検討が当たり前になっている。
1仮想化基盤の中に、別のネットワークセグメントが存在したりすることもよくある。
その場合には、仮想化基盤を分けるべきなんだけど金と仮想化対象サーバの数によっては
1台に収めたい場合もあるだろう。

4ネットワークセグメントが混在する場合の設定を。
KVMとCatlyst2950を使ってやってみた。

■作るもの 画像はみ出た




bondingの設定とcatlyst側のEtherChannelの設定いらないんじゃない?と
疑問に思った人がいるかもしれない。
bondingを組まずに各仮想ブリッジ(br)にVLANつけたサブインターフェイスを
そのまま割り当ててればいいと思うかもしれない。

しかしそれだとパケットの流れがだいぶ変わる。
ほんとにスイッチの動きとなってしまい
仮想マシンからのパケットを転送するだけの動きとなる。
L2ブロードキャストやMACテーブルに覚えていない場合、
「eth0 - eth3」の全部のポートからパケットが出て行くのだ。
いらんだろ。

画像ではcatlyst同士繋がっていないが
それをするとL2ループがおきちゃうこともある。
仮想スイッチでSTPは組むのはネットワークが複雑になりすぎるし嫌だ。
(各メーカーや技術者も「仮想ネットワークでSTPを組むな」と言っている。)
↑これに関して技術的な観点でなく管理的な面で言っている。
仮想スイッチでSTPを有効にしてやればできないことも無い。
いらんだろ。

bonding mode 0 でEtherchannelを組んで、
そのポートを仮想ブリッジに参加させた場合は
ちゃんと使えるインターフェイスを判断して
そこからパケットを転送してくれる。

※設定するときは通信が途切れないように工夫せよ

■いるもの

# yum install bridge-utils


■VLAN有効

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hostname
NETWORKING_IPV6=no
GATEWAY=xxx.xxx.xxx.xxx
LVAN=yes


■VLANタグのついたサブインターフェイス作成


# vi /etc/sysconfig/network-script/ifcfg-eth0.10
DEVICE="eth0.10"
MASTER="bond10"
SLAVE="yes"
BOOTPROTO="none"
ONBOOT="yes"

# vi /etc/sysconfig/network-script/ifcfg-eth0.20
DEVICE="eth0.20"
MASTER="bond20"
SLAVE="yes"
BOOTPROTO="none"
ONBOOT="yes"

# vi /etc/sysconfig/network-script/ifcfg-eth0.30
DEVICE="eth0.30"
MASTER="bond30"
SLAVE="yes"
BOOTPROTO="none"
ONBOOT="yes"

# vi /etc/sysconfig/network-script/ifcfg-eth0.40
DEVICE="eth0.40"
MASTER="bond40"
SLAVE="yes"
BOOTPROTO="none"
ONBOOT="yes"

~長いし省略~ 
他のインターフェイスにもVLANタグのついたサブインターフェイスを
同じように作っていく。


■仮想ブリッジの設定

# vi /etc/sysconfig/network-script/ifcfg-br10
DEVICE=br10
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0

# vi /etc/sysconfig/network-script/ifcfg-br20
DEVICE=br20
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0

# vi /etc/sysconfig/network-script/ifcfg-br30
DEVICE=br30
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0

# vi /etc/sysconfig/network-script/ifcfg-br40
DEVICE=br40
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0


■bondingのalieas設定

# vi /etc/modprobe.d/bonding.conf
alias bond10 bonding
alias bond20 bonding
alias bond30 bonding
alias bond40 bonding


■bondインターフェイスの作成

# vi /etc/sysconfig/network-scripts/ifcfg-bond10
DEVICE="bond10"
ONBOOT="yes"
BOOTPROTO=static
TYPE="Ethernet"
BRIDGE="br10"

BONDING_OPTS="mode=0 miimon=100"

~長いし省略~ 
bond40まで作成しよう。


ここまできたら勇気をもって/etc/init.d/network restart だ。
※eth0にでもIP振っておいたほうがいいぞ。

■確認しとこう

# brctl show
# ifconfig


あとは仮想マシンのNIC設定でどの仮想スイッチ(br)の中に属するかを設定すればOKだ。

設定はややこしいかもしれない、
もっと設定を簡単にして「動く」だけのものを作っても
思うように転送速度が出なかったり、障害時の原因特定が困難になったり
良いことは無いだろう。

以上

0 件のコメント:

コメントを投稿