CloudStack

CloudStack 筆記

進階網路架構

談 Cloudstack 進階網路架構
進階網路是Cloudstack 的一大特色,可以將VM隔離在不同的網路,並提供Firewall,Load Balance,Vpn,Dhcp,Dns,Nat等服務,把網路當成是一種資源來管理,做到Network as a service。

這究竟是什麼透過什麼方式做到的呢?我們來看一下。

802.1Q Tagged Vlan:Cloudstack透過vlan將VM隔離,在建立Cloudstack Zone的時候,可以預先定義一個範圍的Vlan給這個Zone使用,例如300-399這個範圍的Vlan,當新建一個VM時,就會在這個範圍內動態的產生一個Vlan,並將這個VM加入這個Vlan,在Switch端只要預先設定好這個Vlan範圍,並設定Trunk及802.1Q,交換器就會自動辨識,讓同一個Vlan的VM彼此可以互相溝通,不同Vlan的VM是看不到彼此的,理論上可以創建數千個Vlan,看Switch的規格而定。

Virtual Router:當新建一個VM的網路時,預設狀態下系統會部署一台虛擬機做為Virtual Router以供這個網路使用,OS為Debian,提供Dns,Dhcp,Vpn,Load Balance,Firewal等相關的服務,這些功能自行架設Linux也做得到,但Cloudstack己將這些功能整合到Virtual Router當中,並且整合在Cloudstack管理介面當中進行管理。

整合硬體式防火牆:可以與Juniper srx firewall 或Citrix Netscaler負載平衡器做整合,如果Virtual Router無法滿足需求的話,可以外掛硬體設備提供更好的服務。

系統優化

安裝 KVM 模板

1. 線上下載安裝
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /storage/nfs/s \
-u http://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-kvm.qcow2.bz2 \
-h kvm -F

2. 本地安裝
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /export/secondary \
-f /root/systemvmtemplate-4.15.1-kvm.qcow2.bz2 \
-h kvm -F

全域設定
cpu.overprovisioning.factor 2.0 //CPU超配
mem.overprovisioning.factor 2.0 //記憶體超配,即2GB變4GB
secstorage.allowed.internal.sites 0.0.0.0/0 //從該網段下載ISO或模板,後期搭建ngix伺服器可修改
management.network.cidr 192.168.100.0/24 //管理網段,可不修改,但會有警報資訊

system.vm.use.local.storage      [set false to -> true\
ca.plugin.root.auth.strictness      [set true to -> false
secstorage.allowed.internal.sites    [set value = 10.66.11.9(local server ip using apache web server for download iso

host 你的manager主機的ip
cpu.overprovisioning.factor    2.0
mem.overprovisioning.factor 2.0
secstorage.allowed.internal.sites 0.0.0.0/0



KVM : 所有VMs都需要支持virtio驱动。Linux kernel versions 2.6.25和更高版本中已经安装了这些驱动。管理员必须在virtio的配置文件中配置CONFIG_VIRTIO_BALLOON=y。

vim /etc/cloudstack/agent/agent.properties
guest.cpu.mode=host-model
host-model 表示從可用的CPU模型中選擇一個與宿主機最接近的。


服務重起
systemctl restart cloudstack-management
systemctl cloudstack-agent start

Log查看
tail -f /var/log/cloudstack/management/management-server.log

mysql
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
bind-address = 0.0.0.0

# nfs Server
/export/primary *(rw,async,no_root_squash,no_subtree_check)
/sbin/rpc.statd --no-notify --port 662 --outgoing-port 2020

mount -t nfs 10.66.100.30:/export/secondary /mnt/secondary

cloudstack-setup-databases cloud:123456@localhost --deploy-as=root:12345
cloudstack-setup-management

# Disable automatic upgrades and unnecessary packages:
apt-get remove --purge unattended-upgrades snapd cloud-init
# Edit the files at /etc/apt/apt.conf.d/* with following
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "1";

 

主存儲與二級存儲

CloudStack 存儲按用途分為主存儲(Primary Storage)和二級存儲(Secondary Storage),主存儲用來存儲虛擬機的捲,二級存儲用來存放虛擬機的模板,ISO鏡像和快照。

主存儲
當我們創建一台虛擬機時,需要為它指定至少一個卷(Volume),對於虛擬機來說,一個卷就相當於一個硬盤。在CloudStack中,虛擬機的捲被存放在主存儲中
在CloudStack中,主存儲有兩種:本地存儲(Local)和共享存儲(Shared)。

本地存儲在宿主機上,所以當虛擬機的捲使用本地存儲時,只能被和它處於同一宿主機的虛擬機訪問,而使用共享存儲時,任意一台宿主機只要能訪問該存儲,宿主機上的虛擬機也就能訪問該存儲,也就是說該存儲是被多台宿主機上的虛擬機共享的。
虛擬機遷移
當虛擬機使用共享存儲時,虛擬機可以在線遷移到其他宿主機上,因為虛擬機本質上只是一個進程,只需要把該進程複製到另外一台可以訪問它的捲的宿主機上,即可完成虛擬機的遷移。

但使用本地存儲的虛擬機無法實現在線遷移,因為其他宿主機無法訪問該虛擬機位於本地存儲上的捲。

卷遷移
在CloudStack中,使用本地存儲的虛擬機不僅虛擬機本身不能遷移,虛擬機的捲也是不能遷移的,也就是說一旦創建虛擬機時選擇了本地存儲,那麼這台虛擬機永遠只會跑在同一台宿主機上,而它的捲也只能存放在該宿主機的本地存儲上。但是使用共享存儲的虛擬機的捲是可以遷移到其他共享存儲上去的


二級存儲
二級存儲上存放的是ISO鏡像,模板,快照。
ISO鏡像:
就是操作系統的ISO文件,當我們創建虛擬機時,如果我們為虛擬機指定的是一個ISO鏡像,那麼當虛擬機啟動時,就會進入操作系統的安裝界面,按步驟安裝完操作系統以後,下次啟動虛擬機時就可以直接進入安裝好的操作系統中了。

模板:
使用ISO鏡像時,每次創建一台虛擬機都需要安裝一次操作系統,這顯然效率低下,我們可以把安裝完操作系統的虛擬機的捲作為模板上傳上去,創建虛擬機時選擇相應的虛擬機模板,創建出來的虛擬機就是安裝好操作系統的,啟動後可以直接進入操作系統。

快照:
我們可以在任意時刻對虛擬機的捲拍攝快照,然後把快照做成自定義模板,通過自定義模板創建出來的虛擬機的捲和拍攝快照時的虛擬機的捲是一模一樣的,我們可以通過這種方式在模板中預裝好一些常用的軟件或保存一些配置信息。
當我們在CloudStack創建虛擬機時,需要為其指定一個模板,虛擬機的ROOT卷就是通過從二級存儲上複製這個模板到主存儲上得到的,但一個主存儲第一次使用一個模板時,模板會從二級存儲上複製一份放到主存儲上,以後這個主存儲上的ROOT卷再使用這個模板時,就可以直接從主存儲上拷貝,無需每次都去二級存儲上拷貝。

CloudStack 的介紹

IAAS 虛擬化的好處

 

 

CloudStack 面向企業和服務提供商的IAAS雲基礎架構
CloudStack 是一個開源雲計算商業化解決方案。可以加速高伸縮性的公共和私有云(IaaS)的部署、管理、配置。使用CloudStack作為基礎,數據中心操作者可以快速方便的通過現存基礎架構創建雲服務。
主要功能:
• 通過資源池的方式對物理資源進行重新組織。
• 虛擬機生命週期管理,例如創建、啟動、休眠、喚醒、關閉、遷移、銷毀虛擬機
• 將常用的運行環境保存為虛擬機模板,可以方便地創建一系列相同或者是相似的運行環境
• 在計算資源允許的情況下提供高可用性、動態負載均衡、備份與恢復
• 對所有的物理機和虛擬機進行監控,生成報表並在必要的情況下發出預警
• 支持VM動態遷移
• 自動備份和恢復
• 報警機制
• 支持Amazon EC2/s3
• 跨數據中心
 

CloudStack 架構圖

epower-cloudstack-0-02.png

epower-cloudstack-0-03.png

epower-cloudstack-0-01.png

epower-cloudstack-2021-11-20-01.png

CloudStack 相關概念及術語如下:

Zone
Zone 對應於現實中的一個數據中心,它是CloudStack 中最大的一個單元。即從包含關係上來說,一個Zone 包含多個Pod,一個Pod 包含多個Cluster,一個Cluster 包含多個Host。

提供點(Pods)
一個提供點通常代表一個機架,機櫃裡面的主機在同一個子網,每個區域中必須包含一個或多個提供點,提供點中包含主機和主存儲服務器,預留的IP 範圍對雲中的每個區域來說必須唯一。

集群(Clusters)
Cluster 是多個主機組成的一個集群。同一個Cluster 中的主機有相同的硬件,相同的Hypervisor,和共用同樣的存儲。同一個Cluster 中的虛擬機,可以實現無中斷服務地從一個主機遷移到另外一個上。集群由一個或多個宿主機和一個或多個主要存儲服務器構成。集群的大小取決於下層虛擬機軟件。大多數情況下基本無建議。當使用VMware 時,每個VMware 集群都被vCenter 服務器管理。管理員必須在本產品中登記vCenter。每個Zone 下可以有多個vCenter 服務器。每個vCenter 服務器可能管理多個VMware 集群。

主機(Hosts)
Host 就是運行的虛擬機(VM)主機。

宿主機就是個獨立的計算機。宿主機運行來賓虛擬機並提供其相應的計算資源。每個宿主機都裝有虛擬機軟件來運行來賓虛擬機。比如一個開啟了kvm 支持的服務器,一個思傑XenServer 服務器,或者一個ESXi 服務器都可以作為宿主機。宿主機在CloudStack 部署中屬於最小的組織單元。宿主機包含於集群中,集群又屬於提供點,而區域中包含提供點(就是在邏輯概念上Zone>Pod>Cluster>Host ),宿主機對終端用戶不可見。終端用戶不能決定他們的虛擬機被分配到哪台宿主機。

CloudStack 中存在兩種存儲

HA

資源管理服務會為每個資源維護一個有限狀態機,資源可能的狀態如下:

DISABLED:HA操作禁用了或對應的資源沒有啟用HA操作;
AVAILABLE:如果一個資源的狀態是好的,而且滿足HA管理的條件,那麼它的狀態會變為AVAILABLE.
INELIGIBLE:如果一個資源HA狀態是好的,但是不支持HA檢查、恢復等操作,那麼它的狀態會變為INELIGIBLE.
SUSPECT:如果一個資源最近的健康檢查沒有通過,CloudStack會對其啟動失效檢測;如果若干次檢測之後,仍然沒有恢復,資源的狀態會轉變為FENCED。
DEGRADED:如果一個資源仍然可以為客戶提供服務,但是不能夠被控制平面管理,那麼它的狀態會變為DEGRADED。
CHECKING:如果管理服務正在對某個資源執行存活檢測,那麼資源的狀態會變為checking。如果檢測次數沒有超過最大的失效次數,那麼狀態變為RECOVERING,觸發恢復操作。根據檢測情況,資源也可能變為DEGRADED狀態,或變為SUSPECT狀態,再次觸發檢查操作。
RECOVERING:恢復操作是使資源重新恢復為健康的狀態,如果成功了,資源會重新初始化。如果失敗了,資源狀態變為FENCED。
FENCED:該狀態的資源無法自動恢復,需要管理員介入調查和恢復。因為這個狀態不是冪等的,後續會分為FENCING和FENCED。


為了維護資源的狀態,資源管理服務內部會維護如下的一下隊列:

INELIGIBLE:臨時、易失性的隊列,用於跟踪INELIGIBLE的資源;
HEALTH CHECK:臨時、易失性的隊列,用於跟踪那些處於INITIALIZATING, AVAILABLE, SUSPECT, DEGRADED,或FENCED狀態的資源
Activity Check:臨時、易失性的隊列,用於跟踪那些HA狀態為CHECKING狀態的資源;
Recovery:持久化的隊列,跟踪那些等待恢復的資源;
Fence:持久化的隊列,跟踪那些HA狀態為SUSPECT及RECOVERING的資源;

為了實現宿主機HA,管理服務會提供如下的管理API:

listHostHAConfigurations:列舉所有的HA相關的配置;
configureHAForHost:為宿主機配置HA相關的參數;
enableHAForHost:啟用HA操作;
disableHAForHost:禁用HA操作;


2.2 HA提供者
HA資源管理服務維護資源的狀態機,並決定什麼時候進行評估。HA提供者則通過下面的接口來決定狀態轉換是否應該發生。

isEligible:判斷HA提供者是否能夠對資源執行HA相關的操作;
isHealthy:判斷資源的連通性並嘗試通過API對其進行操作;
hasActivity:檢測是否功能正常,但是不能通過API進行操作;
recover:執行改變狀態的操作(如:通過IPMI重置電源狀態)
fence:執行操作隔離那些不能恢復的資源(如:通過IPMI將主機關機),防止錯誤蔓延;


HA提供者提供瞭如下的參數來控制HA相關的操作:

Minimum Recovery Time:恢復成功最少需要多長時間;
Recovery Timeout:恢復操作最長需要多長時間;
Maximum Recovery Attempts:最多嘗試多少次恢復操作;
Minimum Fence Time:隔離成功最少需要多長時間;
Fence Timeout:隔離操作最長需要多長時間;
Activity Check Interval:Activity檢查週期;
Health Check Timeout:健康檢查超時時間;

2.2.1 KVM HA提供者
KVM HA提供者採用STONITH(Shoot the Other Node in the Head)隔離模式。KVM HA提供者會跨越整個集群進行操作。如果檢測到宿主機沒有磁盤活動,宿主機就會變為DOWN。HA提供者通過查詢存儲子系統來判斷主機的磁盤活動;

Apache CloudStack 4.16.0.0

Apache CloudStack 4.16.0.0 正式發布,該版本是一個 LTS 版本,包含 22 個主要的新功能,以及自 4.15 版本以來的 244 個改進和修復。

本次更新的一些重點內容包括:

CloudStack 無法新增模板和iso

做了N久的CloudStack二次開發,最近越來越多的人開始使用CloudStack。

通常會遇到添加模板和iso不成功的問題。

表現為註冊了template/iso之後,"已就緒" "狀態" "大小" 等選項都為空,或者提示no route to host等現象

CloudStack是通過SSVM進行template/iso上傳和下載,所以基本可以判定為SSVM網絡有問題

這樣就可以做以下檢查:

1、內建模板不存在("已就緒" "狀態" "大小" 等選項都為空多發生在這種情況):

  CS默認有2種模板,系統虛擬機模板[SystemVM Template (XenServer)]和內建模板[ CentOS 5.6(64-bit) no GUI (XenServer)]

  在ssvm正常啟動之後,會連接management-server 的8250端口,成功連接後,UI上就可以看到以上兩個模板。

  如果此時沒有內建模板的信息,則說明ssvm沒能正常連接management-server。

  這種情況多會發生在全局配置錯誤。相關項為:management.network.cidr,host,secstorage.allowed.internal.cidr

  <1> 如果management-server存在多個網卡,默認cloudstack會選擇route中為default的那個網卡設置management.network.cidr和host,如果該項並非用來連接host和ssvm private ip的網絡,則需要修改為正確網絡,ssvm啟動後,會根據這兩個值來配置路由表,如果錯誤則無法連接到management-server。

         解決方案:這種情況需要修改全局配置後,重啟management-server,然後破壞掉ssvm,等待系統重建

   <2>secstorage.allowed.internal.cidr 設置為0.0.0.0/0

         經常會發生在網絡情況比較單一的環境,比如基本模式或者高級模式但是public ip和private ip在同一網段中,會導致SSVM路由表錯誤,正常SSVM路由default 網卡為eth2,即public,此時會變為eth1,即private,由於其防火牆限制,導致無法上傳或下載模板

解決方案:這種情況需要修改全局配置,將secstorage.allowed.internal.cidr設為正確值,如果有多個cidr可以用逗號分隔,重啟management-server,然後重啟ssvm

2、內建模板已存在

   內建模板已經顯示在UI上,說明SSVM已經成功連接到management-server。

   至於內建模板,我這裡下載基本上不會成功,原因大體就是因為網速太慢,半天下一點,斷了重新下。可以嘗試在db中修改url從本地下載。

   <1> no route to host

        這種情況多發生在SSVM的public和private在同一網段的情況下,很多人的測試環境受實際因素影響,並不能隔離public和private,而是都使用同一網段。並且上傳template/iso所用的http server也在同一網段。

CS默認會通過public ip進行下載,如果http server和private ip處於同一網段的時候,則會嘗試使用private ip進行下載。由於很多新人剛剛使用CS的時候,並不知道還有secstorage.allowed.internal.cidr 這樣的全局配置,所以並未進行相關設置,這樣就會導致private ip被防火牆阻攔而無法進行下載

解決方案:將private ip所在網段的cidr寫入secstorage.allowed.internal.cidr ,並重啟ms,重啟SSVM

   <2> 有人發現有此選項,但為求省事,設置secstorage.allowed.internal.cidr 為0.0.0.0/0

此項設置並不符合CS的設計,不過大部分環境中可以正常使用,所以也少有人會注意到全局設置中的不能設置為0.0.0.0的提示。

       如1.2中所描述的環境,則很有可能會出現路由表錯誤而無法正常使用的問題。

   <3> 下載一半後中斷,無法繼續下載。

此種情況見過多次,但是自己的環境中並未重現。

跟踪代碼發現下載流的size不能滿足默認大小,可以試著嘗試修改SSVM的service_offering,增加SSVM的內存。這個僅為猜測,有待將來重現後再進行跟踪調試

常識備註

雲計算三種服務模式
IAAS infrastructure as a service 基礎設施即服務(提供計算,存儲,網絡等基礎資源)
PAAS platform as a service 平台即服務(除了提供基礎資源,還包括應用軟件運行所需的環境)
SAAS software as a service 應用軟件即服務(直接為用戶提供應用服務。比如163郵箱。)

cloudstack大致屬於第二種PAAS






資源域Zone

什麼是資源域?
資源域是CloudStack™ 部署中最大的組織單位。雖然允許一個數據中心中存在多個資源域,但是一個資源域通常與一個數據中心相對應。將基礎架構編組到資源域中的好處是可以提供物理隔離和冗餘。例如,每個資源域都可以擁有各自的電源供應和網絡上行方案,並且各資源域可以在地理位置上相隔很遠(雖然並非必須相隔很遠)。
提供點Pod

什麼是提供點?
一個提供點通常代表一個機架。同一提供點中的主機位於同一子網中。
提供點是CloudStack™ 部署中的第二大組織單位。提供點包含在資源域中。每個資源域中可以包含一個或多個提供點;在基本安裝中,您的資源域中將僅包含一個提供點。
提供點網絡管理網絡一般是局域網,外部不可訪問。
群集Cluster

什麼是群集?
群集提供了一種編組主機的方法。群集中的所有主機都具有相同的硬件,運行相同的虛擬機管理程序,位於同一子網中,並訪問相同的共享存儲。可以實時將虛擬機實例(VM)從一台主機遷移到同一群集內的其他主機,而無需中斷向用戶提供服務。群集是CloudStack™ 部署中的第三大組織單位。群集包含在提供點中,提供點包含在資源域中。

CloudStack™ 允許雲部署中存在多個群集,但對於基本安裝,我們只需要一個群集。
主機Host

什麼是主機?
主機是指一台計算機。主機提供運行來賓虛擬機的計算資源。每台主機上都安裝有虛擬機管理程序軟件,用於管理來賓VM (裸機主機除外,將在“高級安裝指南”中討論這一特殊案例)。例如,啟用了KVM 的Linux 服務器、Citrix XenServer 服務器和ESXi 服務器都可用作主機。在基本安裝中,我們將使用一台運行XenServer 的主機。
主機是CloudStack™ 部署中最小的組織單位。主機包含在群集中,群集包含在提供點中,提供點包含在資源域中。

主存儲

什麼是主存儲?
CloudStack™ 雲基礎架構使用以下兩種類型的存儲: 主存儲和二級存儲。這兩種類型的存儲可以是iSCSI 或NFS 服務器,也可以是本地磁盤。
主存儲與群集相關聯,用於存儲該群集中的主機上正在運行的所有VM 對應的每個來賓VM 的磁盤捲。主存儲服務器通常位於靠近主機的位置。

二級存儲

什麼是二級存儲?
二級存儲與資源域相關聯,用於存儲以下項目:
模板- 可用於啟動VM 並可以包含其他配置信息(例如,已安裝的應用程序)的操作系統映像
ISO 映像- 可重新啟動或不可重新啟動的操作系統映像
磁盤捲快照- 已保存的VM 數據副本,可用於執行數據恢復或創建新模板








1. HA主機不能用來啟動普通虛機,只能用來啟動設置了HA的虛擬機,因此要注意不能把所有的主機都打上hahosttag標籤.

2. 計算方案設置主機標籤的話,如果沒有對應標籤的主機,使用該計算方案的虛擬機創建會失敗.

3. 磁盤方案設置標籤的話,沒有對應的主存儲。使用該計算方案創建虛擬機也會失敗。

4. 主機添加完成編輯/etc/cloudstack/agent/agent.properties 文件修改該宿主機上CPU型號後,重啟cloudstack-agent,運行在其上的虛擬機需要先停止,再啟動,CPU型號才會發生改變。

5. 虛擬機停止後才可以遷移虛擬機到另一個主存儲。但是遷移到另一個主機就要方便得多,不需要先停止虛擬主機。

6. WindowsServer2008R2虛擬機的IP無法使用DHCP正常獲取。最好設置靜態IP,使用自動獲取IP的話,重新啟動虛擬機,該虛擬機的DHCP服務器會設置成默認網關,從而取到不正確的IP。

7. 使用固定IP創建的模板,雖然每次創建新虛擬主機都要重新設置IP地址,但是網絡可以正常連接。

8. 同一個提供點只能屬於一個CIDR,簡單理解為一個網關和一個子網掩碼。如果要使用一個網關和子網掩碼設置多個提供點,需修改全局設置check.pod.cidrs

9. 設置管理或來賓IP範圍時,根據子網掩碼的設置,可以設置較特殊的範圍。如子網掩碼255.255.0.0,,可以設置192.168. 10.20-192.168.210.220這樣的範圍

10. 來賓IP範圍重新設置需要到數據庫進行。cloud庫的vlan表ip4_range字段字符串格式。修改後要重啟cloudstack-management。好像沒什麼太大用,只是顯示可用IP範圍變了,實際可使用IP範圍無變化。

11. 虛擬機的IP 實際上是通過綁定一個NIC對象來顯示使用IP的。一個NIC 對象包括ID 網絡名稱類型IP地址網關網絡掩碼等。

一些理論

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),是這些賬戶專屬的資源,其他用戶無權使用。
使用該特定賬戶登錄,創建虛擬機時,該用戶可以選擇將虛擬機創建在專屬的資源中,還是非專屬的資源中。

OpenStack 與 CloudStack 比較

OpenStack 介紹

OpenStack是一個美國國家航空航天局和Rackspace合作研發的,以Apache許可證授權,並且是一個自由軟件和開放源代碼項目。

OpenStack主要包括以下幾個子項目:OpenStack Compute(Nova)、雲對象存儲Cloud ObjectStorage(Swift)、鏡像管理 (Glance)、身份識別Identity(Keystone),網絡連接管理Network Connectivity(Quantum)、Web管理界面DashBoard等。

目前有超過150家公司參與了Openstack項目,包括HP,Dell,AMD,Intel,Cisco,Citrix等公司,國內有如新浪、華勝天成、H3C等公司也參與了OpenStack項目。此外微軟在2010年10月表示支持OpenStack 與Windows Server 2008 R2的整合,而Ubuntu在11.04版本中已開始集成OpenStack。OpenStack是目前最受關注與支持的開源雲計算平臺之一。

OpenStack 以Python編寫,這意味着相比其他以C/C++或Java編寫的開源雲計算平臺,OpenStack更容易修改與調試等。OpenStack整合了Tornado網頁服務器、Nebula運算平臺,使用Twisted框架,目前OpenStack支持的虛擬機宿主包括KVM,XEN,VirtualBox,QEMU,LXC等。


CloudStack
介紹

CloudStack是新加入到Apache基金會中的開源雲計算平臺。CloudStack開發語言爲Java,此前爲Cloud.com研發應用的商業軟件,此後被Citrix思傑收購,2012年4月5日思傑宣佈將CloudStack項目提交至Apache基金會,CloudStack成爲Apache許可下的完全開源軟件。

CloudStack平臺可以加速高伸縮性的公共和私有云(IaaS)的部署、管理、配置。其最新版本的CloudStack 3頗具Amazon亞馬遜風格,它幫助那些希望效仿全球最成功雲平臺來構建雲設施的企業用戶,快速而輕鬆地將虛擬數據中心資源轉入自動化、富於彈性且可自我服務的雲平臺中。另外,CloudStack兼容亞馬遜API接口,允許跨CloudStack和亞馬遜平臺實現負載兼容。使用CloudStack作爲基礎,數據中心操作者可以快速方便的通過現存基礎架構創建雲服務。

 

OpenStack 與CloudStack的比較

2012年4月5日Citrix宣佈將CloudStack開源軟件加入到Apache軟件基金會,CloudStack與OpenStack同成爲Apache許可下的完全開源雲計算平臺,同時也成爲OpenStack最有力的競爭對手。

截至目前OpenStack在市場宣傳、影響力方面遠勝過CloudStack,支持夥伴、社區開發人數及討論話題數、活躍程度等也高於CloudStack,但CloudStack的平臺成熟度要優於OpenStack,CloudStack的用戶體驗及安裝容易度也都比OpenStack要好,並已在更具生產實際的環境中得到了充分驗證,而OpenStack到目前爲止則更像是仍處於研發階段難以稱爲“成熟的產品化的IT產品”。



整體比較

比較項

CloudStack

OpenStack

服務層次

IaaS

IaaS

授權協議

Apache 2.0

Apache 2.0

許可證

不需要

不需要

動態資源調配

主機Maintainance模式下自動遷移VM

無現成功能,需通過Nova-scheduler組件自己實現

VM模板

支持

支持

VM Console

支持

支持

開發語言

Java

Python

用戶界面

Web Console,功能較完善

DashBoard,較簡單

負載均衡

軟件負載均衡(Virtual Router)、硬件負載均衡

軟件負載均衡(Nova-network或 OpenStack Load Balance API)、硬件負載均衡

虛擬化技術

XenServer,Oracle VM,vCenter,KVM,Bare Metal

XenServer,Oracle VM,KVM,QEMU,ESX/ESXi,LXC(Liunx Container)等

最小化部署

一管理節點,一主機節點

支持All in one(Nova,Keystone,Glance組件必選)

支持數據庫

MySQL

PostgreSQL,MySQL,SQLite

組件

Console Proxy VM,Second Storage VM,Virtual Router VM,Host Agent,Management Server

Nova,Glance,Keystone,Horizon,Swift

網絡形式

Isolation(VLAN),Share

VLAN,FLAT,FLATDhcp

版本問題

版本發佈穩定,不存在兼容性問題

存在各版本兼容性問題

VLAN

不能VLAN間互訪

支持VLAN間互訪

 

實際安裝與運行測試的比較

1.  OpenStack文檔資料數相對於CloudStack較多,且安裝過程等講解較具體。但是因爲不同版本間OpenStack可能差異較大,如果實際安裝版本與文檔中使用版本不一致可能會遇到問題。

2.  OpenStack安裝過程較複雜,尤其是網絡配置部分比較麻煩,而這方面資料較少,講解不夠具體。CloudStack安裝過程較簡單,但是後續運行中各種配置等問題相關文檔少有提及。

3.  OpenStack 的Web 管理界面DashBoard目前爲止較簡單,可能存在bug也較多,但中文翻譯較好,並提供一些幫助信息;CloudStack的Web管理界面功能較多,但中文翻譯不徹底,缺少幫助提示等信息。兩者使用Web界面管理均出現類似刪除虛擬機一直刪除不掉等問題。

4.  測試發現OpenStack可超載創建虛擬機,但所創建虛擬機經常出現無法啓動的情況。而CloudStack對虛擬機的資源佔用管理較嚴格,無法超載創建虛擬機,因此對主機節點的硬件配置要求較高。

5.  CloudStack支持通過模板(Template)或ISO創建虛擬機,但上傳模板、ISO及創建虛擬機等過程均耗時較長;OpenStack在實驗過程中爲直接從網上下載img文件創建虛擬機,耗時很短即可創建成功。

6.  兩者創建的虛擬機均可以通過Web管理界面進入管理,但測試中OpenStack創建的虛擬機雖然附加了局域網IP,但網卡實際綁定IP爲私有IP,未找到如何通過SSH直接訪問的辦法。CloudStack創建的虛擬機使用了分配的Guest IP,可通過SSH連接訪問。