QEMU3 - 使用ceph來存儲QEMU鏡像 原

ceph簡介

Ceph是一個PB級別的分佈式軟件定義存儲系統,爲用戶提供了塊存儲、對象存儲以及符合POSIX標準的文件系統接口。目前,Ceph已經成爲Openstack最受歡迎的後端存儲系統。下圖爲ceph的架構圖。

ceph架構圖

RADOS本身是一個對象存儲系統,實現了ceph的核心功能。Librados是ceph提供給各種編程語言的接口。RADOSGW,RBD,CEPH FS分別爲用戶提供了對象存儲、塊存儲及文件系統的功能。Ceph集羣及客戶端的安裝配置請參考Ceph官方文檔

使用Ceph來存儲QEMU鏡像

QEMU會假定ceph配置文件存放在默認位置/etc/ceph/$cluster.conf,也會使用client.admin作爲默認的ceph用戶。如果要指定其他的配置文件或者用戶,可以在ceph RBD的選項中添加conf=/home/ceph.conf或者id=admin選項。qemu-img使用ceph塊存儲RBD時,需要使用下面的格式:

qemu-img {command} [options] rbd:{pool-name}/{image-name}[@snapshot-name][:option1=value1][:option2=value2...] 

例如:

qemu-img {command} [options] rbd:glance-pool/maipo:id=glance:conf=/etc/ceph/ceph.conf 

創建一個鏡像

可以使用qemu-img命令在ceph集羣中創建一個虛擬機鏡像。需要指定rbd, pool,以及鏡像名。

qemu-img create -f raw rbd:{pool-name}/{image-name} {size} 

例如:

[root@ltczhp20 ~]# qemu-img create -f raw rbd:rbd/vmdisk1 4G

Formatting 'rbd:rbd/vmdisk1', fmt=raw size=4294967296
[root@ltczhp20 ~]# rbd ls
vmdisk1

qemu-img通常會指定RBD存儲的鏡像格式是RAW,這樣可以減少其他格式帶來的性能開銷,也會防止虛擬機熱遷移時緩存帶來的問題。

調整鏡像的大小

要調整鏡像大小,必須指定rbd,pool name,以及鏡像名。

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

例如:

[root@ltczhp20 ~]# qemu-img resize -f raw rbd:rbd/vmdisk1 2G

Image resized.
[root@ltczhp20 ~]# rbd ls
vmdisk1
[root@ltczhp20 ~]# rbd info vmdisk1
rbd image 'vmdisk1':
    size 2048 MB in 512 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.fa802ae8944a
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    flags:

如果不指定鏡像格式(-f raw),qemu會給出警告信息:

[root@ltczhp20 ~]# qemu-img resize rbd:rbd/vmdisk1 4G
WARNING: Image format was not specified for 'rbd:rbd/vmdisk1' and probing guessed raw.
         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
         Specify the 'raw' format explicitly to remove the restrictions.
Image resized.

獲取鏡像信息

獲取鏡像信息同樣需要指定rbd,pool name以及鏡像名:

qemu-img info rbd:{pool-name}/{image-name} 

例如:

[root@ltczhp20 ~]# qemu-img info rbd:rbd/vmdisk1

image: rbd:rbd/vmdisk1
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: unavailable
cluster_size: 4194304

使用qemu命令運行虛擬機

從QEMU0.15後,虛擬機使用ceph塊設備就不需要使用rbd map命令將RBD鏡像映射到本地了,QEMU可以通過librados直接訪問一個虛擬塊設備。這樣避免了額外的上下文切換,也充分利用了RBD的緩存功能。

在運行虛擬機之前,我們可以把一個已經存在的虛擬機鏡像轉化爲ceph RBD存儲,然後直接從RBD啓動虛擬機。

qemu-img convert -c -f fmt -O out_fmt -o options  fname out_fname 

例如:

[root@ltczhp20 ~]# qemu-img convert -f qcow2 -O raw /srv/fedora24/fedora24.qcow2 rbd:rbd/fedora

然後使用qemu命令運行虛擬機。

[root@ltczhp20 ~]# qemu-system-s390x -nographic -enable-kvm -m 4G -drive format=raw,file=rbd:rbd/fedora

RBD緩存會極大的提高虛擬機的性能。QEMU1.2之後,cache選項可以直接控制librbd:

[root@ltczhp20 ~]# qemu-system-s390x -nographic -enable-kvm -m 4G -drive format=raw,file=rbd:rbd/fedora,cache=writeback

在QEMU1.2之前,如果要使用RBD緩存,需要額外添加rbd_cache=true選項:

[root@ltczhp20 ~]# qemu-system-s390x -nographic -enable-kvm -m 4G -drive format=raw,file=rbd:rbd/fedora,cache=writeback,rbd_cache=true

如果指定了rbd_cache=true,一定要指定cache=writeback,否則QEMU不會給librbd發送flush請求,RBD之上的文件系統可能會被破壞。

使用ceph RBD的快照功能

創建一個鏡像快照sp0:

[root@ltczhp20 ~]# qemu-img snapshot -l rbd:rbd/fedora
[root@ltczhp20 ~]# qemu-img snapshot -c sp0 rbd:rbd/fedora
WARNING: Image format was not specified for 'rbd:rbd/fedora' and probing guessed raw.
         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
         Specify the 'raw' format explicitly to remove the restrictions.
[root@ltczhp20 ~]# qemu-img snapshot -l rbd:rbd/fedora
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
sp0       sp0                     20G 1970-01-01 01:00:00   00:00:00.000

啓動虛擬機,創建文件/root/hello.txt並寫入字符串"hello world",然後關閉虛擬機。

[root@ltczhp20 ~]# qemu-system-s390x -nographic -enable-kvm -m 4G -drive format=raw,file=rbd:rbd/fedora

In VM:

[root@localhost ~]# echo "hello world" >> /root/hello.txt
[root@localhost ~]# cat /root/hello.txt
hello world

[root@localhost ~]# halt

將虛擬機回滾到快照sp0,然後檢查是否存在/root/hello.txt文件,如果不存在則說明快照已經成功回滾。

[root@ltczhp20 ~]# qemu-img snapshot -a sp0 rbd:rbd/fedora

[root@ltczhp20 ~]# qemu-system-s390x -nographic -enable-kvm -m 4G -drive format=raw,file=rbd:rbd/fedora

In VM:

[root@localhost ~]# ls /root/hello.txt
ls: cannot access '/root/hello.txt': No such file or directory

[root@localhost ~]# halt

刪除快照:

[root@ltczhp20 ~]# rbd snap ls rbd/fedora
SNAPID NAME     SIZE
    22 sp0  20480 MB
[root@ltczhp20 ~]# qemu-img snapshot -d sp0 rbd:rbd/fedora
WARNING: Image format was not specified for 'rbd:rbd/fedora' and probing guessed raw.
         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
         Specify the 'raw' format explicitly to remove the restrictions.
[root@ltczhp20 ~]# rbd snap ls rbd/fedora
[root@ltczhp20 ~]# qemu-img snapshot -l rbd:rbd/fedora

閱讀原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章