Cinder+Ceph を構築する際に、最も困った点が libvirtd のエラーログで、とても見当違いなログで原因が全然違いましたー!ということが何度かありました。
中でも、Debian WheezyのKVMがRBD対応していなかった、という境地にたどり着くまで非常に精神と時間を投入したので記しておきたいと思います。
libvirtdのエラー
前回の構築手順において、Cinderボリュームの作成まではわりと簡単に成功するのですが、VMへのアタッチで引っかかることがあります。アタッチの処理の流れは大雑把にこんな感じです。
失敗する場合は様々な原因が考えられるのですが、どのような原因にしろ libvirtd がこのようなエラーログを吐くため、本来の原因に考えがたどり着き辛い内容となっています。
1 2 3 4 5 |
CommandNotFound: The command drive_add has not been found qemuMonitorJSONAddDrive:3091 : drive_add command not found, trying HMP could not open disk image rbd:volumes/volume-b1a... |
・・・コマンドが無ぇ!で一括りにしてんじゃねぇよと。前回書いた、CephAuth+libvirtdの鍵の不一致でもこのようなログになり、非常にわかりづらいです。
QEMU KVMのRBD有効化
KVMがRBD有効か確かめる
私の場合Debianで構築しており、どーーーしてもアタッチできなくて苦しみましたが、やけになってRBDにOSイメージを作ってみようとすると、RBDフォーマット非対応です とエラーが出たため、
1 2 3 4 5 6 7 8 |
# ここでRBD非対応と出たらリビルドへ qemu-img create -f rbd rbd:volumes/test 1G # エラー出力 qemu-img: Unknown file format 'rbd' # 成功したらお掃除して終わり rbd --pool volumes ls rbd --pool volumes rm test |
qemu-kvm が –disable-rbd 状態だったことに気づけました。
もっとスマートな確認方法があるかもしれませんが、とりあえずこれで・・・
リビルド準備
簡単にリビルド手順を記載しておきます。
1 2 3 4 5 |
# debuildコマンドインストール apt-get install devscripts # RBDライブラリのインストール apt-get install librbd-dev librados-dev |
QEMUのリビルド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# qemuソースダウンロード mkdir /usr/local/src/qemu cd /usr/local/src/qemu apt-get source qemu cd qemu-1.1.2+dfsg/ # Build-Depends インストール apt-get install \ nasm device-tree-compiler libfdt-dev libx11-dev libsdl1.2-dev \ texi2html libbrlapi-dev libpulse-dev libcurl4-gnutls-dev libgnutls-dev \ libsasl2-dev uuid-dev libvdeplug2-dev libasound2-dev libbluetooth-dev \ libattr1-dev libcap-dev libgpmg1-dev libaio-dev xfslibs-dev libspice-server-dev \ libspice-protocol-dev libxen-dev libiscsi-dev libusbredirparser-dev # ビルド # - 特にrulesを変更しなくても librbd と librados があれば --enable-rbd になる debuild --source-option=--include-binaries # そのまま動作確認 # - RBDに書き込めればOK ./debian/tmp/usr/bin/qemu-img create -f rbd rbd:volumes/new-image 2G rbd --pool volumes rm new-image # 依存入れて apt-get install \ openbios-ppc openbios-sparc openhackware \ libfdt1 libgl1-mesa-glx libxen-4.1 \ libdrm2 libglapi-mesa libxcb-glx0 libxxf86vm1 # 上書きインストール cd ../ dpkg -i qemu-*.deb |
QEMU KVMのリビルド
1 2 3 4 5 6 7 8 9 10 11 12 |
# qemuソースダウンロード mkdir /usr/local/src/qemu-kvm cd /usr/local/src/qemu-kvm apt-get source qemu-kvm cd qemu-kvm-1.1.2+dfsg/ # ビルド debuild --source-option=--include-binaries -d # 上書きインストール cd ../ dpkg -i qemu-kvm_1.1.2+dfsg-6_amd64.deb |
動作確認
/usr/bin/kvm が新しくなったところで、nova boot でVMを新規に作成し、nova volume-attach してみてください。成功したら、Horizonからも試してみて完了です。リンク
・・・という感じで、RBD対応されればいいですね、と。
OpenStackの構築で苦しんだわけですが、この問題を解決するのにOpenStackを利用したというのが面白く。
Debianのqemu-kvmに当たりをつけたタイミングで、Debian の qemu-kvm source の configure や rules を眺めたのは当然ですが、TL上でUbuntuでは普通にアタッチできたと聞いて、UbuntuのQEMUパッケージも確認したりしたわけです。その時のUbuntuは、目の前のOpenStack上で起動して、仮想環境で試したという・・・おぉ、Ubuntu qemu-kvm は rbd 使えそうじゃないか!と。
そんなわけで最大の難所を越えてそろそろ実際に本番稼働しそうですが、
まだまだ構築メモが溜まっていてなかなか書き切れそうにありません!