Linux Bridgeではなく、openvswitchを使って、通信を試してみた。
まずは、Linux Bridgeからの置き換えから。
心配していたのは、ovsにvmをどうやってbindするのかってこと。。virt-install時にbr1とか
設定してたけど、そこをovsのbridge名に変更するだけでいいのかと。。。
そのあたりを調査すると、openvswitchにbridge compatモードみたいので動作させている事例が多い。
openvswitchの情報によると、libvirt 0.9.11からネイティブ?に対応しているようです。
早速、KVMサーバで調べてみると、対応してる様子。xmlファイルの記載もある。virtualportとかで良さそうです。
[root@kvm1 ~]# rpm -qa | grep libvirt libvirt-client-0.10.2-18.el6_4.9.x86_64 libvirt-0.10.2-18.el6_4.9.x86_64 libvirt-python-0.10.2-18.el6_4.9.x86_64
openvswitchは最新のものを使う事にした。現時点では、1.10.0です。
コンパイルしてやるのもいいかと考えたが、起動スクリプトとか面倒なので、rpmを探してみたが、ない。。。
ここに、rpmの作成方法までありました。しかもCentOS6.4で同じ。ラッキー。いや、ラッキーじゃなく感謝ですね。ありがとうございます。
コンパイルオプションとか全く見てないので、なにがどうなってるかわかりませんが、とりあえず突き進みます。
[root@kvm1 ~]# yum install kmod-openvswitch-1.10.0-1.el6.x86_64.rpm [root@kvm1 ~]# yum install openvswitch-1.10.0-1.x86_64.rpm [root@kvm1 ~]# rpm -qa | grep openvs (確認) openvswitch-1.10.0-1.x86_64 kmod-openvswitch-1.10.0-1.el6.x86_64
現在のこれまでの設定だと、Linux Bridgeで動作してしまうので、KVMサーバ上で、
# cd /etc/sysconfig/network-scripts # rm ifcfg-br1 (ブリッジ設定消しちゃいます) # vi ifcfg-eth1 --- DEVICE=eth1 HWADDR=00:0C:... TYPE=Ethernet UUID=029eb193-c711-..... ONBOOT=yes #BRIDGE=br1 BRIDGEのところをコメントにします。 ---
再起動!
とりあえず、ifconfigでeth1がupしていること、br1が作成されていないことを確認します。
ovsでブリッッジを作成し、eth1を接続します。br1とかすると、Linux Bridgeと混乱するので、bridgeの名前は、
ovsbr1としています。ifconfigでovsbr1が作成していることを確認します。
[root@kvm1 ~]# ovs-vsctl add-br ovsbr1 [root@kvm1 ~]# ovs-vsctl add-port ovsbr1 eth1 [root@kvm1 ~]# ovs-vsctl show d74e37a6-b456-42a3-a83a-153d8544cafb Bridge "ovsbr1" Port "eth1" Interface "eth1" Port "ovsbr1" Interface "ovsbr1" type: internal ovs_version: "1.10.0" [root@kvm1 ~]# ifconfig -a ... ovs-system Link encap:Ethernet HWaddr AA:4F:EE:DF:3D:06 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) ovsbr1 Link encap:Ethernet HWaddr 00:0C:29:E7:3D:46 inet6 addr: fe80::d0f1:cbff:fe4e:ab35/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
さて、いよいよvmとovsbr1との接続ですが、上記のopenvswitchの情報に従って変更します。
# virsh edit vm71 --- 編集前 --- <interface type='bridge'> <mac address='52:54:00:fc:a5:fa'/> <source bridge='br1'/> (変更します) <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> --- 編集後 --- <interface type='bridge'> <mac address='52:54:00:fc:a5:fa'/> <source bridge='ovsbr1'/> <virtualport type='openvswitch/'> (追加) <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> # virsh start vm71
変更後、vmを起動します。
ovsの状態を確認します。vnet0としてovsに接続されていますね。。
[root@kvm1 ~]# ovs-vsctl show d74e37a6-b456-42a3-a83a-153d8544cafb Bridge "ovsbr1" Port "vnet0" Interface "vnet0" Port "eth1" Interface "eth1" Port "ovsbr1" Interface "ovsbr1" type: internal ovs_version: "1.10.0"
ifconfigでvnet0ができているのも確認。
# ifconfig -a ... vnet0 Link encap:Ethernet HWaddr FE:54:00:FC:A5:FA inet6 addr: fe80::fc54:ff:fefc:a5fa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:826 (826.0 b) TX bytes:667 (667.0 b)
2台のKVMを同様にしてovsに置き換えて、各KVMサーバ上でvmを2つ動作させて通信します。
構成は、こんな感じ。
vm76からvm71へのping。
[root@vm76 ~]# ping 192.168.200.71 PING 192.168.200.71 (192.168.200.71) 56(84) bytes of data. 64 bytes from 192.168.200.71: icmp_seq=1 ttl=64 time=1.07 ms 64 bytes from 192.168.200.71: icmp_seq=2 ttl=64 time=0.607 ms
vnet0とかvnet1とかは自動で設定されるんですね。便利。
# virsh dumpxml vm71 ... <source bridge='ovsbr1'/> <virtualport type='openvswitch'> <parameters interfaceid='9c8f005e-df3b-3d25-3e26-dc58d12a04f9'/> </virtualport> <target dev='vnet0'/> <model type='virtio'/> ...
target dev=vnet0とか自動で追加されていますね。。