27 Ceph 做為 QEMU KVM 例項的後端 #
最常見的 Ceph 使用案例涉及到向虛擬機器提供區塊裝置影像。例如,在理想的組態中,使用者可以建立包含 OS 和所有相關軟體的「黃金」影像。然後,使用者可以建立該影像的快照。最後,使用者可以複製該快照 (通常要複製多次,如需詳細資料,請參閱第 20.3 節 「快照」)。能夠建立快照的寫入時複製複製品,就表示 Ceph 能夠快速向虛擬機器佈建區塊裝置影像,因為用戶端不需要在每次運轉新的虛擬機器時都下載整個影像。
Ceph 區塊裝置可與 QEMU 虛擬機器相整合。如需 QEMU KVM 的詳細資訊,請參閱 https://documentation.suse.com/sles/15-SP1/single-html/SLES-virtualization/#part-virt-qemu。
27.1 安裝 qemu-block-rbd
#
若要使用 Ceph 區塊裝置,需在 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 建立區塊裝置影像。必須指定 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
),但這會增加額外的負擔,如果啟用了快取,還會在即時移轉虛擬機器時讓磁碟區變得不安全。
27.4 使用 QEMU 調整影像大小 #
您可以透過 QEMU 調整區塊裝置影像的大小。必須指定 rbd
、池名稱,以及要調整大小的影像名稱。此外,還必須指定影像的大小。
qemu-img resize rbd:pool-name/image-name size
例如:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.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
27.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
如需 RBD 快取的詳細資訊,請參閱第 20.5 節 「快取設定」。
27.7 啟用丟棄和 TRIM #
Ceph 區塊裝置支援丟棄操作。這表示客體可以傳送 TRIM 要求,以便讓 Ceph 區塊裝置回收未使用的空間。可以透過結合丟棄選項掛接 XFS
,在客體中啟用此功能。
若要讓客體可使用此功能,必須明確為區塊裝置啟用此功能。為此,您必須指定與磁碟機關聯的 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>
27.8 設定 QEMU 快取選項 #
QEMU 的快取選項與以下 Ceph RBD 快取設定對應。
寫回:
rbd_cache = true
寫入:
rbd_cache = true rbd_cache_max_dirty = 0
無:
rbd_cache = false
QEMU 的快取設定會覆寫 Ceph 的預設設定 (未在 Ceph 組態檔案中明確指定的設定)。如果在 Ceph 組態檔案中明確指定了 RBD 快取設定 (請參閱第 20.5 節 「快取設定」),您的 Ceph 設定將會覆寫 QEMU 快取設定。如果您在 QEMU 指令行中指定了快取設定,則 QEMU 指令行設定會覆寫 Ceph 組態檔案設定。