适用于 SUSE Enterprise Storage 5

17 Ceph 用作 QEMU KVM 实例的后端

最常见的 Ceph 用例涉及到向虚拟机提供块设备映像。例如,在理想的配置中,用户可以创建包含 OS 和所有相关软件的“黄金”映像。然后,用户可以创建该映像的快照。最后,用户可以克隆该快照(通常要克隆多次,有关详细信息,请参见第 8.3 节 “块设备快照”)。能够创建快照的写入时复制克隆,就意味着 Ceph 能够快速向虚拟机供应块设备映像,因为客户端不需要在每次运转新的虚拟机时都下载整个映像。

Ceph 块设备可与 QEMU 虚拟机集成。有关 QEMU KVM 的详细信息,请参见 https://www.suse.com/documentation/sles-12/book_virt/data/part_virt_qemu.html

17.1 安装

要使用 Ceph 块设备,需在 QEMU 上安装相应的驱动程序。请检查是否已安装 qemu-block-rbd 包,并根据需要予以安装:

sudo zypper install qemu-block-rbd

17.2 用法

使用 QEMU 命令行时,您需要指定存储池名称和映像名称。您也可以指定快照名称。

qemu-img command options \
rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...

例如,可按如下所示指定 idconf 选项:

qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf

17.3 使用 QEMU 创建映像

可以通过 QEMU 创建块设备映像。必须指定 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
重要
重要

事实上,raw 数据格式是可对 RBD 使用的唯一合理格式选项。从技术上讲,您也可以使用 QEMU 支持的其他格式(例如 qcow2),但这会增加额外的开销,如果启用了快速缓存,还会在实时迁移虚拟机时让卷变得不安全。

17.4 使用 QEMU 调整映像大小

可以通过 QEMU 调整块设备映像的大小。必须指定 rbd、存储池名称,以及要调整大小的映像的名称。此外,必须指定映像的大小。

qemu-img resize rbd:pool-name/image-name size

例如:

qemu-img resize rbd:pool1/image1 9G
Image resized.

17.5 使用 QEMU 检索映像信息

可以通过 QEMU 检索块设备映像的信息。必须指定 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

17.6 使用 RBD 运行 QEMU

QEMU 可以通过 librbd 直接将映像作为虚拟块设备来访问。这可以避免额外的环境切换,并可利用 RBD 快速缓存的优势。

您可以使用 qemu-img 将现有的虚拟机映像转换成 Ceph 块设备映像。例如,如果您有一个 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

17.7 启用丢弃功能/TRIM

Ceph 块设备支持丢弃操作。这意味着,guest 可以发送 TRIM 请求,让 Ceph 块设备回收未使用的空间。可以通过结合 discard 选项挂载 XFS,在 guest 中启用此功能。

要让 guest 可使用此功能,必须为块设备显式启用此功能。为此,您必须指定与驱动器关联的 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 驱动程序不支持丢弃功能。

如果使用 libvirt,请使用 virsh edit 编辑 libvirt 域的配置文件,以包含 xmlns:qemu 值。然后,将 qemu:commandline block 添加为该域的子级。下面的示例说明如何将包含 qemu id= 的两个设备设置为不同的 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>

17.8 QEMU 快速缓存选项

QEMU 的快速缓存选项与以下 Ceph RBD 快速缓存设置对应。

写回:

rbd_cache = true

直写:

rbd_cache = true
rbd_cache_max_dirty = 0

无:

rbd_cache = false

QEMU 的快速缓存设置会覆盖 Ceph 的默认设置(未在 Ceph 配置文件中显式指定的设置)。如果在 Ceph 配置文件中显式指定了 RBD 快速缓存设置,则您的 Ceph 设置会覆盖 QEMU 快速缓存设置。如果在 QEMU 命令行中指定了快速缓存设置,则 QEMU 命令行设置会覆盖 Ceph 配置文件设置。

打印此页