Ceph是一個PB級別的分佈式軟件定義存儲系統,爲用戶提供了塊存儲、對象存儲以及符合POSIX標準的文件系統接口。目前,Ceph已經成爲Openstack最受歡迎的後端存儲系統。下圖爲ceph的架構圖。編程
RADOS自己是一個對象存儲系統,實現了ceph的核心功能。Librados是ceph提供給各類編程語言的接口。RADOSGW,RBD,CEPH FS分別爲用戶提供了對象存儲、塊存儲及文件系統的功能。Ceph集羣及客戶端的安裝配置請參考Ceph官方文檔。後端
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...] bash
例如:架構
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} 性能
例如:spa
[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,這樣能夠減小其餘格式帶來的性能開銷,也會防止虛擬機熱遷移時緩存帶來的問題。.net
要調整鏡像大小,必須指定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
從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之上的文件系統可能會被破壞。
建立一個鏡像快照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