Oepnstack之CEPH系列是根據Ceph Cookbook整理的筆記,分爲以下幾個部分:
《Ceph簡介》
《Ceph集羣操作》
《Ceph塊設備管理與Openstack配置》
《深入Ceph》
《ceph優化與性能測試》
注意:此文對應ceph版本爲10.1.2
#ceph -v ceph version 10.1.2(4a2a6f72640d6b74a3bbd92798bb913ed380dcd4)
前言
目前接觸到的Mitaka版本Openstack中,ceph主要用來提供塊設備作爲cinder、nova、glance的存儲端。本篇也是講述的塊設備的相關概念及管理,以及在Openstack中虛擬機不同的啓動方式對應ceph中不同的存儲結構。本篇分爲兩個部分:塊設備的特性與rbd命令;Openstack中ceph塊設備使用。
Ceph塊設備
Ceph塊設備即RBD(RADOS Block Device),RBD通過librbd將數據條帶化的存在ceph集羣的OSD上。同時RBD是建立RADOS層之上,這樣每一個塊設備都會分佈在多個ceph節點上。目前RBD驅動已經完美集成在linux內核中,提供了多種企業特性,如完整和增量快照(full and incremental snapshot)、自動精簡配置(thin provision)、寫時複製克隆(copy on write clone)、動態調整大小(dynamic resizing)、內存內緩存(In-memory caching)。
RBD的讀寫方式有下面兩種:
1、在虛擬化引擎支持下,通過Hypervisor控制librbd庫來對塊設備讀寫。在對接上Openstack後,可以很好的利用RBD寫時複製特性來快速啓動多臺虛擬機,後面會進一步介紹相關內容。
2、在映射完塊設備後,本地文件系統通過內核KRBD驅動直接訪問。
一、RBD命令操作
創建塊設備
~~~bash rbd create -p volumes --size 1024 rbd_test -p 參數指定存儲池,--size 指定大小,默認以M爲單位,可以自己加單位如10G,最後rbd_test爲創建的鏡像名。 rbd ls|list -p volumes 查看volumes池下的images即塊設備 rbd du -p volumes 查看volumes的使用情況。可以觀察到使用了精簡配置。 rbd info -p volumes rbd_test 查看rbd_test的相關信息,如大小,objects數量,order,format id和features。 ~~~
Tips:
1、-p 參數有時候可省略,使用pool/image_name的方式,如rbd info volumes/rbd_test
2、 創建塊設備時默認object層爲2,即帶上了 –image-format 2的參數,會有許多高級性能,默認有features: layering, exclusive-lock, object-map, fast-diff, deep-flatten。
映射塊設備
rbd map volumes/rbd_test 映射rbd_test到本地 rbd showmapped 查看映射的設備,有點問題,默認只能查看rbd池的塊設備,其他池的只能看上一條命令的輸出結果。默認從/dev/rbd0開始 mkfs.xfs /dev/rbd0;mkdir -p /mnt/rbd_test; mount /dev/rbd0 /mnt/rbd_test 格式化並掛載。
Tips:
1、map是報錯”rbd: sysfs write failed
rbd: map failed: (6) No such device or address“,這是因爲上面創建的object特性引起的,在我當前Ubuntu1610上,map命令不支持exclusive-lock之後等相關特性,需要手動指定layering特性,或者將image-format值設爲1
rbd create -p volumes --size 10 rbd_test1 --image-format 2 --image-feature layering
調整RBD鏡像大小
在上面的映射完塊設備格式化掛載後,使用resize命令調整RBD,然後用XFS在線調整特性擴容文件系統。
rbd resize volume/rbd_test --size 20 xfs_growfs -d /mnt/rbd_test
二、RBD快照與克隆
爲了深入瞭解Openstack中nova、cinder、glance之前的存儲關
系,需要學習RBD的快照與克隆。
快照是某時間點上生成的只讀RBD鏡像的副本。
1、RBD快照操作
echo "hello ,This is a file ready to delete!" >>/mnt/rbd_test/snap_test_file 在塊設備的掛載目錄創建一個文件。 rbd snap create volumes/rbd_test@snapshot1 創建一個snapshot1的鏡像。 rbd snap ls volumes/rbd_test 查看volumes池中rbd_test鏡像所擁有的快照 ##測試快照功能 rm -rf /mnt/rbd_test/* rbd snap rollback volumes/rbd_test@snapshot1 將volumes/rbd_test的快照snapshot1回滾 umount /dev/rbd0 mount /dev/rbd0 /mnt/rbd_test ls /mnt/rbd_test 觀察到文件恢復 ## 快照的刪除 rbd snap rm volumes/rbd_test@snapshot1 rbd snap purge volumes/rbd_test 批量刪除rbd_test上的鏡像。
Tips:
1、快照和被快照的鏡像是同等的,具有相同大小和特性,都是池中的一個鏡像。
2、新建的快照通過”rbd ls”查看不到,需要用”rbd du”
2、RBD克隆操作
Ceph一個非常好的特性,即以COW(寫時複製)的方式從RBD快照創建克隆(clone),在ceph中也稱爲快照分層(snapshow layering)。
在雲平臺中通常以創建快照來保護RBD鏡像(rbd du -p images查看)。然後再從快照上來啓動實例。啓動的實例是COW克隆鏡像。每一個克隆鏡像都需要讀取父鏡像的數據,因此父鏡像需要設置保護。當新的數據寫入克隆鏡像時會存在本身,克隆鏡像與RBD鏡像具有相同功能,如創建快照等。
rbd snap create volumes/rbd_test@snapshot_for_clone 創建一個名爲snapshot_for_clone的鏡像 rbd snap protect volumes/rbd_test@snapshot_for_clone 對此鏡像設置保護 rbd clone volumes/rbd_test@snapshot_for_clone volumes/clone_rbd 創建克隆鏡像 rbd info volumes/clone_rbd 查看克隆鏡像 ##將克隆鏡像獨立出來,完全擁有父鏡像數據,中斷依賴關係 rbd flatten volumes/clone_rbd
Tips:
1、一個快照需要有分層特性(layering)才能創建COW克隆。在舊版本創建鏡像默認爲format-1類型,不具有此特性。
Ending:Ceph塊設備管理與Openstack配置上篇結束,下篇將開始記錄RBD在Openstack中的不同表現方式~