しょんぼり技術メモ

まいにちがしょんぼり

kvm/RBD(RADOS Block Device) に成功した

長かった…

基本的には、wikiを参照。こいつの不正確な情報のせいで苦労したけど

コンフィグ

テスト用のコンフィグはこんな感じ。ceph1-3全てでMon, MDS, OSDを起動する。RBDだとMDSはいらないかも。

[global]
        debug ms = 0

[mon]
        mon data = /data/mon$id
        debug ms = 0
[mon0]
        host = ceph1
        mon addr = 192.168.101.41:6789
[mon1]
        host = ceph2
        mon addr = 192.168.101.42:6789
[mon2]
        host = ceph3
        mon addr = 192.168.101.43:6789

[mds]
        debug mds = 0
[mds0]
        host = ceph1
[mds1]
        host = ceph2
[mds2]
        host = ceph3

[osd]
        sudo = true
        osd data = /data/osd$id
        osd journal = /data/osd$id/journal
        osd journal size = 100
        debug osd       = 0
        debug filestore = 0
        osd class tmp = /var/lib/ceph/tmp
[osd0]
        host = ceph1
        btrfs devs = /dev/vdb
[osd1]
        host = ceph2
        btrfs devs = /dev/vdb
[osd2]
        host = ceph3
        btrfs devs = /dev/vdb

事前準備

gitでソースを持ってきてmakeした場合、/var/lib/ceph(/tmp)が存在しないので、予めceph1-3全てで作っておく。あるいは、osd class tmp = "..." で共通して存在するディレクトリを指定しても良い。

# mkdir -p /var/lib/ceph/tmp

RBDの準備作業

ここのコマンドは全てceph1(cephノード上)で実行。

まずはcephのコマンドを使ってOSDを初期化する。

# mkcephfs -c /usr/local/etc/ceph/ceph.conf --allhosts --mkbtrfs

んで起動。"--allhosts"を付けているので、勝手に全マシンで必要なデーモンが起動する。

# /etc/init.d/ceph -c /usr/local/etc/ceph/ceph.conf --allhosts start

次に、cephにrbdクラスをロードする。

# cclass -a
Loading class: /usr/local/lib/rados-classes/libcls_rbd.so.1.0.0: rbd 1.2 x86-64
read 304122 bytes from /usr/local/lib/rados-classes/libcls_rbd.so.1.0.0
10.10.01_15:37:11.288453 mon <- [class,add,rbd,1.2,x86-64,changed]
10.10.01_15:37:12.567040 mon1 -> 'updated' (0)

んで有効化。

# ceph class activate rbd 1.2
10.10.01_15:37:19.698959 mon <- [class,activate,rbd,1.2]
10.10.01_15:37:20.780942 mon1 -> 'updated' (0)

radosのプールを表示してみる。

# rados lspools
data
metadata
casdata
rbd

rbdを使う側の作業

ここからはrados/rbdを利用する側のマシンで。事前にwikiを見てパッチ適用版のqemu-kvm環境を作っておく。


で、実際にqemuで使えるイメージを作る。

# /usr/local/bin/qemu-img create -f rbd rbd:data/kvmtest 8G
Formatting 'rbd:data/kvmtest', fmt=rbd size=8589934592 cluster_size=0

あとはqemuへのオプションでこのrbdを指定して、いつも通りqemu-kvmを起動すればよい。

自分の環境では、次のようなオプションでFedora13のインストールに成功した。

#!/bin/bash
QEMU="/usr/local/bin/qemu-system-x86_64"
MEM=2048

$QEMU -boot d \
      -drive format=rbd,file=rbd:data/kvmtest \
      -cdrom "/root/vm/osimg/Fedora-13-x86_64-DVD.iso" \
      -m $MEM \
      -k ja \
      -usb \
      -usbdevice tablet \
      -localtime


んで、ざっと性能テスト。といっても、cephノードがどれもVMで動いているからアテになりません。誰か実機で試してくれないかなぁ。id:syuu1228とか[twitter:@syuu1228]とか。

・書き込み
# dd if=/dev/zero of=/out.dat bs=1M count=2048
2147483648 bytes (2.1 GB) copied, 464.509 s, 4.6MB/s

・読み出し
# dd if=/out.dat of=/dev/null bs=1M count=1024
1073741824 bytes (1.1 GB) copied, 96.7442 s, 11.1 MB/s

…ですよねー('A`)