对虚拟主机进行维护是为确保能够对正在运行的IT环境进行很好的审计并符合IT标准以及流程的要求。更为重要的是,对虚拟主机进行维护能够确保及时应用特定的Windows安全更新。
尽管有几种方式都能够将虚拟主机置于维护模式,但我经历过的最简单的方式是使用附带了SCVMM安装程序的系统中心虚拟机管理器(SCVMM)PowerShell cmdlets。你可以使用虚拟机管理器控制台将虚拟主机置于维护模式,但每次只允许对单个节点或集群执行维护操作。SCVMM提供了Disable-SCVMHost PowerShell cmdlet,你可以对一台或多台虚拟主机执行维护操作。
开启SCVMM维护模式之前的流程
在调用SCVMM维护模式流程之前有一些事情你需要了解。首先,如果一台虚拟主机属于一个集群或者是一个Hyper-V集群的一部分,那么运行在该主机上的所有虚拟机将会被在线迁移到故障切换集群的另一个节点上。如果你在使用SCVMM执行维护操作,那么你将会被问到是否打算将所有正在运行的虚拟机在线迁移到集群中的另一个节点。如果你打算使用Disable-SCVMHost PowerShell cmdlet,那么还必须使用MoveWithinCluster参数。
如果虚拟机没有在故障切换集群中被配置为高可用,那么当开启维护模式时,与被在线迁移到故障切换集群内其他节点的虚拟机不同,这些虚拟机将会被保留下来。如果虚拟主机没有加入集群,那么维护模式过程将保留所有正在虚拟主机上运行的虚拟机。
如何将虚拟主机置于维护状态
以下是几个使用Disable-SCVMHost PowerShell cmdlet的例子:
为将单台虚拟主机置于维护状态,可以在SCVMM服务器上执行如下PowerShell命令:
- $VMHost = Get-SCVMHost –ComputerName “VHostServer”
- Disable-SCVMHost –VMHost $VMHost -MoveWithinCluste
请注意Disable-SCVMHost命令如果使用-MoveWithinCluster参数,会将虚拟机在线迁移到故障切换集群中的另一个节点上。
如果你打算将特定SCVMM主机组中的所有虚拟主机置于维护模式,那么可以使用如下PowerShell命令:
- $VMMGroup = Get-SCVMHostGroup –Name “Dallas” –VMServer “VHostServer.TechTarget.com”
- $HostsInVMMGroup = Get-SCVMHost –VMHostGroup
- ForEach ($EachHost in $HostsInVMMGroup
- {
- Disable-SCVMHost –VMHost $VMHost -$EachHost
- }
SCVMM支持将Hyper-V主机、VMware ESX主机以及XenServer主机置于维护模式。连接ESX主机以及XenServer时维护过程可能使用不同的方法,但都是使用同一个命令行工具—Disable-SCVMHost cmdlet执行维护模式操作。
当虚拟主机被置于维护模式,SCVMM将自动禁用新虚拟机创建、在线迁移功能并阻止单个主机以及主机集群加入SCVMM主机评级系统。
如下命令所示,从维护模式恢复需要使用SCVMM管理器或者运行Enable-SCVMHost PowerShell cmdlet:
- $MyHost = Get-SCVMHost –ComputerName “VHostServer”
- Disable-SCVMHost –VMHost $MyHost
Enable-SCVMHost 以及 Disable-SCVMHost PowerShell cmdlets 所支持的最为重要的功能之一是不用等待命令执行完成就能够将控制权立刻交回PowerShell窗口。你可以使用-RunAsynchronously参数,创建一个工作线程执行维护模式,然后立即退回到PowShell窗口。
SCVMM自动维护模式过程的不足之处
有必要指出当你将虚拟主机或者主机集群从维护模式恢复到正常模式时,SCVMM将会恢复虚拟主机所提供的服务。尽管SCVMM允许虚拟主机或者集群从维护模式恢复,参与由SCVMM智能定位功能所支持的SCVMM主机排名,但SCVMM维护恢复过程并不会将之前迁移走的虚拟机迁移回来。SCVMM不会启动之前被保留下来的虚拟机。你必须手动启动单台虚拟主机上的所有虚拟机或者将虚拟机在线迁移回原虚拟主机以平均分配工作负载。这是SCVMM维护过程的众多不足之一,也就是在虚拟主机能够提供用户服务前可能要增加一些人工操作。
尽管SCVMM能够通过调用动态优化平衡集群内的虚拟工作负载,但执行动态优化,平均分配工作负载可能要花一些时间。