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,然后平稳过度到生产环境,最后要定期做备份.
 » 转载请注明来源:CloudStack中文社区
 » 本文链接地址:http://www.cloudstack-china.org/2012/07/89.html

深入了解CloudStack中的网络设计

网络的设计规划是CloudStack的一个亮点,也是CloudStack被广泛商业应用的一个主要原因.本篇深入讨论一下CloudStack中网络的设计方式.
CloudStack中根据不同的数据流量类型设计了管理,公共,客户及存储网络,可以简称为PMGS ( Public, Management, Guest, Storage) 网络.
Public:当虚拟机需要访问Internet或外部网络时,需要通过公共网络;这就说明客户虚拟机必须被分配某种形式的外网IP.用户可以在CloudStack的UI上获得一个IP来做NAT映射,也可以在Guest与Public之间做负载均衡.所有的Hypervisor都需要共享Public VLan以保证虚拟机对外的访问.
Management:CloudStack内部资源相互通信会产生Management流量,这些流量包括管理服务器节点与Hypervisor集群之间的通信,与系统虚拟机之间的通信或与其它组件之间的通信等;集群规模较小时管理流量只占用很少的带宽.
Guest:最终用户运行CloudStack创建的虚拟机实例时产生Guest流量,虚拟机实例之间的相互通信通过客户网络.
Storage:主存储与Hypervisor之间互连互通的流量;主存储与二级存储之间也会产生Stroage流量,比如虚拟机模板和快照的搬移.
CloudStack中网络模式可以分成基本网络和高级网络两种.其中MGS(Management,Guest,Storage)三种网络对于基本网络及高级网络通用.而P(Public)则只是针对高级网络才存在.可以对比下图:

基本网络 vs 高级网络

这里强烈建议不同的流量类型单独设置网卡,而对于存储网络最好用网卡绑定(NIC bonding),这样在系统的稳定性和性能方面都会有极大的提高.
基本网络模式下IP地址规划
如果打算使用基本网络模式建立CloudStack云计算环境,那就意味着客户虚拟机实例将会和CloudStack,Hypervisor整体架构拥有相同的CIDR段.这样在规划IP地址时每个资源域都要预留足够的IP地址.假设你规划有8个资源域,每个资源域容纳2000台虚拟机,那IP地址CIDR可规划成192.168.0.0/20,这样能保证最多16个资源域,每个资源域IP数量有2^12-1=4095个,除去机架,系统虚拟机,主机占用的IP,提供2000个VM的IP绰绰有余.
注:具体环境中采用哪个段的IP地址可能要与IT环境相一致.
高级网络模式下的IP地址规划
高级网络模式相对来说较为复杂,在这种模式下,每个账号都要分配:
1. 公网IP,这为了保证对外网的访问,通常这个IP设置在虚拟路由器上
2. Guest网络IP范围,比如默认的:10.1.1.0/24
3. Guest网络隔离的VLan ID
以上默认的Guest网络IP范围对于所有账户都是一样的,只有管理员可以进行更改使不同账号使用不同的的Guest网络IP范围.
一个账户下的客户虚拟机实例通过它专属的VLan进行相互之间的访问或与这个账户的虚拟路由器互通.客户虚拟机可以运行在资源域内任意一台主机上;通过二层交换的VLan端口汇聚(Trunk)功能,可以保证同一个VLan下所有的虚拟机互连互通.
预留系统IP地址
当配置一个机架时,需要为系统虚拟机保留一些IP地址,这部分是管理网络也称为私有IP地址.通常情况下10个IP地址对一个机架是足够用了.这些IP地址会被SSVM(二级存储系统虚机)和CPVM(控制台系统虚机).如果系统很庞大,CPVM会被自动部署多台来分担负载.
在整个云计算环境中,所有的主机和系统虚拟机都必须有一个唯一的IP地址,因此在添加新的资源域时,也需要考虑当前环境中资源域的网络规划.
本地链路IP(Link-Local)
在使用XenServer或KVM作为主机时,系统虚拟机(SSVM,CPVM,V-Router)会被分配一个本地链路的IP地址.这个地址的CIDR是169.254.0.0/16;这样看来本地链路的IP地址会有2^16-1=65535个,目前来看不太可能超过这个范围.如果一个机架只包含XenServer或KVM的集群,那可以分配给这个机架下的主机一个C类段的地址形如:x.x.x.x/24.如果是VMWare的集群,给机架分配的IP地址范围会被系统虚拟机占用一些那么就要考虑比C类段大一些的范围作为机架的IP地址段,形如:x.x.x.x/21,这样会有2^11-2=2046个IP供给主机,存储以及系统虚拟机使用.
虚拟机隔离
在同一个资源域内,虚拟机有两种方式进行隔离:安全组和VLAN.
安全组隔离
当使用安全组时,每一个创建的账户都会有一个默认的安全组生成,以保证通过这个账户创建的虚拟机实例默认要以互连互通.当用户创建虚拟机实例后,可以对这些虚拟机实例设定一个或多个安全组.
用户可以在任意时间创建额外的安全组,但正在运行中的此用户的实例不能应用新建的安全组规则,需要关机后更改设置.
同一个安全组下的用户虚拟机实例可以相互通信.安全组通过Ingress和Egress来进行流量控制.
VLAN
高级网络模式中默认是通过VLAN进行虚拟机实例之间的相互隔离.当一个账户的第一个虚拟机被创建并运行时,一个隔离的网络也同时创建完成.在一个资源域下,一个账户的虚拟机网络默认的CIDR配置:10.1.1.0/24;在整个云环境中,只有系统管理员有权限创建一个隔离的客户虚拟机网络,并指定一个IP范围和一个VLAN.
CloudStack中网络是较为复杂的一部分,功能也十分强大,特别是高级网络模式,这里建议大家参考CloudStack3.0的相关文档来更清楚的了解网络部分.
参考资料:
CloudStack3.0 Quick Install Guide
CloudStack3.0 Advanced Install Guide
CloudStack3.0 Administration Guide
» 转载请注明来源:CloudStack中文社区
» 本文链接地址:http://www.cloudstack-china.org/2012/07/191.html

CloudStack中的存储概念

出于对性能及总拥有成本考虑,CloudStack中把存储分成两类:主存储和二级存储.
主存储主要是用来保存虚拟机实例的卷,供虚拟机运行时使用.对性能要求高,最好拥有较高的IOPS; 一个主存储设备是被一个CloudStack集群内所有主机可共享访问的.主存储要支持存储分级功能.对于主存储,CloudStack支持NFS,本地存储(某些功能不可用),iSCSI,FC-SAN等存储协议,性能也是由低到高.
二级存储用来保存一次写多次读的数据,比如模板,ISO,快照等数据,二级存储对IOPS要求并非像主存储那样高,但所存储的数据比较大,因此需要较大的容量.目前二级存储只支持NFS,对于Swift的支持正在添加,长远来看有可能支持其它的分布式文件系统如HDFS,Ceph等.
CloudStack管理节点用来提供对主存储及二级存储的综合管理,配置及使用,这两种存储在云环境中的可用下图表示:

CloudStack支持的各种Hypervisor对于上述提到的主存储支持与否可见下表:

类型 XenServer ESXi KVM
本地存储 支持 支持 支持
iSCSI 支持 支持 不支持
FC-SAN 支持 支持 不支持
NFS 支持 支持 支持

 
 
 
另外,主存储通过标签来支持存储分级,这个功能会被广泛使用,特别是在公有云或混合云环境中.在CloudStack的集群中,主存储可以有多个异构的,也就是同时有NFS, iSCSI和FC-SAN,这些主存储加入到集群时可以分别打上”nfs”,”iscsi”和”fc-san”的标签,然后创建磁盘方案时选择用对应的存储标签,从而可以将创建的虚拟机指定主存储的位置.对于服务提供商来讲可以通过存储的分级来提供不同的性能,不同售价,不同SLA.

 » 转载请注明来源:CloudStack中文社区

CloudStack常用术语解释

您可能会在用户界面,帮助和文档里遇到下列术语。了解这些关键术语将对你建立私有云或混合云有莫大的帮助。
account (账户)
一个CloudStack账户是服务提供商的一个客户或一个大型组织结构中的一个部门. 账户是CloudStack里的最小隔离单元: 在一个账户里,所有的用户可以共享数据和其它资源,而这在另一账户里是不可见的.在CloudStack里账户(Account)与用户(User)是不同的概念.可以把一系列用户看成是账户的别名.在许多安装部署中并不会特别在意用户,只要保证每个账户有一个用户即可.
cluster(集群)
由一个或多个物理主机组成,它们使用指定的存储.在主机上运行Hypervisor软件.它们的存储可以是主机自身的(也就是与Hypervisor在同一台机器上),但更为常见的是使用共享存储,比如NAS,这样就可以提供更好的可靠性和高可用性(HA).
disk offering(硬盘方案)
预定义的一定量的存储空间设置,用户在创建虚拟机实例的时候可以指定一个数据盘使用这个存储设置.管理员可以定义一个或多个这样的存储设置供用户选择–比如小型,中型或大型存储空间–这里的”小型”和”大型”的不同完全由管理员决定.数据盘在整个虚拟机实例的生命周期是比较短暂的,但通过CloudStack提供的快照功能,可以提供数据盘的持久化复本.
domain(域)
一组账户属于一个域.可以认为一个域包含了有逻辑关系的一组账户.比如,一个服务提供商为几个经销商服务,可以为每个经销商创建一个域.在一个经销商内部可以有一系列的账户为这个经销商的客户服务.一个域通常会有一个或多个域管理员,域管理员拥有这个域及其子域的控制权限.
domain administrator(域管理员)
一个域管理员是整个系统中比其它用户拥有更多权限的用户.例如,域管理员可以在这个域的范围内创建新的账户.域管理员可以访问只属于管理员域的虚拟资源.
global administrator(全局管理员)
全局管理员账户是整个系统中拥有最多权限的的用户,它等同于系统中的根用户(Linux中的root).它可以使用云环境中的所有功能,包括虚拟资源和物理资源的管理,可以创建或删除系统中其它用户.
host(主机)
主机是提供虚拟机运行所需要资源的环境.通常可以认为主机包含计算机及所需的服务端软件.比如,一台安装KVM套件的Linux服务器,一台Citrix的XenServer或一台ESXi服务器都是一个主机.主机提供了虚拟机运行所需的所有的CPU,内存,存储及网络资源.它们通过高带宽的TCP/IP进行互连以及连接到因特网.它们可以驻留在不同的数据中心,可以在不同的地理位置上.它们可以有不同的能力,比如,不能的CPU主频,不同数据量的内存等.它们通常使用高性能的硬件用来保证单一主机的可靠性,但在一个大规模的部署中,是允许有部分主机有故障出现.
hypervisor(虚拟化套件)
它是一个可以监控同一主机上多个虚拟机实例的软件. VMWare的VSphere, XenServer®,以及KVM都是这类软件.这个术语并非CloudStack独有.
IaaS
基础设施即服务(Infrastructure as a Service的缩写),这个术语并非CloudStack独有. 维基百科认为IaaS是云计算的代名词,它给的定义是”通过计算机网络按需供给计算资源”.CloudStack只是提供软件而不包含硬件,所以对于CloudStack来讲定义成IMaaS或IAaaS更为合适.
注: IMaaS或IAaaS指(基础设施管理即服务).
Management Server(管理服务器)
一个管理服务器提供了管理员的用户Web界面.
管理分配到主机的虚拟机.
管理分配给账户的公有或私有IP地址.
管理分配给虚拟机映像的存储.
管理快照,模板,ISO映像,并可能在多个数据中心进行复制.
network offering(网络方案)
是通过虚拟路由器或外部网络设备提供给最终用户的一组网络功能集合描述.它不像磁盘方案或计算方案,网络方案是CloudStack定义的而非管理员定义.
offering(方案)
参照磁盘方案,计算方案和网络方案.
pod(机架)
一组集群,与一个数据中心的一个物理机架的概念相似..
role(角色)
一组预定义的功能,根据用户被授予的权限,可以对登入系统的用户提供三种角色:
全局管理员
域管理员
用户
service offering(计算方案)
一些预定义好的虚拟硬件属性,包括CPU频率,CPU核数,内存大小等,用户可以选择相应的计算方案来创建一个新的虚拟机实例或是更改一个已有虚拟机的实例.管理员可以定义一个或多个计算方案来供用户选择,比如,小型,中型或大型实例,这里的”小型”和”大型”的不同完全有管理员来决定.
template(模板)
用户创建新的虚拟机时可供选择的基础操作系统镜像. 模板由管理员创建.比如,CloudStack默认情况下包含一个CentOS的模板可供使用. 目前所有流行的Linux及Windows操作系统版本都被支持用来做模板.
user(用户)
与计算机软件交互的人.一个账户和一个用户在CloudStack中是不一样的术语.一个账户下可以创建多个用户,也就是多个用户可以同属一个账户,但通常情况下是单个用户对应一个账户.用户更像是账户的别名.同一个账户下的用户可以访问分配给这个账户的所有资源.
zone(资源域)
由一组机架组成,一个数据中心通常等同于一个资源域.
 » 转载请注明来源:CloudStack中文社区
 » 本文链接地址:http://www.cloudstack-china.org/2012/07/123.html