Ceph Cookbook 學習實踐筆記(二)之使用Ceph塊存儲

Ceph Cookbook 學習實踐筆記(二)之使用Ceph塊存儲

第二章:使用Ceph塊存儲

安裝和配置好Ceph集羣后,接下來的任務就是進行存儲配置:給物理機或者虛擬機分配存儲空間或容量的操作過程,無論是以塊、文件還是對象形式存儲。

配置Ceph客戶端:

常用的Linux宿主機都可以作爲Ceph的客戶端,客戶端通過Ceph集羣網絡來相互交互以存儲或者檢索用戶數據。

操作步驟:

和之前一樣,我們通過Vagrant和VirtualBox來搭建Ceph客戶端(運行一個Ubuntu14.04虛擬機作爲Ceph客戶端)。

1、在已經克隆了ceph-cookbook git repository庫的路徑下(https://github.com/ksingh7/ceph-cookboook.git),使用Vagrant啓動Ceph客戶端虛擬機。

vagrant up client-node1        //啓動虛擬機
vagrant status client-node1    //查看運行狀態

2、登陸到client-node1節點:

vagrant ssh client-node1

Vagrant配置的虛擬機使用的用戶名和密碼都是vagrant,並且擁有sudo權限,root用戶名的默認密碼也是vagrant。

3、檢查OS和內核版本:

lsb_release -a
uname -r

4、檢查內核對RBD的支持:

sudo modprobe rbd

5、允許ceph-node MON節點通過ssh免密訪問client-node1(從ceph-node1上將root ssh 祕鑰複製到client-node1下的Vagrant用戶下):

vagrant ssh ceph-node1
sudo su -
ssh-copy-id vagrant@client-node1

6、在ceph-node1上使用ceph-deploy工具把Ceph二進制程序安裝到client-node1上面:

cd /etc/ceph
ceph-deploy --username vagrant install client-node1

7、將Ceph配置文件(ceph.conf)複製到client-node1:

ceph-deploy --username vagrant config push client-node1

8、客戶端需要Ceph祕鑰去訪問Ceph集羣。Ceph創建了一個默認用戶client.admin,它有足夠的權限去訪問Ceph集羣。不建議把client.admin共享到所有其他客戶端節點。更好的做法是用分開的祕鑰創建一個新的Ceph用戶區訪問特定的存儲池。

本例中,我們創建一個Ceph用戶client.rbd,它擁有訪問rbd存儲池的權限。Ceph的塊設備默認在rbd存儲池中創建:

ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd'

9、爲client-node1上的client.rbd用戶添加祕鑰:

ceph auth get-or-create client.rbd | ssh vagrant@client-node1 sudo tee /etc/ceph/ceph.client.rbd.keyring

10、至此,client-node1已經準備好充當Ceph客戶端了。通過提供用戶名和祕鑰在clilent-node1上檢查Ceph集羣的狀態:

vagrant ssh ceph-node1
sudo su -
cat /etc/ceph/ceph.client.rbd.keyring >> /etc/ceph/keyring

#由於沒有使用默認client.admin用戶,故必須提供用戶名來連接Ceph集羣
ceph -s --name client.rbd

 

創建Ceph塊設備

1、創建一個10240MB大小的RADOS塊設備,取名爲rbd1:

rbd create rbd1 --size 10240 --name client.rbd

2、多種方式列出RBD鏡像

#保存塊設備鏡像的默認存儲池是rbd,也可用通過rbd命令的-p選項指定存儲池
rbd ls --name client.rbd
rbd ls -p rbd --name client.rbd
rbd list --name client.rbd

3、檢查rbd鏡像的細節:

rbd --image rbd1 info --name client.rbd

 

映射Ceph塊設備

現在我們已經在Ceph集羣上創建了一個塊設備,要使用它,我們要將它映射到客戶機。

1、映射塊設備到lient-node1:

rbd map --image rbd1 --name client.rbd

2、檢查被映射的塊設備:

rbd showmapped --name client.rbd

3、要使用這個塊設備,我們需要創建並掛載一個文件系統:

fdisk -l /dev/rbd1
mkfs.xfs /dev/rbd1
mkdir /mnt/ceph-disk1
mount /dev/rbd1 /mnt/ceph-disk1
df -h /mnt/ceph-disk1

4、通過將數據寫入塊設備來進行檢測:

dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M

5、要在機器重啓後映射該塊設備,需要在系統啓動中添加 init-rbdmap腳本,並且將Ceph用戶和keyring詳細信息添加到/etc/ceph/rbdmap,最後再更新/etc/fstable文件:

wget https://raw.githubusercontent.com/ksingh7/ceph-cookbook/master/rbdmap -O /etc/init.d/rbdmap
chmod +x /etc/init.d/rbdmap
update-rc.d rbdmap defaults

#確保在/etc/ceph/rbdmap文件中使用了正確的keyring,在一個環境當中它通常唯一
echo "rbd/rbd1 id=rbd, keyring=AQBvooRdAPlJIRAAE4EhWj4jiGUm76mFB0CoXA==" >> /etc/ceph/rbdmap
echo "/dev/rbd1 /mnt/ceph-disk1 xfs defaults, _netdev0 0" >> /etc/fstab
/etc/init.d/rbdmap start

 

調整Ceph RBD大小

Ceph支持精簡配置,即直到開始在塊設備上存儲數據之前,物理存儲空間都不會被佔用。Ceph塊設備非常靈活,可以在Ceph存儲端增加或減少RBD的大小。

1、將之前穿件的RBD鏡像的大小從10GB增加到20GB:

rbd resize --image rbd1 --size 20480 --name client.rbd
rbd info --image rbd1 --name client.rbd

2、我們需要擴展文件系統來利用增加了的存儲空間。

dmesg | grep -i capacity | grep rbd1
xfs_growfs -d /mnt/ceph-disk1

使用RBD快照

快照是指在某時間點上生成的只讀的RBD鏡像副本,可以通過創建和恢復快照來保持CephRBD鏡像的狀態以及從快照恢復原始數據。

1、在創建好的塊設備上創建一個文件

echo "Hello Ceph this is snapshot test" > /mnt/ceph-disk1/snapshot_test_file

2、爲Ceph塊設備創建快照

語法:rbd snap create <pool-name>/<image-name>@<snap-name>

rbd snap create rbd/rbd1@snapshot1 --name client.rbd

3、列出鏡像快照命令

語法:rbd snap ls <pool-name>/<image-name>

rbd snap ls rbd/rbd1 --name client.rbd

4、刪除文件,測試快照恢復功能

rm -rf /mnt/ceph-disk1/*

5、現在恢復CephRBD快照來找回之前刪除的文件(回滾操作使用快照版本來覆蓋我們當前版本的RBD鏡像和它裏面的數據,要謹慎操作)

## 語法:rbd snap rollback <pool-name>/<image-name>@<snap-name>
rbd snap rollback rbd/rbd1@snapshot1 --name client.rbd

6、快照回滾操作完成後,重新掛載Ceph RBD文件系統並刷新其狀態。可以發現刪除的文件已經被恢復了

umount /mnt/ceph-disk1
mount /dev/rbd1 /mnt/ceph-disk1
ls -l /mnt/ceph-disk1/

7、刪除單個快照或所有快照

語法:rbd snap rm <pool-name>/<image-name>@<snap-name>
rbd snap rm rbd/rbd1@snapshot1 --name client.rbd

語法:rbd snap purge <pool-name>/<image-name>
rbd snap purge rbd/rbd1 --name client.rbd

使用RBD克隆

Ceph支持一個非常好的特性,即以COW(寫時複製)的方式從RBD快照創建克隆(clone),在Ceph中這被稱爲快照分層(Snapshot Layering)。分層特性允許客戶端創建多個CephRBD克隆實例。這個特性對OpenStack、CloudsStack、Qemu/KVM等雲平臺和虛擬化平臺都提供了非常有用的幫助。這些平臺通常以快照的形式來保護CephRBD鏡像。然後,這些快照被多次用來孵化實例。快照是隻讀的,但COW克隆是完全可寫的。

CephRBD鏡像有兩種類型:format-1和format-2。RBD快照支持這兩種類型,默認爲format-1,但是分層特性(COW克隆特性)只支持format-2類型的RBD鏡像。

1、創建format-2類型的RBD鏡像,並檢查細節

root@client-node1:~# rbd create rbd2 --size 10240 --image-format 2 --name client.rbd
root@client-node1:~# rbd info --image rbd2 --name client.rbd

2、創建這個RBD鏡像的快照

rbd snap create rbd/rbd2@snapshot_for_cloning --name client.rbd

3、要創建COW克隆,首先要保護這個快照,這是非常重要的一步。因爲一旦它被刪除了,所有附着其上的COW克隆都會被摧毀

rbd snap protect rbd/rbd2@snapshot_for_cloning --name client.rbd

4、通過快照創建一個克隆的RBD鏡像

語法:rbd clone <pool-name>/<parent-image>@<snap-name> <pool-name>/<child-image-name>

rbd clone rbd/rbd2@snapshot_for_cloning rbd/clone_rbd2 --name client.rbd

5、創建克隆是一個很快的過程。一旦完成,則可檢查新鏡像的信息。

rbd info rbd/clone_rbd2 --name client.rbd

現在我們已經克隆了一個依賴於父鏡像快照的RBD鏡像。爲了讓這個克隆的RBD鏡像獨立於他的父鏡像,我們需要將父鏡像的信息合併(flattern)到子鏡像。這個操作的時間長短取決於父鏡像快照當前的數據量大小。一旦完成,RBD鏡像就和它的父鏡像之間不存在依賴關係。

6、使用下力了命令開始合併操作

rbd flatten rbd/clone_rbd2 --name client.rbd
rbd info --image clone_rbd2 --name client.rbd

7、如果不再使用父鏡像快照,可以移除它,移除之前先解除保護

rbd snap unprotect rbd/rbd2@snapshot_for_cloning --name client.rbd
rbd snap rm rbd/rbd2@snapshot_for_cloning --name client.rbd

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