讀古今文學網 > OpenStack系統架構設計實戰 > 3.7 Nova與Cinder的交互流程分析 >

3.7 Nova與Cinder的交互流程分析

Nova與Cinder進行交互掛載卷的流程如下:

1)Nova通過命令nova volume-attach server volume device-name或者HTTP請求發起卷掛載請求。

2)Nova獲取可用的掛載點,若指定了掛載點則驗證其有效性,若沒有則找出一個有效的掛載點,同時創建數據庫信息。

3)Nova向Cinder發送請求,獲取Cinder回復的卷信息。

4)Nova檢查卷的狀態,若volume['status']!='available',則拋出400異常。

5)如果volume狀態為可用,向Cinder發送請求,保留這個盤,避免被別人使用。

6)Nova獲取connector,得到connector信息。

表3-1 Cinder對存儲設備及Ceph的支持

7)將上一步得到的connector和volume-id發送給Cinder,初始化連接接口,獲取iscsi的connection_info,Cinder返回connection_info。

8)若第6)、第7)步有異常(不區分異常種類,所有異常都一樣),則給Cinder發送unreserve請求,修改卷的狀態。

9)Nova調用驅動掛載捲到宿主機上,Nova默認是調用LibvirtISCSIVolumeDriver驅動的connect_volume方法,該方法用libvirt執行一些相關的iscsi命令掛載雲硬盤到宿主機上,然後調用libvirt將該卷掛載到虛擬機上去。若在掛載捲到虛擬機過程中出現異常,則將前面卷掛載到宿主機這一步操作撤銷,執行的是LibvirtISCSIVolumeDriver驅動的disconnect_volume方法。至此,掛載過程完成。

10)Nova給Cinder發送請求掛載信息,通知Cinder此卷已經完成宿主機虛擬機掛載過程,Cinder收到請求後,進行掛載。從Cinder的代碼上看,並未做什麼操作,只是將信息更新到數據庫而已,將卷的狀態改為in-use。

11)Nova更新數據庫,主要把connection_info信息更新進去。