目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Enterprise Storage 7.1マニュアル / 運用と管理ガイド / 仮想化ツールとの統合 / QEMU KVMインスタンスのバックエンドとしてのCephの使用
適用項目 SUSE Enterprise Storage 7.1

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の設定ファイルの設定を上書きします。