Skip to main content

一些理論

Primary storage (主存儲)
主存儲也叫一級存儲, 它在cloudstack 裡面主要是提供某一個集群中所有主機上運行的虛擬機實例的磁盤捲的存儲, 主存儲在目前只支持NFS、SharedMountPoint、Clvm 這三種類型的存儲

Secondary storage (輔助存儲)
輔助存儲在cloudstack 裡面主要提供模版、快照、卷的存儲, 而管理這些功能的是由一個叫ssvm 的系統虛擬機

用來保存一次寫多次讀的數據,比如模板,ISO,快照等數據,二級存儲對IOPS要求並非像主存儲那樣高,但所存儲的數據比較大,因此需要較大的容量.目前二級存儲只支持NFS,對於Swift的支持正在添加,長遠來看有可能支持其它的分佈式文件系統如HDFS,Ceph等.

CloudStack管理節點用來提供對主存儲及二級存儲的綜合管理,配置及使用,這兩種存儲在雲環境中的可用上圖表示:

 

二級存儲用來存放template,snapshot和需要下載的volume。

二級存儲不直接掛載到hyperviser上,需要由management server或ssvm來進行操作。

二級存儲中有3個目錄,template,volume,snapshots



template目錄存放的是cloudstack所管理的模板。

目錄結構為:template/tmpl/userid/templateid/templatefile。
第一次從模板創建vm的過程,需要把secondary storage掛載到management server,然後由management server通過hyperviser向primary storage中復制模板,將template目錄下的相應文件複製到primary storage中,然後將復製過去的文件標記為模板,之後再次通過該template創建的vm,都會直接從模板複製一個新的磁盤掛載到vm上作為主磁盤。


跨zone複製模板的時候,會將文件link到/var/www/copy 目錄下,並在copy中的.htaccess進行權限設置,根據全局配置和具體環境信息,會設置某些IP的可訪問,某些IP無法訪問。例如:如果兩個zone在同一網段,都為192.168.1.*,則默認無法對模板進行copy操作,或者192.168.1.*網段的http server不允許向cloudstack上傳模板。此功能由全局配置中的secstorage.allowd.internal.sites控制,將需要copy的網段添加到此項中,以逗號分隔,重啟ms,然後破壞掉ssvm重建即可保證此項操作順利進行。


snapshots存放的是vm某磁盤的快照。

目錄結構為:snapshots/userid/templateid/snapshotfile。創建snapshot的時候,會先從hyperviser層創建snapshot,然後將secondary storage mount到ssvm,之後創建完整的文件存儲路徑,將snapshot文件複製到secondary storage相應目錄中。下載snapshot的時候,會由ssvm掛載相應目錄,將文件link到/var/www/userdata下,並生成鏈接存放到db中,提供給用戶下載。


volume存放的是需要下載的vm的磁盤的文件。在UI上點擊下載後,會將volume文件先複製到secondary storage中,再由ssvm創建link到/var/www/userdata中,並生成鏈接存放到DB中,提供給用戶進行下載。

SSVM (Secondary Storage VM)
SSVM在cloudstack 裡面主要提供管理一級存儲、二級存儲、模版、快照、卷等功能, 在創建並啟用一個區域後SSVM 會自行創建, 如果手動刪除cloudstack 也會自行創建SSVM

CPVM (Console Proxy VM)
CPVM主要提供連接控制台代理, 在cloudstack 的UI 界面連接某個虛擬機實例的窗口就是CPVM 提供的功能, 控制台主要是通過vnc 實現. 我們在安裝配置計算節點的時候需要開啟qemu 的vnc 監听就是為CPVM 提供的服務

V-Route(虛擬路由器)  

在基礎網絡模式下虛擬路由器提供的功能有DNS 、 dhcp 服務

在高級網絡模式下虛擬路由器提供的功能有VPN、DHCP、DNS、防火牆、負載均衡(HaProxy 實現)、SNAT、靜態NAT、端口轉發、安全組、網絡ACL、等功能

虛擬路由器的 DHCP 功能是為虛擬機實例提供動態獲取 IP 的功能, 那有的人就會問了, 既然是DHCP 那作為服務器的虛擬機實例的 IP 會不會變呢? 答案是no, 因為虛擬路由器會將虛擬機實例自動獲取的 IP 及 MAC 等信息存如cloudstack 的數據庫, 這個 IP 永遠是某個實例的, 除非銷毀這個實例之後 IP 才會被其他實例所用

有的人就說了, 既然是一個虛擬路由器, 它的性能及穩定性肯定是頂不住大的並發請求, 那這個時候我們怎麼辦呢, 方法有二,
1. 用物理路由器代替虛擬路由讓 cloudstack 管理.
2. 可根據自己的網絡結構讓虛擬機實例的網絡不從 V-Route 走不就好了嗎.

Security Group (安全組)

安全組我們可以理解為一個網絡中的出口硬件防火牆, 當然事實上並不是那麼會事, 因為安全組主要是利用計算節點的 iptables 實現的

Guest network (來賓網絡)

來賓網絡主要是虛擬機實例的走的網絡, 在配置區域的時候會提示輸入來賓網絡的預留IP 段, 那段 IP 就是給虛擬機實例所用了, 在 cloudstack 中網絡結構是一個非常好的設計, 同樣也是比較難以理解的一塊


CloudStack運維常見問題及解決辦法

1.CloudStack中對虛擬機進行網絡限速

CloudStack中默認的網絡限速無法滿足需要(200Mbit/s).這時需要調整全局配置參數:network.throttling.rate與vm.throtting.rate來增加帶寬.

首先,你來明白一個問題,關聯性組(Affinity Groups)是用來幹嘛的。
關聯性組是cloudstack提供的一個特性,用於保證同一個關聯性組中的VM,創建並運行在不同的物理主機中(必須的),你只有一台主機,卻要把屬於同一個組中的2台VM都創建在這一台主機中,不滿足CS的邏輯,所以必然失敗。  

應用場景:
分別創建名稱為web,db,app的關聯性組,根據用途進行創建。那麼,你創建的所有屬於web關聯性組的虛擬機,則表示跑的應用是web應用,這樣,保證同樣應用的VM,不會運行在相同的主機中。

用途?
你希望你跑web、db的虛擬機應用全部運行在同一個主機中?萬一這台主機掛了,所有的db應用全部停止?給你分離在不同的主機中,至少能保證,主機掛了,運行在其他主機中的相同應用還可以正常工作,最小程度減少因為不可控因素帶來的問題!

還有一種特殊的關聯組,類型為:Explicit Dedication。從字面意思可以理解,明確的專屬資源。一般在cs裡面,我們可以把一個區域、一個提供點、一個群集甚至一台主機,設置為專屬資源。意思就是說,在一個大的資源池中,劃分一部分資源,給特定的賬戶(account),是這些賬戶專屬的資源,其他用戶無權使用。
使用該特定賬戶登錄,創建虛擬機時,該用戶可以選擇將虛擬機創建在專屬的資源中,還是非專屬的資源中。