Cinder在OpenStack中的位置
Cinder是OpenStack的一個組件,從Folsom版本從Nova-Volume中分離出來,為雲平台提供統一接口,按需分配的,持久化的塊存儲服務(類似於Amazon EBS服務)。
Cinder的核心功能是對卷的管理,允許對卷,卷的類型,卷的快照、卷備份進行處理。它為后端不同的存儲設備提供了統一的接口,不同的塊設備服務廠商再Cinder中實現其驅動支持以與OpenStack進行整合。
Cinder邏輯架構
-
Cinder Client:封裝 Cinder 提供的rest接口,以CLI形式提供給用戶使用。比如:nova-compute、horizon 。
-
Cinder-api:對外提供rest API,對操作需求進行解析,對API進行路由尋找相應的處理方法,包含卷的增刪改查、快照增刪改查、備份、Volume type管理、掛載/卸載(Nova調用)等。
-
Cinder-scheduler:負責收集backend上報的容量、能力信息,跟設定的算法完成卷到指定cinder-volume的調度。
-
Cinder-volume:多節點部署,使用不同的配置文件、接入不同的backend設備,由各存儲廠商插入driver代碼與設備交互完成設備容量和能力信息收集、卷操作。
-
Cinder-backup:實現將卷的數據備份到其他存儲介質(目前Swift/Ceph/TSM提供了驅動)
-
SQL DB:提供存儲卷、快照、備份、service等數據,支持Mysql、PG、MSSQL等SQL數據庫
-
AMPQ:Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標准高級消息隊列協議。應用層協議的一個開放標准,為面向消息的中間件設計,不受產品和語言差異的影響。
Cinder組件
組件 | 功能 |
---|---|
Cinder-api | cinder模塊對外唯一入口,cinder的endpoint,接受和處理rest請求 |
Cinder-scheduler | 根據預定的調度過濾策略以及權重計算策略,選出合適的后端來處理任務 |
Cinder-volume | 負責與后端存儲進行對接,通過各廠商提供的driver將OpenStack操作轉換為存儲操作 |
Cinder-backup | 實現將卷的數據備份到其他的存儲介質 |
Cinder可擴展性
Cinder物理部署
- Cinder-api,Cinder-scheduler,Cinder-volume可以選擇部署到一個節點上,也可以分別部署。
- API采用AA模式,由rabbitmq以負載均衡模式向3個節點分發任務,並同時從rabbitqmq收取Cinder-volume上報的能力信息,調度時,scheduler通過在DB中預留資源從而保證數據一致性。
- Cinder-volume也采用AA模式,同時上報同一個backend容量和能力信息,並同時接受請求進行處理。
- Rabbitmq,支持主備或集群(6.0及后續的版本)。
- GaussDB,支持主備。
Cinder內部邏輯
Cinder卷管理
Cinder模塊職能
Cinder創卷流程
Cinder與SAN對接
Cinder后端對接SAN,相應的Cinder-api接口或者命令對應磁陣的操作如下:LUN,邏輯單元號,卷
cinder操作 | SAN上的對應操作 |
---|---|
create_volume | 創建一個LUN,執行命令(createlun –n name –lunsize 1 …) |
delete_volume | 刪除一個LUN,執行命令(dellun –lun 5) |
extend_volume | 不同driver實現方式不同,LUN直接擴展或者創建個擴展LUN,然后進行合並 |
create_volume_from_image | 創建一個LUN,將鏡像下載到主機側,將lun掛載給主機,將鏡像數據拷貝到LUN,然后解除與主機的關系 |
Initialize_connection | 將LUN和主機進行關聯 |
terminate_connection | 解除LUN和主機的關聯關系 |
create_snapshot | 創建快照,createsnapshot –lun 5 –n name |
Cinder掛卷和卸卷流程分析
KVM場景下使用陣列掛卷流程
- 陣列側添加主機和LUN的映射
- 主機側掃描scsi總線
- 多路徑生成虛擬磁盤
- Nova調用libvirt接口將磁盤添加到xml中
Nova掛卷流程
-
發現iSCSI target
-
添加一個iSCSI target node
-
登錄iSCSI target
-
設置iSCSI會話開機自啟動
-
調用多路徑的smartscan腳本掃描LUN
-
在/dev/disk/by-id目錄下生成多路徑的設備
-
nova調用libvirt接口將生成的sd設備添加到虛擬機的xml文件中
Nova卸載卷流程
-
Libvirt將虛擬機xml中的設備刪除
-
根據libvirt xml中記錄的磁盤的wwn,找到對應的sd設備
-
調用smartdelete腳本,將sd設備刪除
-
刪除多路徑的wwn軟連接
-
檢查iscsi會話是否還有必要存在,如果沒有必要,將所有的iscsi會話logout