塊存儲簡稱RBD(RADOS Block Device),是一種有序的字節序塊,也是在Ceph三大存儲類型中最爲經常使用的存儲方式 ,Ceph的塊存儲是基於RADOS的,所以它也藉助RADOS的快照、複製和一致性等特性提供了快照、克隆和備份等操做。Ceph的塊設備是一種精簡置備模式,能夠拓展塊存儲的大小且存儲的數據以條帶化的方式存儲到Ceph集羣中的多個OSD中。html
訪問塊存儲的方式有兩種,分別是KRBD的方式和librbd的方式。後端
KRBD是Kernel RADOS Block Device的簡稱,它是經過Kernel模塊中的RBD模塊來實現訪問後端存儲的,在使用前須要先使用modprobe命令將內核中RBD模塊進行加載,同時對內核版本也是有要求的,須要內核的版本不低於3.10,由於比這個版本低的內核還沒將RBD模塊集成到內核中,所以若是是CentOS6.x的通常須要先升下內核版本。緩存
KRBD訪問後端存儲的方式通常適用於爲物理主機提供的塊設備,這種方式是基於內核模塊驅動的,可使用Linux自帶的頁緩存來提升性能。app
如下是經過KRBD模塊訪問Ceph後端塊設備的一些命令操做。框架
modprobe rbd # 加載RBD內核模塊工具
modinfo rbd # 查看rbd模塊信息性能
rbd create image_name --size 10240 # 建立一個10G大小的名爲image_name的塊設備操作系統
rbd list # 列出存儲池中的全部塊設備,沒有指定存儲池,默認使用rbd存儲池,可使用-p選項來指定存儲池命令行
rbd info image_name # 顯示出image_name塊設備的信息orm
rbd map image_name # 將image_name塊設備映射到系統中
rbd showmapped # 查看系統中已經映射的塊設備
rbd unmap /dev/xxx # 取消掉塊設備的映射
librbd是一個訪問rbd塊存儲的庫,它是基於librados庫進行的更高一層的封裝,因此librbd是經過librados庫來與塊存儲的數據進行交互的。
使用librbd訪問塊存儲的方式適用於爲虛擬機提供塊設備的方式,可使用RBD緩存來提升性能,好比在qemu+kvm虛擬框架中提供的虛擬機,qemu能夠經過librbd來訪問後端存儲,如下是訪問的模型圖:
要經過qemu來將塊設備提供給客戶機,也就是咱們說的虛擬機,須要指定存儲池名和映像名
命令格式相似以下:
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 -m 1024 -drive format=raw,file=rbd:data/squeeze:rbd_cache=true,cache=writeback
有關存儲池的操做:
部署好Ceph集羣后,默認都會生成一個名爲rbd的存儲池
ceph osd lspools # 來查看當前存儲的存儲池
ceph osd pool create {pool-name} {pg-num} {pgp-num} # 建立存儲池
ceph df # 查看存儲池統計信息
ceph osd pool set {pool-name} {key} {value} # 調整存儲池的選項值
有關image建立和查看的操做:
rbd create pool/image1 --size 1024 --image-format 2 # 在pool存儲池中建立1GB大小的image
rbd ls pool-name # 查看pool-name存儲池中的image
rbd info pool-name/image1 # 查看image1的詳細信息
rbd rm pool-name/image1 # 刪除image1
有關快照的操做:
rbd snap create pool-name/image1@image1_snap # 建立image1的快照
rbd snap list pool-name/image1 # 列出image1的全部快照
rbd info pool-name/image1@image1_snap # 查看快照的詳細信息
有關克隆的操做:
在克隆前,快照必須處於被保護的狀態纔可以被克隆。
rbd snap protect pool-name/image1@image1_snap # 將快照置於保護狀態
rbd clone pool-name/image1@image1_snap pool-name/image2 # 將快照克隆成一個image2
image2是依賴於image1的快照的,能夠稱image2是image1_snap的children
rbd children pool-name/image1@image1_snap # 查看該快照的children
要是想要讓image2再也不依賴於image1_snap,則須要使用以下命令將分層的image2變爲扁平的沒有層級的image
rbd flatten pool-name/image2
有關備份和恢復的操做:
rbd export pool-name/image1 image1_export # 導出image1
rbd import image1_export pool-name/image3 --image-format 2 # 導入備份的文件保存爲image3
這裏介紹的是經過LIBRBD的方式訪問RBD塊存儲。
(1)檢測操做系統的KVM虛擬化是否支持RBD塊存儲
使用命令:
qemu-img --help |grep rbd
若是輸出的內容中出現了rbd關鍵詞,則說明當前qemu-kvm或者qemu-system-x86_64支持RBD塊存儲。
(2)使用塊存儲
把/etc/ceph/ceph.conf文件拷貝到目的節點相同的路徑位置,這樣該節點的qemu-img工具就會使用該文件做爲默認配置文件。
若是ceph集羣開啓了cephx認證,則須要建立客戶端訪問權限,在個人ceph配置爲openstack的後端存儲中有說明如何建立這個權限,還有生成祕鑰並導入libvirt也有說明:配置Ceph集羣爲OpenStack後端存儲
最後會生成一個xml格式的文件,裏面定義了須要訪問塊存儲的各類信息,由libvirt來將其轉換爲對應的命令行以使得qemu-kvm進程能夠訪問塊存儲,從而虛擬機能夠訪問塊存儲。