1、cinder簡介
Cinder提供持久的塊存儲,目前僅供給虛擬機掛載使用。它並沒有實現對塊設備的管理和實際服務,而是為后端不同的存儲結構提供了統一的接口,不同的塊設備服務廠商在 Cinder 中實現其驅動,以與 OpenStack 進行整合。它通過整合后端多種存儲,用API接口為外界提供存儲服務。
Cinder存儲分為本地塊存儲、分布式塊存儲和SAN存儲等多種后端存儲類型:
1)本地存儲: 默認使用lvm。cinder volume 將該服務所在的節點變為存儲節點,將節點上面的 volume group 作為共享存儲池暴露給計算節點。
2)SAN存儲:
(1)通過NFS協議支持NAS存儲,比如Netapp
(2)通過添加不同廠商的制定driver來為了支持不同類型和型號的商業存儲設備,比如EMC,IBM的存儲
3) 分布式存儲:支持sheepdog,ceph,和IBM的GPFS等
對於本地存儲,cinder-volume 默認使用 LVM 驅動,該驅動當前的實現需要在主機上事先用 LVM 命令創建一個卷組 , 當該主機接受到創建卷請求的時候,cinder-volume 在該卷組 上創建一個邏輯卷, 並且用 openiscsi 將這個卷當作一個 iscsi tgt 給輸出.還可以將若干主機的本地存儲用 sheepdog 虛擬成一個共享存儲,然后使用 sheepdog 驅動。
2、Cinder LVM配置
在cinder配置文件中,默認的backend lvmdriver是通過LVM來使用某個cinder volume服務所在的服務器的本地存儲空間:
cinder-volume服務所在的節點,cinder.conf配置文件內容樣式如下:
[lvmdriver-1]
volume_group = stack-volumes-lvmdriver-1
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name = lvmdriver-1
參數詳解:
volume_group 指定Cinder使用的 volume group即存儲節點上的vg。在devstack默認安裝時其名稱是stack-volumes-lvmdriver-1;在實際部署cinder的時候其默認名稱是cinder-volumes。
volume_driver 指定driver類型. lvm支持兩種傳輸協議: iSCSI and iSER。
iSCSI的話,將其值設為 cinder.volume.drivers.lvm.LVMISCSIDriver;
iSER的話,將其值設為 cinder.volume.drivers.lvm.LVMISERDriver
volume_backend_name 指定backend name。當有多個 volume backend 時,需要創建 volume type,它會綁定一個或者多個backend。用戶在創建 volume 時需要選擇某個 volume type,間接相當於選擇了某個 volume backend。
注意事項:
1)除了在啟動的時候讀取該配置文件以外,cinder-volume服務不實時監控該文件。因此在修改該文件后你需要重啟cinder-volume 服務。
也就是說cinder-volume服務只是在啟動的時候,讀取一次該配置文件,剩下的就不在讀取了,因此在修改完配置文件后,需要在重啟啟動一下cinder-volume服務
2)只有一個backend的時候,除了配置volume group外,不需要添加別的配置信息,創建volume的時候也不需要選擇volume type。當有多個backend的時候,你需要使用volume-type來將volume創建到指定的backend中。一個volume-type可以有幾個backend,這時候 the capacity scheduler 會自動選擇合適的backend來創建volume。如果定義了volume type,但是cinder.conf中沒有定義volume backend,那么cinder scheduler將找不到有效的host來創建volume了。
3)一個存儲節點上可以提供多種類型的存儲服務,例如,本地存儲、ceph存儲等,對於本地存儲類型來說,一個vg就是一個存儲后端backend,一個存儲類型type,可以對應多個backend,創建卷時,指定存儲類型,系統會自動選擇一個有效backend后端進行真實卷的創建。部署的時候,可以這樣划分,相同類型的存儲后端,歸類為一個存儲類型,這樣可以通過卷類型來區分不同的存儲類型。也可以一個存儲類型type對應一個存儲后端
3、實戰操作
Cinder存儲節點部署,部署在a主機
1)安裝lvm2軟件包
yum install lvm2 -y
2)啟動LVM的metadata服務並且設置該服務隨系統啟動
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service
3)創建LVM 物理卷 /dev/sdb
pvcreate /dev/sdb
4)創建 LVM 卷組 cinder-volumes
vgcreate cinder-volumes /dev/sdb
5)編輯/etc/lvm/lvm.conf文件並完成下面的操作:
在devices部分,添加一個過濾器,只接受/dev/sdb設備,拒絕其他所有設備
devices {
filter = [ "a/sdb/", "r/.*/"]
提示:每個過濾器組中的元素都以 a 開頭,即為 accept,或以 r 開頭,即為**reject**,並且包括一個設備名稱的正則表達式規則。過濾器組必須以 r/.*/ 結束,過濾所有保留設備
6)安裝cinder組件軟件包
yum install openstack-cinder targetcli python-keystone -y
7)在cinder-volume服務所在的節點修改cinder.conf 文件
在[lvm]部分,配置LVM后端以LVM驅動結束,卷組cinder-volumes,iSCSI協議和正確的iSCSI服務
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver # 驅動
volume_group = cinder-volumes # vg組名稱
iscsi_protocol = iscsi # iSCSI協議
iscsi_helper = lioadm # iSCSI管理工具
volume_backend_name=iSCSI-Storage # 名稱在 [DEFAULT] 區域,配置鏡像服務 API 的位置
在[DEFAULT]部分,啟用 LVM 后端
[DEFAULT]
enabled_backends = lvm
在[DEFAULT]區域,配置鏡像服務 API 的位置
[DEFAULT]
glance_api_servers = http://192.168.137.11:9292
8)啟動塊存儲卷服務及其依賴的服務,並將其配置為隨系統啟動
systemctl enable openstack-cinder-volume.service target.service
systemctl restart openstack-cinder-volume.service target.service
9)使用cinder create 命令創建卷,再通過nova volume-attach 命令把卷改在到虛機上
10)在存儲節點上執行lvdisplay命令,查看剛才掛載的數據卷