cinder-volume 支援多種 volume provider,前面我們一直使用的是預設的 LVM,本節我們将增加 NFS volume provider。
雖然 NFS 更多地應用在實驗或小規模 cinder 環境,由于性能和缺乏高可用的原因在生産環境中不太可能使用,但是學習 NFS volume provider 的意義在于:
1. 了解 cinder-volume 如何支援多 backend
2. 更重要的,可以了解 cinder-volume,nova-compute 和 volume provider 是如何協同工作,共同為 instance 提供塊存儲。
3. 舉一反三,能夠快速了解并接入其他生産級 backend ,比如 Ceph,商業存儲等。
下圖展示了 cinder、nova 是如何與 NFS volume provider 協調工作的。
NFS Volume Provider
就是我們通常說的 NFS Server,提供遠端 NFS 目錄,NFS Clinet 可以 mount 這些遠端目錄到本地,然後像使用本地目錄一樣建立、讀寫檔案以及子目錄。
cinder-volume
存儲節點通過 NFS driver 管理 NFS volume provider 中的 volume,這些 volume 在 NFS 中實際上是一個個檔案。
nova-compute
計算節點将 NFS volume provider 存放 volume 的目錄 mount 到本地,然後将 volume 檔案作為虛拟硬碟映射給 instance。
這裡有幾點需要強調:
在 Cinder 的 driver 架構中,運作 cinder-volume 的存儲節點和 Volume Provider 可以是完全獨立的兩個實體。 cinder-volume 通過 driver 與 Volume Provider 通信,控制和管理 volume。
Instance 讀寫 volume 時,資料流不需要經過存儲節點,而是直接對 Volume Provider 中的 volume 進行讀寫。
正如上圖所示,存儲節點與 NFS Volume Provider 的連接配接隻用作 volume 的管理和控制(綠色連線);真正的資料讀寫,是通過計算節點和 NFS Volume Proiver 之間的連接配接完成的(紫色連線)。這種設計減少了中間環節,存儲節點不直接參與資料傳輸,保證了讀寫效率。
其他 Volume Provider(例如 ceph,swift,商業存儲等)均遵循這種控制流與資料流分離的設計。
在實驗環境中,NFS volume provider 的 NFS 遠端目錄為 192.168.104.11:/storage
cinder-volume 服務節點上 mount point 為 /nfs_storage。
在 /etc/cinder/cinder.conf 中添加 nfs backend。
enabled_backends = lvmdriver-1,nfs 讓 cinder-volume 使用 nfs backend
[nfs] 中詳細配置 nfs backend。包括:
a) 指定存儲節點上 /nfs_storage 為 nfs 的 mount point。
nfs_mount_point_base = /nfs_storage
b) 檢視 /etc/cinder/nfs_shares 活動 nfs 共享目錄清單。
nfs_shares_config = /etc/cinder/nfs_shares,其内容為
清單中隻有 192.168.104.11:/storage。如果希望有多個 nfs 共享目錄存放 volume,則可以添加到該檔案中。
c) nfs volume driver。
volume_driver=cinder.volume.drivers.nfs.NfsDriver
d) 設定 volume backend name。在 cinder 中需要根據這裡的 volume_backend_name 建立對應的 volume type,這個非常重要。
volume_backend_name = nfs
重新開機 cinder-volume,cinder service-list 确認 nfs cinder-volume 服務正常工作。
建立 nfs volume type。
打開GUI頁面Admin -> System -> Volumes -> Volume Types,點選 “Create Volume Type”。
命名 nfs,點選“Create Volume Type”。
選擇 nfs volume tyep,點選下拉菜單“View Extra Specs”
點選“Create”,Key 輸入 volume_backend_name ;Value 輸入 nfs。
NFS volume provider 準備就緒,下一節我們将建立 NFS 為 backend 的 volume。
本文轉自CloudMan6 51CTO部落格,原文連結:
http://blog.51cto.com/cloudman/1827934