在集群主机间虚拟服务器的负载均衡功能说穿了就是一个数学问题。服务器负载均衡服务自动计算资源的利用率,然后把某台主机跟其它主机的可用资源进行比较来决定该集群是否需要进行负载均衡。
但是这些都没有精确的公式化约定。每种负载均衡服务都是用不同的计算模型来决定集群是否需要。例如,VMware vSphere的DRS(Distributed Resource Scheduler)功能跟微软SCVMM(System Center Virtual Machine Manager)的PRO(Performance and Resource Optimization)就采用了不同的机制。然而,管理员在决定在线迁移虚拟机达到负载均衡目的之前,需要综合考虑性能监控和计算结果。
多数人把负载均衡抛给相关的自动化服务来完成,但理解它们的计算方法很重要。可以帮助我们了解什么时候需要对负载均衡服务做调整来达到最佳效果。另外,您还可以识别出什么时候厂商提供的负载均衡功能是真正所需的。
VMware的负载均衡服务:DRS
DRS服务通过两种逻辑关系来判断集群是否失去平衡。如果当前主机负载的标准偏差超过目标主机的标准差,DRS认为该主机跟集群中的其它主机相比是失衡的。为了达到平衡,DRS借助vMotion把虚拟机从超负荷的主机中迁移出来。
这些服务器负载均衡数据位于vSphere Client内的VMware DRS界面中。DRS通过分析每台宿主机的CPU和内存资源来衡量负载情况。然后,负载均衡服务算出平均的负载水平并基于此计算出标准偏差值。一旦vSphere开始运行,DRS会每隔五分钟重新计算一次集群的负载标准差值。
如果负载均衡服务检测到需要进行均衡,DRS会对集群内有这种的需要虚拟机进行基于优先级的分级。使用如下的公式,可以计算出该宿主机跟集群内其它主机相比的平衡情况。
图1:用这个公式来判断集群的负载均衡
理想的集群环境中当前主机的标准差值应该为零,也就是说该主机跟集群内其它主机的负载完全平衡的。如果数值增加,意味着相比其它服务器某台主机上的虚拟机需要更多的额外资源,因此资源需要被重新分配。
DRS然后给出优先级建议来达到均衡。优先级一的应该被立刻处理,相比而言优先级五的建议可能对修复问题的作用会小一些。
通过微软的PRO实现负载均衡
微软的SCVMM采用了不同的负载均衡机制。本质上看,它计算资源利用率时并不对整个集群的环境进行统计。它的负载均衡服务,即PRO考虑的是单个宿主机资源过度使用的情况。
您可能还注意到一点SCVMM的重要情况。无论是Hyper-V还是SCVMM都不能根据性能情况单独完成虚拟机的重新分配。SCVMM只有在跟SCOM(System Center Operations Manager)集成到一起并且启用了PRO之后才可以调配虚拟机。因为SCVMM需要借助SCOM实现对虚拟机的监控。
在SCVMM 2008 R2中,如果主机资源过载,虚拟机可以从集群的某台主机在线迁移出来。根据“Microsoft TechNet article”的描述,当内存使用率超过“物理内存总量减去宿主机预留的内存量”时,SCVMM就认为主机过载。当CPU利用率大于“100%减去宿主机占用的CPU资源”后也会有同样判断。
任何一台服务器都不会去计算整个集群的负载情况决定资源的分配。但是SCVMM通过单台宿主机的资源使用率来决定主机过载后是否需要对虚拟机做在线迁移。系统会对四个资源使用做监控:CPU、内存、磁盘IO和网络。通过在SCVMM控制面板内拖动滑块可以设置这些资源的优先级。
还有一种可选方案是通过PowerShell脚本来分析集群情况帮助完成负载均衡。通过运行脚本比对集群内宿主机内存和虚拟机使用情况来执行虚拟机的负载均衡。
负载均衡服务借助各种计算方法来检测集群中虚拟机是否需要。但是如果您不能理解各个服务的计算公式,那么就很难真正实现有效的调度。即使您不是数学天才,这些方法也可以帮助我们避免问题。