[Ubuntu][Open vSwitch][IPv6] Ubuntu 14.04環境で、KVMのbridgeインターフェイスをOpen vSwitchに切り替えてみた。

Ubuntu

ちょいと自宅環境のUbuntu 14.04 Serverにて、KVMのネットワーク周りに相当するbridgeインターフェイスで不可思議な動きをしていたので切り替えてみることにしました。

Open vSwitchとは

Open vSwitch
Bug #986043 “8086:10c9 bridged network interface dropping RX pac...” : Bugs : linux package : Ubuntu
This bug was created, because it was requested in the bug #787055. br-eth0 Link encap:Ethernet HWaddr 00:25:90:58:37:7c ...
Bug #1041070 “802.3ad bond interface have show high RX dropped p...” : Bugs : bridge-utils package : Ubuntu
On Ubuntu 12.04.1 LTS With the following networks settings: /etc/network/interfaces auto lo iface lo inet loopback auto ...

この辺りを確認すると、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

設定できるパラメータは他にもたくさんあるので以下を参照するのが良いと思います。

http://www.openvswitch.org//support/dist-docs/ovs-vswitchd.conf.db.5.html

ちなみに

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
Removing OVS Configuration Settings - Scott's Weblog - The weblog of an IT pro focusing on cloud computing, Kubernetes, Linux, containers, and networking
Removing OVS Configuration Settings - Scott's Weblog - The weblog of an IT pro focusing on cloud computing, Kubernetes, ...

本来SDNで使うべきOpen vSwitchをただbridge代わりに使用するという何とも残念な内容ですが、当初の懸念だったRXのDropパケットは一切検出されなくなったので、これはこれで良かったかなと思います。

設定方法等で間違いなど有りましたらご指摘ください。

Open vSwitch - Proxmox VE
OpenStack Folsom構築 on Wheezy (2) Open vSwitch | 外道父の匠
Link Aggregation and LACP with Open vSwitch - Scott's Weblog - The weblog of an IT pro focusing on cloud computing, Kubernetes, Linux, containers, and networking
Link Aggregation and LACP with Open vSwitch - Scott's Weblog - The weblog of an IT pro focusing on cloud computing, Kube...
この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました