Open vSwitch インストール

Axiomtek社製 NA-812A に Open vSwitch 1.4 をセットアップする。


インストール作業

ソースの取得・必要な環境の準備

http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz から採ってくる。
但しこのバージョンは autoconf および automake を要求する。 automake は yum install automake するだけで良いが、 autoconf は CentOS 6.2 の標準的なものでは古い。 RPM を探すのが面倒だったので http://ftp.gnu.org/gnu/autoconf/ から autoconf 2.68 をとってきて ./configure ; make ; make install して手でインストールした。

ビルドとインストール
# ./configure --with-linux=/lib/modules/`uname -r`/build
# make
# make install

カーネルモジュールのインストール。

# uname -r
2.6.32-220.7.1.el6.x86_64  ここに入れるように注意
# cp -p datapath/linux/openvswitch_mod.ko /lib/modules/2.6.32-220.7.1.el6.x86_64/kernel/drivers/misc/
# depmod
# modprobe openvswitch_mod
openvswitch_mod: Open vSwitch switching datapath 1.4.0, built Mar 21 2012 18:50:01
# lsmod | grep open
openvswitch_mod        82933  0   ロードを確認
# 

環境設定

準備作業

INSTALL.Linux ドキュメントに従い、以下を実行。

# mkdir -p /usr/local/etc/openvswitch
(次のコマンドは openvswitch のソース展開ディレクトリのトップでやること(引数のスキーマが必要なので))
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
を実行して、以下のメッセージを確認。動作したらしい。
ovsdb-tool: 00001|lockfile|INFO|/usr/local/etc/openvswitch/.conf.db.~lock~: lock file does not exist, creating
デーモン起動

DB サーバを起動する。

# ovsdb-server /usr/local/etc/openvswitch/conf.db \
                      --remote=punix:/usr/local/var/run/openvswitch/db.sock \
                      --remote=db:Open_vSwitch,manager_options \
                      --pidfile --detach
#
# ovs-vsctl --no-wait init
で初期化。

スイッチデーモンを起動する。

# ovs-vswitchd --pidfile --detach 
Mar 21 19:01:35|00001|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
Mar 21 19:01:35|00002|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected
#

試験運転用のコントローラを起動する。(ovs-controller は一般的な L2 learning switch として機能する)

# ovs-controller -v --detach ptcp:
#

スイッチ設定

スイッチ情報の登録

スイッチ情報をデータベースに登録する

ovs-vsctl add-bridge br0  スイッチを登録
ovs-vsctl add-port br0 eth1  ポートを登録
ovs-vsctl add-port br0 eth2
ovs-vsctl add-port br0 eth3
ovs-vsctl add-port br0 eth4
ovs-vsctl add-port br0 eth5
ovs-vsctl set-controller br0 tcp:127.0.0.1  接続するコントローラを指定
DPID固定登録

必要であれば(大抵必要だと思うが)datapath id を以下のようにして設定できる。

# ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000012   DPID を 12 に設定
# ovs-vsctl get bridge br0 datapath-id       DPID を確認
"0000000000000012"
#

特に set 時に指定する datapath-id が 16 進数 16 桁であることが絶対である点に注意。 一桁でも不足があればコマンドは何ごともなく動作する(エラーメッセージがどこにも出ない)が、実際には反映されない。

状態確認

以下のように状態が確認できる。

# ovs-vsctl show
44469118-c2e7-4956-b985-7bcb0a23b20b
    Bridge "br0"
        Controller "tcp:127.0.0.1"
            is_connected: true
        Port "eth2"
            Interface "eth2"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth4"
            Interface "eth4"
        Port "eth1"
            Interface "eth1"   順不同に出ている
        Port "eth5"
            Interface "eth5"
        Port "eth3"
            Interface "eth3"
#

上記はethポートの情報などを端折っている。 他にも以下のようなコマンドで状態が確認できる。

ovs-dpctl show br0  スイッチ・ポートの情報(ovs-vsctl show と類似)
ovs-ofctl show br0   OpenFlow スイッチとしての情報(DPID含む)
ovs-ofctl dump-flows br0  フローテーブルの内容確認

動作前の注意

実際の稼働時には対象インタフェイスがすべて ifconfig up してあることに注意。 down であってもただ動作しないだけで何もエラーは出ない。
modprobe openvswitch_mod する必要がある点も注意。 自動ロードには /etc/modprobe.d/ 以下に bridge.conf でも作ればいいが、どのみち実験用で自動起動で困る場合もあるので手作業のままとする。


以上で Open vSwitch 1.4 をインストールし、テストする準備ができた。



Yutaka Yasuda (yasuda [ at ] ylb.jp)