物理资源是虚拟化的基础设施, 对这些资源的监控及有效利用可以体现一个平台的价值; 同时监控的时效性,准确性直接影响你对资源的操作。CloudStack非常强大,它可以管理的Hypervisor包括XerServer、VMWware ESXi、KVM、OracleVM,并且同时也监控在这些Hypervisor上运行的虚拟机。CloudStack监控的主要数据有CPU,Memory,Network, DISK等. 本文就CloudStack对资源中的物理主机,存储,以及虚拟机的监控做下讲解.
以下我们选择Xenserver作为Hypervisor,NFS作为主存储及二级存储,以及XenServer VM为例来讲解CloudStack是如何监控这些资源的,大家可以以此为基础进一步了解其它资源的监控。
1. 资源监控功能及作用
CloudStack为什么监控资源。一方面,就是让管理员了解CloudStack物理资源处于什么状态,各种资源的利用率是多少,方便管理员早做计划。如下图:
另一方面,CloudStack也会用到监控到得数据,如部署一个虚拟机到某台物理机,会判断此机器的资源是否满足需求,如CPU,内存等。
2. 资源监控的实现
由于监控的资源类别差异很大,而且有实时性的要求,很容易想到使用多线程。CloudStack 在启动ManagementServer时创建了一个包含3个线程的线程池,它们分别周期性的监控主机,虚拟机,存储状态信息,各司其职。
a) 对主机,虚拟机的监控
监控主机和虚拟机在实现上差别不大,因为所有的命令都是发生给主机的,它们的流程几乎相同。先看一下UI主机和虚拟机的状态图。如下:
下图是总览,描述了CloudStack Management如何发送命令到主机的:
StatsCollector是主要的类,它的工作就是监控主机、存储、虚拟机的使用率。它要向主机发送命令,由AgentManager把CMD转换成Request发到此主机对应的DirectAgentAttache, DirectAgentAttache 用Request生成task,并把task放到线程池中执行,在task运行的时候判断Resource是否存在,如果存在,最终由相应的Resource把命令发送到主机。
这里与主机的通信和与系统虚拟机的通讯不同,例如与Xenserver的通讯需要Resource,再借助Task把AgentManager和Resource联系起来,Task的执行是需要等待的,等执行完毕(或者超时),Task会通知正在等待中的AgentManager线程。而与系统虚拟机之间的通讯比较直接,也就是直接发送到对方。我们细节的了解前者。
命令最终发送到Resource,再看看各种Resource是如何处理命令,并与主机打交道的。从流程图上来看,调用是非常明确的,不同的hypervisor对应不同的Resource,最终是由executeRequest处理的了这些命令。以CitrixResourceBase处理命令为例,见下图:
CitrixResourceBase接收到命令后,得到conn(代表与主机的连接),调用getRRData获得主机的信息。getRRData更加flag的值决定取得主机的信息还是虚拟机的信息,如果flag==1就是取得主机的信息。主机返回的是XML格式的数据,再图中的第2步骤,处理XML数据,求得memory,cpu,ethernet的平均使用率,然后返回数据。
结合上两张图,CitrixResourceBase返回结果,一直返回到调用者StatsCollector。StatsCollector把获得数据存在内存里,等UI要显示主机,虚拟机的信息时,就会向StatsCollector索要
b) 对存储的监控
存储包括主存储和二级存储。存储的监控很简单,只取得存储的总量和已分配容量即可。为了获得二级存储的容量信息,Cloudstack Managementserver会启动线程周期发生命令给二级存储虚拟机,由二级存储虚拟机负责统计二级存储的容量。而主存储的信息,是通过xenserver, Vcenter,KVMAgent获得的。
如果二级存储的话就由ClusteredAgentAttache直接发送给二级存储虚拟机。对于主存储,则线路就由各类Resource发送给对应的hypervisor。
到此我们已经了解CloudStack是如何监控主机和存储资源了,设计架构上相对简单,有难点的地方就是分清楚各种Agent和各种Resource,希望能起到抛砖引玉的作用,为大家进一步研究其它资源的监控提供基础。
讲的很好 收藏
An answer from an epxret! Thanks for contributing.
The epxertsie shines through. Thanks for taking the time to answer.
受教 谢谢分享
That’s an apt answer to an interesting quetsoin
Grade A stuff. I’m unquetsoianbly in your debt.
cloudstack能不能像vmware 那样实现对vm和host的实时监控?
CloudStack目前的机制是定时轮询,时间默认设置是1分钟,是一种Pull的方式.应该来说能满足需要了.
A little rationality lifts the quality of the dbetae here. Thanks for contributing!
A bit surprised it seems to simple and yet ufseul.
Hey, that’s a cleevr way of thinking about it.
What you published was very logical. However,
what about this? suppose you were to create a awesome
title? I mean, I don’t wish to tell you how to run your website, however what if you added a title that grabbed a person’s attention?
I mean CloudStack中对各种资源的监控机制 | CloudStack中国用户组 is
a little plain. You should peek at Yahoo’s home page and note how they write news headlines to get people interested. You might add a video or a related pic or two to grab people excited about what you’ve written.
In my opinion, it would bring your blog a little livelier.