Ceph塊存儲介紹

1. 塊存儲是什麼

塊存儲簡稱RBD(RADOS Block Device),是一種有序的字節序塊,也是在Ceph三大存儲類型中最爲經常使用的存儲方式 ,Ceph的塊存儲是基於RADOS的,所以它也藉助RADOS的快照、複製和一致性等特性提供了快照、克隆和備份等操做。Ceph的塊設備是一種精簡置備模式,能夠拓展塊存儲的大小且存儲的數據以條帶化的方式存儲到Ceph集羣中的多個OSD中。html

 

2. 訪問塊存儲的方式

訪問塊存儲的方式有兩種,分別是KRBD的方式和librbd的方式。後端

2.1 KRBD方式

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   # 取消掉塊設備的映射

 

2.2 librbd方式

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

 

3. RBD的一些經常使用操做和命令

有關存儲池的操做:

部署好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 

 

4. qemu-kvm如何訪問塊存儲

 這裏介紹的是經過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進程能夠訪問塊存儲,從而虛擬機能夠訪問塊存儲。

相關文章
相關標籤/搜索