关于cloudstack中的一些理论和常见问题

来源:互联网 发布:2016淘宝趋势 编辑:程序博客网 时间:2024/06/03 20:42
一些理论:
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



l  template目录存放的是cloudstack所管理的模板。目录结构为:template/tmpl/userid/templateid/templatefile。第一次从模板创建vm的过程,需要把secondary storage挂载到management server,然后由management server通过hyperviser向primary storage中复制模板,将template目录下的相应文件复制到primary storage中,然后将复制过去的文件标记为模板,之后再次通过该template创建的vm,都会直接从模板复制一个新的磁盘挂载到vm上作为主磁盘。

下载模板时,会由ssvm挂载相应目录,将文件link到/var/www/userdata下,并生成链接存放到db中,提供给用户进行下载。

跨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重建即可保证此项操作顺利进行。



l  snapshots存放的是vm某磁盘的快照。目录结构为:snapshots/userid/templateid/snapshotfile。创建snapshot的时候,会先从hyperviser层创建snapshot,然后将secondary storage mount到ssvm,之后创建完整的文件存储路径,将snapshot文件复制到secondary storage相应目录中。下载snapshot的时候,会由ssvm挂载相应目录,将文件link到/var/www/userdata下,并生成链接存放到db中,提供给用户下载。

l  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运维常见问题及解决办法

CloudStack 2.2.y目前已经在生产环境广泛部署,CloudStack3.0.x由于还在深度开发,目前并未大规模进行商业应用.
以下就CloudStack2.2.y在安装,运维中出现的常见问题进行汇总,并给出相应的办法绕开问题.

1. CloudStack的高可用性(HA)功能欠佳

CloudStack针对设置了HA的VM,要提供VM在异常停止状态下自动重新启动.由于HA整体逻辑较为复杂,分为investigation->Fencing->Restart三个步骤.异常断电,网络闪断的情况下investigator需要一段时间来确定VM状态是否是运行,停止或未知,在未知的情况下需要对VM访问的资源,特别是存储卷进行隔断的操作.在保证隔断操作成功的基础上,可以认为VM已经停止,可以重新启动.这里所做的一切是为了保证同一时间同一个VM只可能有一个是在Running状态,避免对存储卷造成损坏.
目前CloudStack的HA功能并不能保证触发HA的VM一定能最终成功运行.这里需要保证主机硬件,电源及网络设备正常运转,特别是保证网络稳定.一旦发生多台断电断网的情况,可以试着让CloudStack通过HA自动恢复,如果在一定时间内(小于15分钟)无法正常恢复,需要手动更改数据库,使状态为关机,然后再启动虚拟机.CloudStack3.0规划将会使用Hypervisor提供的HA,稳定性会得到增强,但天下没有免费的午餐,拥有HA功能的Hypervisor版本售价也会更高.

2.CloudStack中对虚拟机进行网络限速

CloudStack中默认的网络限速无法满足需要(200Mbit/s).这时需要调整全局配置参数:network.throttling.rate与vm.throtting.rate来增加带宽.但目前还无法针对不同的VM设置不同的网络带宽,只能寄希望与该功能会加入到VM的服务方案里的可编辑选项,这样可以保证对VM网络访问带宽进行定制.

3.CloudStack中VLan规划结束,无法进行扩展

在最初建立资源域时,需要设定好guest网络的VLan,这是一个范围,一旦设定好,guest网络可用的VLan也就定死了,无法动态扩展.实在需要的话,只能通过更改数据库: 修改表data_center和op_dc_vnet_alloc可以达到这个目的,不是很友好.

4.跨资源域复制模板和ISO失败

由于权限问题,无法在资源域之间复制模板及ISO,可以通过更改二级存储系统虚机(SSVM)中二级存储挂载的目录的.htacess文件,将需要访问的IP加到allow里

5.在系统某些资源快达到临界(threshold)时,创建VM失败

系统有多个主存储,某些主存储接近threshold设置时,新建带数据盘的VM总是失败,即使有些主存储还有足够的capacity也不行.这主要是CloudStack检查存储能力的时候,对于ROOT和DATA的卷分开检查,这将导致ROOT+DATA的存储超过所要分配的主存储,显然这种方式不正确.目前可以通过调整全局配置storage.allocated.capacity.threshold来暂时解决,但最终需要两种解决方法: a> 通过ROOT + DATA的总量来确定分配的主存储 b>更合理的方式是ROOT,DATA分开检查,每个检查成功后要预保留空间,以免出现NotEnoughSpaceException,同时,ROOT及DATA可以在不同的主存储上分配

6. XenServer与某些主机板载网卡兼容性问题

主要表现是带VLan的ARP包无法经物理机到达虚拟机,据查是XenServer与某些Intel 82576网卡存储兼容性问题,最终通过升级网卡驱动得以解决.因此希望在选择硬件时,参照一下相应Hypervisor的HCL列表

7. XenServer不支持某些类型的操作系统

对于像Ubuntu10.04,CentOS5.6等一些操作系统,不支持PV虚拟化,这时要使用这些OS来创建模板,需要选择Other 64bit/32bit,这时虚拟将运行在HVM模式下.性能会有一部分损失.对于一些OS,XenServer官方不支持,比如BSD,也不建议尝试

8. XenServer Emergency Mode

由于网络配置,闪断等问题导致管理网络通讯断开,在网络恢复后发现部分XenServer网卡信息丢失,重启主机也无效.其主要原因是XenServer pool slave长时间无法连接Pool Master然后进入自保护模式,也就是emergency mode.
目前的解决方式是在每一台丢失网卡信息的主机上支持指令:xe pool-emergency-transition-to-master,因此这里也再次强调网络稳定对于CloudStack的重要性

9. 虚拟机HA失败,虚拟机状态不一致

仍然是由于大面积断网后,系统尝试HA但部分VM HA失败,导致VM的状态与真实情况不一致.这种情况下需要在数据库中手动恢复.

10. 建立特大卷的快照/模板超时

原因:
1>本身在代码里限定了超时时间为120分钟
2>主机与二级存储之间的传输速度太慢<10M/s
3>全量备份时使用了vdi.copy,这个方法不仅做拷贝,还要校验及合并等操作,非常慢
目前的方法是保证部署架构里二级存储足够快,适当调整全量快照与增量快照的比率

11. VMWare集群中系统虚拟机无法创建

首先检查网络配置上是否正确,系统VM是在管理服务器上挂载二级存储,并通过https协议将系统VM的模板PUT到ESXi中,这里要确定管理服务器对二级存储的访问权限以及SSVM对二级存储的挂载权限

从上面生产环境中运维的问题可以看到,CloudStack要在部署之前做好整合规划并做兼容性测试,同时保持网络稳定,在目前CloudStack的版本中,谨慎使用HA功能,建议在正式上线前先做Staging Cluster,然后平稳过度到生产环境,最后要定期做备份





首先,你来明白一个问题,关联性组(Affinity Groups)是用来干嘛的。
关联性组是cloudstack提供的一个特性,用于保证同一个关联性组中的VM,创建并运行在不同的物理主机中(必须的),你只有一台主机,却要把属于同一个组中的2台VM都创建在这一台主机中,不满足CS的逻辑,所以必然失败。  
应用场景:
分别创建名称为web,db,app的关联性组,根据用途进行创建。那么,你创建的所有属于web关联性组的虚拟机,则表示跑的应用是web应用,这样,保证同样应用的VM,不会运行在相同的主机中。
用途?
你希望你跑web、db的虚拟机应用全部运行在同一个主机中?万一这台主机挂了,所有的db应用全部停止?给你分离在不同的主机中,至少能保证,主机挂了,运行在其他主机中的相同应用还可以正常工作,最小程度减少因为不可控因素带来的问题!

福利:
你关注下你创建的关联性组其类型为:host anti-affinity。其应用场景如上面介绍。
还有一种特殊的关联组,类型为:ExplicitDedication。从字面意思可以理解,明确的专属资源。一般在cs里面,我们可以把一个区域、一个提供点、一个群集甚至一台主机,设置为专属资源。意思就是说,在一个大的资源池中,划分一部分资源,给特定的账户(account),是这些账户专属的资源,其他用户无权使用。
使用该特定账户登录,创建虚拟机时,该用户可以选择将虚拟机创建在专属的资源中,还是非专属的资源中。
应用场景,明白?
0 0
原创粉丝点击