Cinder采用的是松散的架構理念,由cinder-api統一管理外部對cinder的調用,cinder-scheduler負責調度合適的節點去構建volume存儲。volume-provider通過driver負責具體的存儲空間,然后cinder內部依舊通過消息隊列queue溝通,解耦各子服務支持異步調用
DAS(直接附加存儲):將存儲設備通過 SCSI 線纜或 FC(FiberChannel)直接連接到服務器上
NAS(網絡附加存儲):按照 TCP/IP 協議進行通信,以文件的 I/O 方式進行數據傳 輸。它擁有自己的文件系統,通過網絡文件系統 NFS 或通用文件系統 CIFS (common Internet file system)對外提供文件訪問服務
SAN(存儲區域網絡):SAN 是一種通過網絡方式連接存儲設備和應用服務器的架 構。這個網絡專用於服務器和存儲設備之間的訪問。SAN 代表的是一種專用於存 儲的網絡架構,與協議和設備類型無關。有 FC SAN 和 IP SAN 兩種方案
存儲方式
對象存儲(swift):基於文件系統,通過文件系統來存儲訪問數據
塊存儲(cinder):是以塊為基本單元的存儲方式,其傳輸不存在數據打包/解包 的過程,可提供更高的傳輸性能
文件存儲設備通過以太網與服務器連接。服務器通過 NFS、CIFS、HTTP、FTP 等 協議進行數據訪問。數據通過以太網傳輸,有打包/解包的過程
OpenStack 塊存儲服務——cinder:目前,cinder 對本地存儲和 NAS 的支持比較不錯,可以提供完整的 Cinder API V2 支持,而對於其他類型的存儲設備,Cinder 的支持會受到一些限制
volumetype 是卷的一種標識,各個 OpenStack 的發行者可根據自身對系統的約束 來定義卷類型的使用
計算節點存儲
主要用來給虛擬機提供系統盤空間(和 cinder 的后端存儲不同),所以我們一般 會把虛擬機的磁盤目錄(默認是/var/lib/nova/instances)作為單獨的掛載點,提 供一個較大的空間,一是可以滿足創建虛擬機對存儲空間的需求,二是可以滿足 虛擬機遷移的需求
1.使用獨立的存儲共享
需要一個獨立的共享存儲節點,典型的是使用 NFS 服務器,意味着虛擬 機和它的存儲不在一個節點上,對應的,對這兩類節點的要求也不一樣:計算節 點可能需要更多地 CPU 和內存,而存儲節點需要關注磁盤 IO 性能
優勢:
1) 降低計算節點維護成本,不影響虛擬機當前的運行狀態
2) 計算節點的宕機不會引起虛擬機的磁盤數據丟失
3) 虛擬機遷移功能效率更高
4)共享存儲可以用作他用
劣勢:
1) 需要額外的存儲節點
2) 一些重負載的虛擬機可能會影響其他虛擬機的性能,無論是否在同一節點
3) 因為需要通過網絡訪問存儲資源,性能不會很好
4) 使用統一共享存儲
2.不使用獨立的存儲節點(典型的如 Ceph、sheepdog 等),而是將計算節點上 的存儲連接起來形成一個存儲池,提供共享、高可靠、高可用的存儲特性
優勢:
1)不需要額外的存儲節點
2)充分利用分布式存儲的優勢
劣勢:
1)因為中間層的存在,會失去對磁盤的邏輯管理
2)對虛擬機數據的恢復變得復雜
3)這種方式仍然需要從網絡訪問存儲資源,降低性能
4)本地存儲
3.最常見的方式,不需要額外的配置
優勢:
1)重負載的虛擬機不會對其他節點的虛擬機造成影響
2)因為是直接磁盤 IO,性能是最好的(配合 SSD 效果更好)
劣勢:
1)無共享,意味着一個節點宕機會造成該節點上虛擬機數據不可用
2)虛擬機遷移變得復雜
cinder架構
OpenStack 到 Folsom 版本有比較大的改變,其中之一就是將之前在 Nova 中的部分持久性塊存儲功能(Nova-Volume)分離了出來,獨立為新的組件 Cinder。 主要核心是對卷的管理,允許對卷、卷的類型、卷的快照進行處理。它並沒有實 現對塊設備的管理和實際服務,而是為后端不同的存儲結構提供了統一的接口, 不同的塊設備服務廠商在 Cinder 中實現其驅動支持以與 OpenStack 進行整合
卷類型管理
創建卷類型
[root@controller ~]# cinder type-create lvm / nfs
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| ddad594c-6dc7-483a-ab0f-094da136b70a | lvm | - | True |
+--------------------------------------+------+-------------+-----------+
查看卷類型信息
[root@controller ~]# cinder type-list
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| ddad594c-6dc7-483a-ab0f-094da136b70a | lvm | - | True |
+--------------------------------------+------+-------------+-----------+
更新卷類型信息
[root@controller ~]# cinder type-update --name nfs ddad594c-6dc7-483a-ab0f-094da136b70a
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| ddad594c-6dc7-483a-ab0f-094da136b70a | nfs | - | True |
+--------------------------------------+------+-------------+-----------+
卷管理
創建卷
[root@controller ~]# cinder create --name block1 --volume-type lvm 1 +--------------------------------+--------------------------------------+ | Property | Value | +--------------------------------+--------------------------------------+ | attachments | [] | | availability_zone | nova | | bootable | false | | consistencygroup_id | None | | created_at | 2021-12-07T02:10:02.000000 | | description | None | | encrypted | False | | id | 901ba104-3f4f-4b6d-a73d-ab100135479b | | metadata | {} | | migration_status | None | | multiattach | False | | name | block1 | | os-vol-host-attr:host | None | | os-vol-mig-status-attr:migstat | None | | os-vol-mig-status-attr:name_id | None | | os-vol-tenant-attr:tenant_id | 2f1b48e86a2f4e1ab59730d9fff7c584 | | replication_status | None | | size | 1 | | snapshot_id | None | | source_volid | None | | status | creating | | updated_at | None | | user_id | d4463a3c93fc41429ab215bf04418374 | | volume_type | lvm | +--------------------------------+--------------------------------------+
掛載卷
# nova volume-attach {雲主機id} {卷id} [root@controller ~]# nova volume-attach b5a3e477-33a0-49fe-af90-78c9b44d39bb 901ba104-3f4f-4b6d-a73d-ab100135479b +----------+--------------------------------------+ | Property | Value | +----------+--------------------------------------+ | device | /dev/vdb | | id | 901ba104-3f4f-4b6d-a73d-ab100135479b | | serverId | b5a3e477-33a0-49fe-af90-78c9b44d39bb | | volumeId | 901ba104-3f4f-4b6d-a73d-ab100135479b | +----------+--------------------------------------+
卸載卷
[root@controller ~]# nova volume-detach b5a3e477-33a0-49fe-af90-78c9b44d39bb 901ba104-3f4f-4b6d-a73d-ab100135479b
查看卷
[root@controller ~]# openstack volume list +--------------------------------------+--------+-----------+------+-------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+--------+-----------+------+-------------+ | 901ba104-3f4f-4b6d-a73d-ab100135479b | block1 | available | 1 | | +--------------------------------------+--------+-----------+------+-------------+ [root@controller ~]# cinder list +--------------------------------------+-----------+--------+------+-------------+----------+-------------+ | ID | Status | Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+-----------+--------+------+-------------+----------+-------------+ | 901ba104-3f4f-4b6d-a73d-ab100135479b | available | block1 | 1 | lvm | false | | +--------------------------------------+-----------+--------+------+-------------+----------+-------------+
重命名卷
# cinder rename block1 <volume_name>
[root@controller ~]# cinder rename block1 block
# cinder rest-state available/false <volume_name>
# cinder migrate <volume_name> <host>
# cinder migrate <volume_name> <host>
刪除卷
[root@controller ~]# cinder delete block1
Snapshot管理
查看snapshot信息
[root@controller ~]# cinder snapshot-list
+----+-----------+--------+------+------+
| ID | Volume ID | Status | Name | Size |
+----+-----------+--------+------+------+
+----+-----------+--------+------+------+
創建snapshot
[root@controller ~]# cinder snapshot-create --name backhot volume
[root@controller ~]# cinder snapshot-delete backhot
cinder擴容
某公司出現塊存儲的空間不足的情況,需要擴容,這時候計算節點就要多分出一個區,加入到cinder塊存儲的后端存儲去
略