Ceph塊存儲介紹


1.塊存儲是什么?

  塊存儲簡稱(RADOS Block Device),是一種有序的字節序塊,也是Ceph三大存儲類型中最為常用的存儲方式,Ceph的塊存儲時基於RADOS的,因此它也借助RADOS的快照,復制和一致性等特性提供了快照,克隆和備份等操作。Ceph的塊設備值一種精簡置備模式,可以拓展塊存儲的大小且存儲的數據以條帶化的方式存儲到Ceph集群中的多個OSD中。

2.訪問塊存儲的方式

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

2.1KRBD方式

KRBD是Kernel RADOS Block Device的簡稱,它是通過Kernel模塊中的RBD模塊來實現訪問后端存儲的,在使用前需要先使用modprobe命令將內核中RBD模塊進行加載,同時對內核版本也是有要求的,需要內核的版本不低於3.10,因為比這個版本低的內核還沒將RBD模塊集成到內核中,因此如果是CentOS6.x的一般需要先升下內核版本。

KRBD訪問后端存儲的方式一般適用於為物理主機提供的塊設備,這種方式是基於內核模塊驅動的,可以使用Linux自帶的頁緩存來提高性能。

以下是通過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塊設備的信息

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進程可以訪問塊存儲,從而虛擬機可以訪問塊存儲。

本文轉載自;https://www.cnblogs.com/luohaixian/p/8213748.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM