注意
本文档适用于 Ceph 开发版本。
QEMU 和块设备
最常见的Ceph块设备用例涉及向虚拟机提供块设备镜像。例如,用户可以创建一个包含操作系统和相关软件的理想配置的“黄金”镜像。然后用户对镜像进行快照。最后用户克隆快照(可能多次)。详情请参见快照。能够对快照进行写时复制克隆意味着Ceph可以快速向虚拟机提供块设备镜像,因为客户端每次启动新的虚拟机时都不必下载整个镜像。
Ceph块设备连接到QEMU虚拟机。有关QEMU的详细信息,请参见QEMU开源处理器模拟器。有关QEMU文档,请参见QEMU手册。有关安装详细信息,请参见安装.
重要
要使用Ceph块设备与QEMU,您必须能够访问正在运行的Ceph集群。
查看当前由 cephadm 使用的文件模板。
QEMU命令行要求您指定Ceph池和镜像名称。您还可以指定一个快照。
QEMU将假定Ceph配置位于默认位置(例如,/etc/ceph/$cluster.conf
),并且除非您明确指定另一个Ceph配置文件路径或另一个用户,否则您正在以默认client.admin
用户执行命令。当指定用户时,QEMU使用ID
而不是完整TYPE:ID
。有关网络配置的详细信息,请参阅用户管理 -的详细信息。不要在用户client.
),否则您将收到身份验证错误。您应该在默认路径存储的密钥环文件中具有ID
前面添加客户端类型(即,admin
用户或您使用:id={user}
选项指定的另一个用户的密钥。用法如下:/etc/ceph
or the local directory with appropriate file ownership and
permissions. Usage takes the following form:
qemu-img {command} [options] rbd:{pool-name}/{image-name}[@snapshot-name][:option1=value1][:option2=value2...]
例如,指定id
和conf
选项可能如下所示:
qemu-img {command} [options] rbd:glance-pool/maipo:id=glance:conf=/etc/ceph/ceph.conf
提示
包含:
, @
或=
的配置值可以用一个\
字符进行转义。
使用QEMU创建镜像
您可以从QEMU创建一个块设备镜像。您必须指定rbd
,池名称以及您希望创建的镜像的名称。您还必须指定镜像的大小。
qemu-img create -f raw rbd:{pool-name}/{image-name} {size}
例如:
qemu-img create -f raw rbd:data/foo 10G
重要
The raw
数据格式是与RBD一起使用的唯一合理的format
选项。技术上,您可以使用其他qcow2
或vmdk
格式,但这样做会增加额外的开销,并且还会在启用缓存(见下文)时使卷对虚拟机实时迁移不安全。
使用QEMU调整镜像大小
您可以从QEMU调整块设备镜像的大小。您必须指定rbd
,池名称以及您希望调整的镜像的名称。您还必须指定镜像的大小。
qemu-img resize rbd:{pool-name}/{image-name} {size}
例如:
qemu-img resize rbd:data/foo 10G
使用QEMU获取镜像信息
您可以从QEMU获取块设备镜像信息。您必须指定rbd
,池名称以及镜像的名称。
qemu-img info rbd:{pool-name}/{image-name}
例如:
qemu-img info rbd:data/foo
使用RBD运行QEMU
QEMU可以将主机上的块设备传递给客机,但由于QEMU 0.15,无需在主机上将镜像映射为块设备。相反,QEMU通过librbd
直接将镜像作为虚拟块设备附加到客机。这种策略通过避免上下文切换并利用RBD缓存.
You can use qemu-img
将现有的虚拟机镜像转换为Ceph块设备镜像来提高性能。例如,如果您有一个qcow2镜像,您可以运行:
qemu-img convert -f qcow2 -O raw debian_squeeze.qcow2 rbd:data/squeeze
要运行从该镜像启动的虚拟机,您可以运行:
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze
RBD缓存可以显著提高性能。自QEMU 1.2以来,QEMU的缓存选项控制librbd
缓存:
qemu -m 1024 -drive format=rbd,file=rbd:data/squeeze,cache=writeback
如果您有较旧版本的QEMU,您可以设置librbd
缓存配置(如任何Ceph配置选项)作为“文件”参数的一部分:
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze:rbd_cache=true,cache=writeback
重要
如果您设置rbd_cache=true,您必须设置cache=writeback,否则有数据丢失的风险。如果没有cache=writeback,QEMU不会向librbd发送刷新请求。如果QEMU在这种配置下不正常退出,则可以损坏rbd之上的文件系统。
启用丢弃/TRIM
自Ceph版本0.46和QEMU版本1.1以来,Ceph块设备支持丢弃操作。这意味着客机可以向Ceph块设备发送TRIM请求,以回收未使用的空间。这可以通过挂载ext4
或XFS
使用discard
option.
在客机中启用。为此,必须为驱动程序指定一个discard_granularity
。注意,这使用IDE驱动程序。virtio驱动程序自Linux内核版本5.0起支持丢弃。
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
Note that this uses the IDE driver. The virtio driver supports discard since Linux kernel version 5.0.
如果使用libvirt,请使用virsh
edit
编辑您的libvirt域的配置文件以包含xmlns:qemu
值。然后,将一个qemu:commandline
块作为该域的子项添加。以下示例显示了如何使用qemu id=
将两个设备设置为不同的discard_granularity
值的 OSD 的池中可能会出现意外的平衡器行为。
<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>
QEMU缓存选项
QEMU的缓存选项对应于以下CephRBD缓存设置。
写回:
rbd_cache = true
写透:
rbd_cache = true
rbd_cache_max_dirty = 0
无:
rbd_cache = false
QEMU的缓存设置会覆盖Ceph的缓存设置(包括在Ceph配置文件中明确设置的设置)。
Note
在QEMU v2.4.0之前,如果您在Ceph配置文件中明确设置RBD缓存设置,则您的Ceph设置会覆盖QEMU的缓存设置。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.