ちょいと自宅環境のUbuntu 14.04 Serverにて、KVMのネットワーク周りに相当するbridgeインターフェイスで不可思議な動きをしていたので切り替えてみることにしました。
Open vSwitchとは
この辺りを確認すると、802.3ad、いわゆるbondingインターフェイスを使用した場合、RXパケットが増大する、というバグが報告はされているみたいですが、resolvになっていないので、なお顕在するバグなんだと思います。
動作的には問題ないと思うのですが(少なくとも通信が不安定になったりしたことはない)、精神衛生上あまりよろしくなかったので、前々から興味があったOpen Vswitchに入れ替えてみることにしました。
ちなみに作業手順を順に追って行きたかったのですが、途中で色々とつまずいてしまったこと、ネットワークが繋がらなくなりローカルコンソールでの作業が発生してしまい、メモ程度のものしか無いことをさきにお伝えしておきます。
ちなみにbonding構成での設定になります。
確認環境:
$ lsb_release -a
No LSB modules are available.
Distributor ID:Ubuntu
Description:Ubuntu 14.04.2 LTS
Release:14.04
Codename:trusty
手順
1. パッケージの導入
sudo apt-get install openvswitch-switch
2. OVSのセットアップ
sudo ovs-vsctl add-br ovsbr0
sudo ovs-vsctl add-bond ovsbr0 bond0 eth0 eth1
sudo ovs-vsctl set port bond0 lacp=active bond_mode=balance-slb
3. libvirtで使用していたネットワーク設定の停止
virsh net-destroy default
4. libvirtのネットワークの編集
virsh net-edit default
<network>
<name>ovsbr0</name>
<forward mode='bridge'/>
<bridge name='ovsbr0'/>
<virtualport type='openvswitch'/>
</network>
5. 設定の確認
sudo ovs-appctl bond/show bond0
---- bond0 ----
bond_mode: balance-slb
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
next rebalance: 9876 ms
lacp_status: off
slave eth0: enabled
active slave
may_enable: true
hash 204: 1 kB load
hash 225: 0 kB load
hash 234: 5 kB load
slave eth2: enabled
may_enable: true
hash 14: 40 kB load
sudo ovs-vsctl list port bond0
_uuid : c1c35875-0e29-4905-b4d7-984216a8f7a6
bond_downdelay : 0
bond_fake_iface : false
bond_mode : balance-slb
bond_updelay : 0
external_ids : {}
fake_bridge : false
interfaces : [455a53b4-b444-46be-bc21-569fcb84b44b, 823adef3-80ef-461a-b651-a2bc6c210621]
lacp : []
mac : []
name : "bond0"
other_config : {lacp-time=fast}
qos : []
statistics : {}
status : {}
tag : []
trunks : []
vlan_mode : []
6. libvirtからOpen vSwitchの自動起動を有効にする
virsh net-autostart ovsbr0
7. open VswitchにIPアドレスを付与する。
sudo ifconfig ovsbr0 192.168.169.2/24
sudo route add default gw 192.168.169.1
8. 疎通を確認する。
ping www.example.com
9. 問題がなければ、KVMの仮想マシンのNIC設定を今回作成したbridgeに変更する。
10. ネットワークインターフェイス設定ファイルも編集し直す。
# Loopback interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto ovsbr0
allow-ovs ovsbr0
iface ovsbr0 inet static
address 192.168.169.2
network 192.168.169.0
netmask 255.255.255.0
broadcast 192.168.169.255
gateway 192.168.169.1
dns-nameservers 192.168.169.1
ovs_type OVSBridge
ovs_ports bond0
iface ovsbr0 inet6 static
address 2001:db8::2/32
netmask 64
gateway 2001:db8::1
ovs_type OVSBridge
ovs_ports bond0
allow-ovsbr0
iface bond0 inet manual
ovs_bridge ovsbr0
ovs_type OVSBond
ovs_bonds eth0 eth1
ovs_options bond_mode=balance-slb
allow-ovsbr0
iface bond0 inet6 manual
ovs_bridge ovsbr0
ovs_type OVSBond
ovs_bonds eth0 eth1
ovs_options bond_mode=balance-slb
動作確認
11. マシンを再起動し、Open vSwitchにIPアドレスが付与された状態でLinkupすることを確認する。
また以下のコマンドを実行してもよいと思います。
sudo ovs-vsctl list port
_uuid : de98ab4c-fc4d-4bd6-ae4a-9dcb6e3c80c9
bond_downdelay : 0
bond_fake_iface : false
bond_mode : []
bond_updelay : 0
external_ids : {}
fake_bridge : false
interfaces : [404af90e-86b8-4bcb-9019-bad79467944c]
lacp : []
mac : []
name : "vnet1"
other_config : {}
qos : []
statistics : {}
status : {}
tag : []
trunks : []
vlan_mode : []
sudo ovs-vsctl list interface
_uuid : 1e0078cc-eeee-44ab-856e-bab3dc7a696d
admin_state : up
bfd : {}
bfd_status : {}
cfm_fault : []
cfm_fault_status : []
cfm_health : []
cfm_mpid : []
cfm_remote_mpids : []
cfm_remote_opstate : []
duplex : full
external_ids : {attached-mac="52:54:00:67:3b:a5", iface-id="0523238e-d603-4bbe-b89d-02752f130920", iface-status=active, vm-id="2d077489-d237-61a1-1304-1b5aee970afb"}
ifindex : 13
ingress_policing_burst: 0
ingress_policing_rate: 0
lacp_current : []
link_resets : 1
link_speed : 10000000
link_state : up
mac : []
mac_in_use : "fe:54:00:67:3b:a5"
mtu : 1500
name : "vnet2"
ofport : 6
ofport_request : []
options : {}
other_config : {}
statistics : {collisions=0, rx_bytes=1759184, rx_crc_err=0, rx_dropped=0, rx_errors=0, rx_frame_err=0, rx_over_err=0, rx_packets=18156, tx_bytes=3040442, tx_dropped=0, tx_errors=0, tx_packets=22878}
status : {driver_name=tun, driver_version="1.6", firmware_version=""}
type : ""
sudo ovs-appctl bond/show bond0
---- bond0 ----
bond_mode: balance-slb
bond-hash-basis: 0
updelay: 200 ms
downdelay: 200 ms
next rebalance: 3068 ms
lacp_status: off
slave eth0: enabled
active slave
may_enable: true
hash 234: 6 kB load
slave eth1: enabled
may_enable: true
hash 14: 58 kB load
hash 204: 3 kB load
hash 225: 0 kB load
設定できるパラメータは他にもたくさんあるので以下を参照するのが良いと思います。
ちなみに
optionを設定するには以下のようにすれば良いようで・・・
sudo ovs-vsctl set port bond0 bond_updelay=200 bond_downdelay=200 other_config:lacp-time=fast
結果は以下で確認できます。
sudo ovs-vsctl list port bond0
_uuid : 8fd21995-495c-4c62-b73d-a182ff82ff2f
bond_downdelay : 200
bond_fake_iface : false
bond_mode : balance-slb
bond_updelay : 200
external_ids : {}
fake_bridge : false
interfaces : [33e4449d-c290-454f-a5c7-9e2293ae1f72, 5fefcc0d-4d5f-4fdb-bfef-77641ee704e3]
lacp : []
mac : []
name : "bond0"
other_config : {bond-detect-mode=miimon, bond-miimon-interval="100", lacp-time=fast}
qos : []
statistics : {}
status : {}
tag : []
trunks : []
vlan_mode : []
ちなみにパラメータの削除は以下の様なコマンド。
sudo ovs-vsctl remove port bond0 other_config bond_updelay
本来SDNで使うべきOpen vSwitchをただbridge代わりに使用するという何とも残念な内容ですが、当初の懸念だったRXのDropパケットは一切検出されなくなったので、これはこれで良かったかなと思います。
設定方法等で間違いなど有りましたらご指摘ください。
日経BP社
売り上げランキング: 108113
翔泳社
売り上げランキング: 162999