在2012时代中,智能放置功能得到了更新,当我们执行手动移动至最佳节点,故障转移,维护模式时,默认如果没有任何设置,例如首选所有者,可能所有者,反相关性等,群集先会根据内存智能放置功能,尽可能帮我们选择当前承载群集应用少的,可用内存多的节点上进行放置。
但是这只是项群集增强性的功能,只能说是作为一个最基本的放置策略来使用,帮我们选择相对轻松的节点,但是群集主要关注的点还是强调故障转移,维护后让应用尽可能快速的上线,它只是在放置初始根据群集应用数量和内存做下基本的判断,随后应用会被快速联机上线。
因此2012R2时代群集自带的放置功能,并不能够达到控制群集内各节点平衡的问题,例如,如果我们希望在群集运行过程中,保持各节点CPU 内存负载始终在百分之80以下,当有节点超过这个阀值,就重新平衡资源到其它节点上,那么我们就需要使用SCVMM和群集作为整合,发生故障后群集根据内存智能放置策略评估,快速让应用上线,应用上线后,SCVMM再根据动态优化功能查看各节点CPU,内存,网络,磁盘等综合指标,最终做一个彻底的节点负载平衡
这在一个动态数据中心,或是一个私有云的场景下是很正常的需求,因为对于私有云来说,我们要想构建出底层的资源池,对于计算资源池而言,在一定范围下,对于云管理来说,我是应该只需要放在池里面资源,而不需要考虑资源到底会被放置在哪台机器上的,因为对于资源池而言所有服务器都应该是一样的,假设这时如果没有负载均衡功能,那么很可能多次用户在门户上面申请的虚拟机会被重复放在一个宿主机上,最终导致有的主机,特别忙,有的主机特别闲,挤压到一定程度就很可能发生本来要放置在特别忙的主机,但是没资源了,不能放,再尝试放空闲主机,因而延迟虚拟机申请时间,资源利用也特别不均衡
因此资源池需要实现这种负载均衡的架构,确保用户在门户提交的申请直接提交资源池,随后资源池会再根据VIM管理中心的策略,如果检测到某个节点负载过高,自动实时迁移上面的虚拟机到其它空闲节点,这样合理利用服务器资源,也保证用户申请请求在资源级别可以正常交付。
默认情况下,在绝大部分云计算架构中,这种负载均衡架构,都是由VMM,或者cloudstack控制去做策略配置,大多数都是直接在这种VIM系统上面改
除了云计算的这种资源池架构,当企业内部大量使用虚拟化的动态数据中心场景也可以利用这样的功能合理平衡各服务器上负载。
在WSFC 2016中,微软做了一次新的尝试,把这种资源负载均衡功能,也可以通过群集级别进行配置,这样即使客户环境没有VMM这种VIM管理系统也可以实现主机节点间的负载均衡
WSFC 2016的负载均衡技术仅限用于VM环境,因此建议如果您要使用该功能,最好是一个干净的虚拟化群集,我们定义VM负载均衡的启用模式和阀值,一旦阀值达到,即触发虚拟机做实时迁移平衡。
WSFC 2016中的VM负载均衡技术,主要依据两个指标来评估节点的负载阀值
- 节点已用内存
- 节点五分钟内CPU平均利用率
两者之间为or关系,只要达到其中一个指标阀值,即会启发VM负载均衡操作
这项功能在控制上并不会很麻烦,我们主要关注于两项设置
- 控制VM负载均衡功能启动模式
- 控制VM负载均衡阀值
GUI界面操作 打开故障转移群集管理器,点击群集名称,属性
可以看到新的选项卡,平衡器,点开之后可以看到相关设置
在上面的模式设置中可以看到当前有三种选项
- 不启用,关闭群集的VM负载均衡功能
- 当节点从故障或维护后加入群集,状态变为加入后,开始执行负载均衡操作
- 默认设置,每隔三十分钟,按照下面入侵阀值设置自动平衡各节点资源
目前暂时不支持修改扫描时间,只能是每隔30分钟进行负载均衡扫描
下面的入侵,即对于负载均衡操作的阀值设置,只有使用内存或5分钟内CPU利用率达到这个阀值,我们才执行负载均衡操作,GUI界面看到是高中低三个选项
背后对应的
低 —— 当主机CPU或内存负载达到80%以上时触发负载均衡
中 —— 当主机CPU或内存负载达到70%以上时触发负载均衡
高 —— 当主机CPU或内存负载达到60%以上时触发负载均衡
如果您希望环境不要经常发生移动,只有当节点负载达到80%再负载均衡,那么您就应该设置为低,如果您希望我要保持主机持续高效运行,始终应该保留一部分资源,那么您可以设置为高,设置为高后,maybe发生虚拟机实时迁移的操作会多一些
针对于内存负载是以使用内存百分比为评估,针对于CPU是以五分钟CPU平均利用率达到阀值为准
Powershell操作
#查看群集当前VM负载平衡阀值
#修改群集当前VM负载均衡阀值
(Get-Cluster).AutoBalancerLevel = <value>
参数说明
AutoBalancerLevel | 均衡级别 | 行为 |
---|---|---|
1(默认) | 低 | 当主机负载80%以上时移动 |
2 | 中 | 当主机负载70%以上时移动 |
3 | 高 | 当主机负载60%以上时移动 |
#获取群集VM负载均衡模式
(Get-Cluster).AutoBalancerMode
#配置群集VM负载均衡模式
(Get-Cluster).AutoBalancerMode = 1
参数说明
AutoBalancerMode | 行为 |
---|---|
0 | 不启用功能 |
1 | 节点恢复加入后负载均衡 |
2(默认) | 每隔30分钟自动平衡各节点负载 |
实验验证
当前所有负载都在HV01,HV01内存已使用65%,群集VM负载均衡阀值为低,即达到百分之80再负载均衡,负载均衡操作为当节点加入时生效
当前我们修改一台虚拟机内存大小,让服务器内存已使用超过80%
现在我们要模拟节点加入的状态,这里旳节点加入是什么意思呢,从暂停模式回复,节点冷启动,新添加节点,这些都算是节点加入,没错,我们认的是节点加入群集,宣告可以正常提供服务的这样一个NodeUp状态,所以这里老王先把HV02的群集服务停止,再启动,模拟节点加入
等待几分钟时间后,可以看到,HV01上面已经应用上了VM负载均衡功能,自动实时迁移虚拟机至HV02
查看clusterlog可以看到VM负载均衡工作过程
当前群集负载均衡模式为NodeUP
检测到NodeUP,且有节点内存使用达到80%以上,触发VM负载均衡操作,选择实时迁移SPDB虚拟机至其他节点。
实验2,设置群集VM负载均衡模式为默认始终负载均衡,每隔三十分钟进行扫描,负载均衡级别为低,即百分之80,所有应用当前都在HV01
经过一段时间后,当群集轮询的30分钟时间达到,这次自动选择实时迁移两台虚拟机至HV02节点
Cluster Log如下
通过以上介绍和实验,相信大家或多或少都对WSFC2016的VM负载均衡技术有一点了解,简单来说,就是Hyper-V群集可以不用VMM,自己做负载均衡了,可以基于CPU和内存负载做,在NodeUp或实时扫描负载来做平衡,没有VMM的情况下,这项功能可以很好的工作,当有了VMM后,一旦群集被添加到VMM,VMM开启动态优化功能,则群集的AutoBalancerMode将会被设置为0,自动关闭群集的VM负载均衡,改使用VMM的动态优化技术,在群集没有推出这项功能之前,之前5nine这家公司的5nine Manager可以实现通过负载均衡器 Optimizer 来负载平衡群集的资源,使用CPU利用率,可用内存,剩余磁盘空间来作为平衡指标,在没有WSFC 2016,也没有VMM,使用它可以工作的很好,但是WSFC 2016并不会和5nine协作的很好,检测到5nine开启了Optimizer功能,并不会自动关闭WSFC自身的负载均衡技术,需要管理员手动关闭,maybe日后的版本也会更新和WSFC2016协作,以上,希望看到的朋友都能有收获。