OpenStackの新機能、Cinderを使う 5ページ

CinderのバックエンドストレージとしてNFSを利用する

 ボリュームを格納するストレージとしてNFSで公開されているディレクトリを利用することもできる。この場合、ボリュームはNFSで公開されているディレクトリ中にディスクイメージファイルとして作成され、1つのボリュームが1つのファイルに対応する。また、仮想マシンインスタンスを稼働させるホストは公開されているディレクトリをNFS経由でマウントしてディスクイメージファイルにアクセスする。

設定ファイルの編集

 バックエンドストレージにNFSを利用する場合でも、Cinderのインストールおよび設定については基本的な同じだ。ただし、/etc/cinder/cinder.confファイルについては下記の設定項目が追加で必要となる。

volume_driver = cinder.volume.nfs.NfsDriver
nfs_shares_config = /etc/cinder/shares.conf
nfs_mount_point_base = /var/lib/cinder/mnt

 「volume_driver」項目はCinderがボリュームの管理に使用するドライバを指定するもので、NFSを利用する場合は「cinder.volume.nfs.NfsDriver」を指定しておく。また、「nfs_shares_config」では利用するNFS共有ディレクトリを記述する設定ファイルのパスを、「nfs_mount_point_base」ではNFS共有ディレクトリをマウントするディレクトリを指定する。この例では、設定ファイルとして「/etc/cinder/shares.conf」を、NFS共有ディレクトリのマウント先に「/var/lib/cinder/mnt」を指定している。

使用するNFS共有ディレクトリの設定

 続いて、/etc/cinder/shares.confファイルを作成し、使用するNFS共有ディレクトリを「<ホスト名>:<ディレクトリ>」という形で記述しておく。たとえば192.168.100.21というホスト上の「/var/nfs/openstack-volumes」というディレクトリを使用する場合、以下のように記述する。

192.168.100.21:/var/nfs/openstack-volumes

 ここで指定したNFS共有ディレクトリは仮想マシンを稼働させるホストからマウントできるよう設定されている必要がある。たとえば今回の例では、NFS共有ディレクトリを提供するホストのexportsファイルに下記のように記述し、同じネットワーク内のすべてのホストからアクセスできるように設定している。

/var/nfs/openstack-volumes 192.168.100.0/24(rw,all_squash,sync)

rootwrap.dの設定

 前述のとおり、Cinderの各種サービスはsudoコマンドを利用して一部の操作をroot権限で実行する。root権限で実行されるコマンドについては、/usr/share/cinder/rootwrap/ディレクトリおよび/etc/cinder/rootwrap.d/ディレクトリ以下に配置されたファイルに記述されているのだが、EPELで提供されているopenstack-cinderパッケージの場合、NFSを利用するための一部の設定が不足している。そのため、下記の操作を行って設定を追加しておく必要がある。

 まず、/etc/cinder/rootwrap.d/ディレクトリを作成する。

# mkdir /etc/cinder/rootwrap.d/

 続いて、このディレクトリ内にvolume.filtersというファイルを作成し、次の内容を記述しておく。

[Filters]

# cinder/volume/nfs.py
stat: CommandFilter, /usr/bin/stat, root
mount: CommandFilter, /bin/mount, root
df: CommandFilter, /bin/df, root
truncate: CommandFilter, /usr/bin/truncate, root
chmod: CommandFilter, /bin/chmod, root
rm: CommandFilter, /bin/rm, root

 また、念のためパーミッションの変更もしておこう。

# chgrp -R cinder rootwrap.d

 以上でCinder側の設定は完了だ。なお、バックエンドストレージにNFSを利用する場合、仮想マシンを稼働させるホストが使用するNFS共有ディレクトリをマウントできる必要がある。そのため、適切にファイアウォールの設定も行っておこう。

Nova側の設定

 CinderのバックエンドとしてNFSを利用する場合でも、Nova側の設定はLVMを利用する場合と基本的に同じだ。ただし、デフォルトの設定ではNFS用のドライバを読み込まない設定になっているため、nova.confに次の1行を追加しておく必要がある。

libvirt_volume_drivers = "iscsi=nova.virt.libvirt.volume.LibvirtISCSIVolumeDriver,local=nova.virt.libvirt.volume.LibvirtVolumeDriver,fake=nova.virt.libvirt.volume.LibvirtFakeVolumeDriver,rbd=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,sheepdog=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,nfs=nova.virt.libvirt.volume_nfs.NfsVolumeDriver"

 以上で、novaコマンドを使ってボリュームを作成したり、仮想マシンインスタンスとボリュームの接続が可能になるはずだ。

今後はnova-volumeの代わりにCinderの利用が推奨となる

 2012年の春にリリースされているOpenStackの新版(コードネーム「Grizzly」)でもCinderには大きな変更は加えられない模様だが、今後セキュアなアタッチ機能やバックアップAPIの提供、ボリュームのクローン機能、ボリュームのリサイズ機能、起動ボリュームのメタデータ保持といった機能の追加が検討されているようだ。

 さらにOpenStackでは今後、nova-volumeの廃止が予定されており、ボリュームストレージサービスとしてはCinderを利用することが推奨となっている。そのため、新たにOpenStack環境を構築する際はCinderを利用するようにしておこう。