Open vSwitch インストール

Open vSwitch をインストールする


手順確認

http://openvswitch.org/support/ の、

General Instructions
・Overview of functionality and components
・ Building and Installing Open vSwitch
・Configuration Cookbook (overview of common configuration tasks)

の二番目「How to Install Open vSwitch on Linux」を見ながらやる。

事前準備

ハードウェアは HP pavilion, Intel CPU。 Arista に適用する目論見もあったので Fedora 12 をインストール。 iptables, ipv6tables, sendmail などは外した。 NetworkManager も外した。 Linux Bridge は動作していてはいけないので lsmod | grep bridge して存在するようなら rmmod bridge して落としてしまう。 逆に TUN/TAP モジュールを利用するので、lsmod | grep tun して存在しなければ modprobe tun して起動しておく。

NIC を三枚入れている。 Open vSwitch の管理対象ポートは eth0, 1, 3 の追加した NIC のみとする。 (青い点線部分が Open vSwitch と考えれば良い。) オンボードの eth2 はこの PC 自体の作業のためだけに利用する。

インストール作業

How to Install Open vSwitch on Linux を見ながら作業。

./boot.sh

実行すると autoconf - fc12 のものは古く 2.64 以降でないとだめというので rpm.pbone.net や rpmfind で適当に捜して fedora 13 の 2.65 を入れる。 コマンドは rpm -Uvh xxxxxxx.rpm でやった。 これで再度 boot.sh 実行すると正常終了。

./configure, make, make install
いずれも正常終了。
/usr/local/bin/ovsdb-client
/usr/local/bin/ovsdb-tool
/usr/local/sbin/ovsdb-server
などの存在を確認。

OpenFlow スイッチとしての注意

Open Flow で動作させる場合、Open vSwitch は最終的にはほとんどその機能を利用しないで、Open vSwitch に付いてくる openflow daemon (ovs-openflowd) が全てを処理する。 (なんとなれば OpenFlow switch として利用する際には ovs-vswitchd は起動させない(起動していてはいけない)。) せいぜいブリッジやポート情報を登録している DBMS から得る程度の模様。 そして更に userspace で動作させる場合には、この DBMS とも相談しない。つまり DB のなかにブリッジやポートを登録する必要はない。 (なお userspace モードの場合 ovsdb-server は動作していても良いが、参照はされない。) そのため本来はこれ以降にトライしている Open vSwitch として正しく機能することの調査は OpenFlow スイッチとして機能させるためにはそもそも必要ない作業である点に注意されたい。
OpenFlow スイッチとして動作させるだけなら、Open vSwitch のセットアップはここまでにして次の NOX インストールの段階に進めばよい。

(非 OpenFlow スイッチとしての)Open vSwitch の動作確認と設定

userspace モードでのブリッジ設定

今回 userspace で動作させようとしているため、bridge の登録に特殊な設定が必要。 まず Open vSwitch の配布ファイルにある INSTALL.Linux ファイルに記述あり。

If you cannot build or install the kernel module, you may use the
userspace-only implementation, at a cost in performance.  The
userspace implementation may also lack some features.  Refer to
INSTALL.userspace for more information.

というので同じく配布ファイルにある INSTALL.userspace を見る。

=== INSTALL.userspace ドキュメント参照はじまり ===

・TUN/TAP が必要だそうだが、Arista には入ってる。
[admin@localhost ~]$ ls /sys/class/misc/tun
dev  subsystem	uevent
[admin@localhost ~]$ lsmod |grep tun
tun                     8450  0 
[admin@localhost ~]$ 

Fedora 12は標準的には tun をロードしないが modprobe tun とするとちゃんと insmod された。
/dev/net/tun も要るらしいが Arsita, Fedora12 共にあり。

で、userspace で動作させるためには以下のようにして datapath_type "netdev" でブリッジを作るんだそうだ。
    ovs-vsctl add-br br0
    ovs-vsctl set bridge br0 datapath_type=netdev
    ovs-vsctl add-port br0 eth0
    ovs-vsctl add-port br0 eth1
    ovs-vsctl add-port br0 eth2
へええ。

なお openflowd で使うときは以下の点にも注意だそうで。
To use ovs-openflowd in userspace mode, specify a datapath name that
begins with "netdev@", and specify --ports with the names of the ports
that should be included in the datapath as argument.  For example:
    ovs-openflowd netdev@br0 --ports=eth0,eth1,eth2
ovs-openflowd will create a TAP device as the bridge's local
interface, named the same as the bridge minus the "netdev@" prefix.

この ports オプションの意味については ovs-openflowd のマニュアルに記述あり。
--ports オプションの説明に
「普通ポートは外部のDB から調べるが、userspace では全てを openflowd の中で処理してしまうので(ここでやる)」
とある。結局この方法で正しく、またこれしか userspace でポートを認識させる方法はない。
(逆に言うと上記 add-br, add-port は Open vSwitch としては必要だが、openflowd を userspace モードで利用する限り不要である。)


=== INSTALL.userspace ドキュメント参照おわり ===
設定データベースなど初期化
% mkdir -p /usr/local/etc/openvswitch
% ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

結果、
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
Jul 19 09:25:15|00001|lockfile|INFO|/usr/local/etc/openvswitch/.conf.db.~lock~: lock file does not exist, creating
Jul 19 09:25:15|00002|lockfile|WARN|/usr/local/etc/openvswitch/.conf.db.~lock~: waited 1 ms for lock file
# 
.....
# ls -la /usr/local/etc/openvswitch/
total 20
drwxr-xr-x. 2 root root 4096 2011-07-19 09:25 .
drwxr-xr-x. 3 root root 4096 2011-07-19 09:24 ..
-rw-r--r--. 1 root root 8699 2011-07-19 09:25 conf.db
-rw-------. 1 root root    0 2011-07-19 09:25 .conf.db.~lock~
# 
となった。
DB サーバの起動
次にDB サーバの起動。SSL なし版でやってみた。
# 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
結果、
# ps -ef | grep ovs
root      7977     1  0 09:27 ?        00:00:00 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
root      7979  2409  0 09:27 pts/1    00:00:00 grep ovs
#
となり、プロセス一つだけ上がった。
sock ファイルも
# ls -l /usr/local/var/run/openvswitch/db.sock 
srwx------. 1 root root 0 2011-07-19 09:27 /usr/local/var/run/openvswitch/db.sock
# file /usr/local/var/run/openvswitch/db.sock
/usr/local/var/run/openvswitch/db.sock: socket
#
とできている。
DB の初期化
次に DB の初期化。
# ovs-vsctl --no-wait init
実行したところ何も反応見えず。正常終了した?
スイッチデーモンの起動
スイッチデーモンの起動。(ローカル起動しているスイッチと接続)

# ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --pidfile --detach 
Jul 19 09:32:19|00001|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
Jul 19 09:32:19|00002|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected
Jul 19 09:32:19|00003|dpif_linux|ERR|Generic Netlink family 'odp_datapath' does not exist. The Open vSwitch kernel module is probably not loaded.
Jul 19 09:32:19|00004|dpif|WARN|failed to enumerate system datapaths: No such file or directory
#
と、エラーになった。カーネルモジュールは組み込んでないのでそれでいいのか?プロセスを見ると、
# ps -ef | grep ovs
root      7977     1  0 09:27 ?        00:00:00 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
root      7987     1  0 09:32 ?        00:00:00 ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --pidfile --detach
root      7990  2409  0 09:32 pts/1    00:00:00 grep ovs
#
となっており、open vSwitch daemon 自体は上がっている。
# ovs-vsctl list-br
#
で、ブリッジ一覧を見ようとすると何も無し、エラーも無し、なので合ってるのか?
ブリッジ、ポートの登録
ブリッジ、ポートを設定する。
# ovs-vsctl list-br		<< ブリッジ一覧を出せ
# 			<< 何も表示無し
# ovs-vsctl add-br br0	<< ブリッジを登録
# ovs-vsctl set bridge br0 datapath_type=netdev   << userspace モードでだけ必要(上述)
# ovs-vsctl list-br		<< 一覧を出せ
br0		<< 登録された
# ovs-vsctl list-ports br0	<< br0 のポート一覧を出せ
#			<< 登録なし
# ovs-vsctl add-port br0 eth0	<< eth0 を登録
# ovs-vsctl list-ports br0	<< ポート一覧を出せ
eth0		<< 登録された
# ovs-vsctl add-port br0 eth1	<< eth1 を登録
# ovs-vsctl list-ports br0	<< 一覧確認
eth0
eth1		<< 追加されている
# 

この状態で ifup eth0 ; ifup eth1 などしてインタフェイスを UP 状態にしてやるとパケットの交換をはじめる。
上の図にあったように eth3 も add-port してやると、接続された PC は正しく上流のインターネット接続線から DHCP などをもらってきた。

なお、OpenFlow を利用しないのであれば、eth2 (この Open vSwitch を動作させているホスト自身のインターネット接続をまかなっているオンボードの NIC)を add-port することに問題はない。
終了
DBMS, Open vSwitch ともに落とすには以下のようにする。
% kill `cd /usr/local/var/run/openvswitch && cat ovsdb-server.pid ovs-vswitchd.pid`

以上で Open vSwitch のインストールは終了。 割と素直で、どこでも build できる印象。



Yutaka Yasuda (yasuda [ at ] ylb.jp)
77149@guoguo0525.net
xg77149@guoguo0525.net