2003年1月14日

network block deviceの実験

 

OBSSを使って題記の実験をしてみました。

修理から戻ってきてDebianをインストールしたOBSSをnbdのクライアントにして、
自宅LAN内のPentium4マシン(これもDebian)をnbdのサーバにしてみました。

また、それだけではおもしろくないので、nbdサーバ側は2つのサービスをあげて
それをsoftware RAID 1でmountしてみています(^^;


<サーバの設定>
まず、サーバ側の設定ですが、apt-get install nbd-serverの後の質問に答えますが、
最終的には/etc/nbd-serverを設定すればいいようです。
とりあえず、実験サーバでは下記のようにしています。


NBD_PORT[0]=7777
NBD_FILE[0]=/home/nbd-export1
#NBD_SERVER_OPTS[0] is unset, but can contain -r, -m, -c or -a.

NBD_PORT[1]=7778
NBD_FILE[1]=/home/nbd-export2
#NBD_SERVER_OPTS[1] is unset, but can contain -r, -m, -c or -a.

#See nbd-server(1) for their meanings
#
#If you don't want this file to be rewritten after installation or upgrade,
#uncomment the following line:
#AUTO_GEN=n


/home/nbd-export1と/home/nbd-export2は下記のようにして作っています。

# dd if=/dev/hda of=/home/nbd-export1 bs=2k count=1M
# cp /home/nbd-export1 /home/nbd-export2

その後、 /etc/init.d/nbd-server startでサービスが動き出します。
ps -axwwで見るとこんな感じ。


12512 ? S 0:00 /bin/nbd-server 7777 /home/nbd-export1
12513 ? S 0:00 /bin/nbd-server 7778 /home/nbd-export2
12514 ? S 0:24 /bin/nbd-server 7777 /home/nbd-export1
12515 ? S 0:26 /bin/nbd-server 7778 /home/nbd-export2

ちなみに、サーバのIPアドレスは192.168.0.100としています。


<クライアントの設定>
次にOBSS側でクライアントの設定です。
こちらもapt-get install nbd-clientの後の質問に答えますが、
設定ファイルは/etc/nbd-clientです。

実験マシンではこんな感じ。


# If you don't want to reconfigure this package after installing, uncomment
# the following line:
AUTO_GEN="n"
#
# Name of the first used nbd /dev-entry:
NBD_DEVICE[0]=/dev/nd0
#
# Type; s=swap, f=filesystem (with entry in /etc/fstab), r=raw (no other setup
# than to run the client)
NBD_TYPE[0]=f
#
# The host on which the nbd-server process is running
NBD_HOST[0]=192.168.0.100
#
# The port on which this client needs to connect
NBD_PORT[0]=7777
#
# The second networked block device could look like:
NBD_DEVICE[1]=/dev/nd1
NBD_TYPE[1]="f"
NBD_HOST[1]="192.168.0.100"
NBD_PORT[1]="7778"

/dev/nd0と/dev/nd1は以下のようにして作りました。
# mknod /dev/nd0 b 43 0
# mknod /dev/nd1 b 43 1

ここで/etc/init.d/nbd-client startでクライアントとして動き出しますが、
fsckが出来ないとか何とか文句を言われますが、無視して次へ(^^;

#file systemを作っていないから、文句言われて当然なので。


<クライアントでのsoftware RAIDの設定>
さらに、OBSS側でsoftware RAIDの設定をします。
apt-get install raidtools2を行った後に、/etc/raidtabを作ります。
実験OBSSでは以下のような感じ。


# raid-1 configuration
raiddev /dev/md0
raid-level 1
chunk-size 16
nr-raid-disks 2
nr-spare-disks 0

device /dev/nd0
raid-disk 0

device /dev/nd1
raid-disk 1

その後、
# mkraid /dev/md0
でうまく動けばサーバとクライアント間でネットワークのやりとりが発生し、
HUBのActiveランプが点滅を始めると思います。

これは、RAID1の構築(ディスク間の同期合わせ)を行っているためです。
この進み具合は cat /proc/mdstatを実行すればわかります。

同期合わせを行っているのもかまわずに(^^;、
# mke2fs /dev/md0
を行います。

#実はOBSをクライアントにした場合もやってみたのですが、
#このmke2fsでエラーになりました。原因調査予定。

同期合わせはこの間も進んでいますが、そのうち終わって/proc/mdstatを見ると
以下のようになるはずです。


Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 [dev 2b:01][1] [dev 2b:00][0]
2097088 blocks [2/2] [UU]

ここまで来たら(来る前でも良いのですが)、mountしてみましょう。
# mount -t ext2 /dev/md0 /mnt/

mount後のdfの結果はこんな感じです。


# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 38198332 25646976 10610960 71% /
/dev/md0 2064144 1362136 597156 70% /mnt

#70%にもなっているのは、すでにファイルをコピーした後だからです。
#ちゃんとしたコピー時間は計っていません(^^;


<考察>
この例では、通常のファイルシステムに使っていますが、
nbdはswapにも使えるようなので、CFだけで組んでいるOBSSでも
かなりいろんなことが出来るようになると思います。

また、今回は1台のサーバに対してsoftware RAID1にしていますが、
これを2台に分けるとか、片方をlocal device、もう片方をremote deviceに
するなど行えば、none shared storageタイプのactive-standby構成の
クラスタも組めるのではないかと思っています。

#OBSSでここまでやるべきかと言うと、ちょっと疑問ですが(^^;

今後はnfsとの性能比較などもしてみたいと思います。


<参考文献>
/usr/src/linux/Documentation/nbd.txt
http://www.it.uc3m.es/~ptb/nbd/