27 QEMU KVMインスタンスのバックエンドとしてのCephの使用 #
Cephの最も一般的な使用事例として、仮想マシンにBlock Deviceイメージを提供することがあります。たとえば、理想的な設定のOSと関連ソフトウェアを使用して「ゴールデン」イメージを作成できます。続いて、そのイメージのスナップショットを作成します。最後に、スナップショットのクローンを作成します(通常は複数回。詳細については、20.3項 「スナップショット」を参照してください)。スナップショットのコピーオンライトクローンを作成できるということは、新しい仮想マシンを起動するたびにクライアントがイメージ全体をダウンロードしないで済むため、CephはBlock Deviceイメージを仮想マシンに素早くプロビジョニングできることを意味します。
Ceph Block DeviceをQEMU仮想マシンと統合できます。QEMU KVMの詳細については、https://documentation.suse.com/sles/15-SP1/single-html/SLES-virtualization/#part-virt-qemuを参照してください。
27.1 qemu-block-rbd
のインストール #
Ceph Block Deviceを使用するには、QEMUに適切なドライバがインストールされている必要があります。qemu-block-rbd
パッケージがインストールされているかどうかを確認し、必要に応じてインストールします。
#
zypper install qemu-block-rbd
27.2 QEMUの使用 #
QEMUのコマンドラインで、プール名とイメージ名を指定する必要があります。スナップショット名も指定できます。
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
たとえば、idおよびconfのオプションを指定すると、次のようになります。
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 QEMUでのイメージの作成 #
QEMUからBlock Deviceイメージを作成できます。rbd
、プール名、および作成するイメージの名前を指定する必要があります。イメージのサイズも指定する必要があります。
qemu-img create -f raw rbd:pool-name/image-name size
例:
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
RBDで使用するフォーマットオプションとして実用的なものは、実際のところraw
データフォーマットだけです。技術的には、qcow2
などQEMUでサポートされている他のフォーマットを使用できますが、そうするとオーバーヘッドが追加されるほか、キャッシングが有効な場合に、仮想マシンのライブマイグレーションにおいてボリュームが不安定になります。
27.4 QEMUでのイメージのサイズ変更 #
QEMUからBlock Deviceイメージのサイズを変更できます。rbd
、プール名、およびサイズを変更するイメージの名前を指定する必要があります。イメージのサイズも指定する必要があります。
qemu-img resize rbd:pool-name/image-name size
例:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 QEMUでのイメージ情報の取得 #
QEMUからBlock Deviceイメージの情報を取得できます。rbd
、プール名、およびイメージの名前を指定する必要があります。
qemu-img info rbd:pool-name/image-name
例:
qemu-img info rbd:pool1/image1 image: rbd:pool1/image1 file format: raw virtual size: 9.0G (9663676416 bytes) disk size: unavailable cluster_size: 4194304
27.6 RBDでのQEMUの実行 #
QEMUは、librbd
を介して仮想Block Deviceとしてイメージに直接アクセスできます。これにより、追加のコンテキストスイッチを避け、RBDキャッシングを利用できます。
qemu-img
を使用して、既存の仮想マシンイメージをCeph Block Deviceイメージに変換できます。たとえば、qcow2イメージがある場合、次のコマンドを実行できます。
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
そのイメージから仮想マシンの起動を実行するには、次のコマンドを実行できます。
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
RBDキャッシングはパフォーマンスを大幅に向上できます。QEMUのキャッシュオプションでlibrbd
のキャッシングを制御します。
#
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
RBDキャッシングの詳細については、20.5項 「キャッシュの設定」を参照してください。
27.7 discardおよびTRIMの有効化 #
Ceph Block Deviceはdiscard操作をサポートしています。つまり、ゲストはTRIM要求を送信してCeph Block Deviceに未使用領域を解放させることができます。ゲストでこれを有効にするには、discardオプションを指定してXFS
をマウントします。
ゲストがこれを利用できるようにするには、Block Deviceに対して明示的に有効にする必要があります。このためには、ドライブに関連付けられているdiscard_granularity
を指定する必要があります。
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
上の例では、IDEドライバを使用しています。virtioドライブはdiscardをサポートしません。
libvirt
を使用する場合、virsh edit
を使用してlibvirtドメインの設定ファイルを編集し、xmlns:qemu
の値を含めます。その後、qemu:commandline block
をそのドメインの子として追加します。次の例に、qemu id=
を使用して2台のデバイスを異なるdiscard_granularity
の値に設定する方法を示します。
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <qemu:commandline> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/> </qemu:commandline> </domain>
27.8 QEMUのキャッシュオプションの設定 #
QEMUのキャッシュオプションは、次のCeph RBDキャッシュ設定に対応します。
ライトバック:
rbd_cache = true
ライトスルー:
rbd_cache = true rbd_cache_max_dirty = 0
None:
rbd_cache = false
QEMUのキャッシュ設定は、Cephのデフォルト設定(Cephの設定ファイルで明示的に設定されていない設定)を上書きします。Cephの設定ファイルでRBDキャッシュ設定を明示的に設定した場合(20.5項 「キャッシュの設定」を参照)、Cephの設定がQEMUのキャッシュ設定を上書きします。QEMUのコマンドラインでキャッシュ設定を行った場合、QEMUのコマンドラインの設定がCephの設定ファイルの設定を上書きします。