对于小的IT部门来说,PowerShell cmdlets强化了Hyper-V的热迁移能力。但是,如果能再结合System Center Virtual Machine Manager和它的PowerShell能力,这些部门就能精确地在不同的节点以及集群共享卷(Cluster Shared Volume)间直接实现热迁移。 Microsoft System Center Virtual Machine Manager (SCVMM) 包括一个强大的图形用户界面(GUI)。管理员们可以利用它来实现Hyper-V的热迁移。
尽管如此,你可能会觉得SCVMM缺少管理一个复杂Hyper-V虚拟架构所……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
对于小的IT部门来说,PowerShell cmdlets强化了Hyper-V的热迁移能力。但是,如果能再结合System Center Virtual Machine Manager和它的PowerShell能力,这些部门就能精确地在不同的节点以及集群共享卷(Cluster Shared Volume)间直接实现热迁移。
Microsoft System Center Virtual Machine Manager (SCVMM) 包括一个强大的图形用户界面(GUI)。管理员们可以利用它来实现Hyper-V的热迁移。尽管如此,你可能会觉得SCVMM缺少管理一个复杂Hyper-V虚拟架构所需的精细控制。
但是,SCVMM PowerShell cmdlets提供远超过图形界面所提供的更灵活的热迁移管理。通过下列SCVMM PowerShell cmdlets和脚本,你可以将整台主机的虚拟机热迁移到某特定的节点,或者基于集群共享卷(Cluster Shared Volumes)的分配来迁移虚拟机。
(备注:你必须在你运行脚本的服务器或工作站上安装SCVMM控制台)。
将一个节点上的所有虚拟机迁移到另一个节点
维护模式是一个SCVMM图形控制台中的特性,它采用一种智能布局算法来将你选择的节点中的所有虚拟机分布到集群中其它节点。但是如果你希望保持虚拟机的组合,只是想将它们迁移到某一个其它节点上呢?
例如,在我的虚拟架构中,集群中有不同的负载分担应用。将负载均衡的虚拟机工作负载置于一个相同的集群节点上会限制负载均衡的效果,特别是在某台主机故障的情况下。
另外,通过在目标节点保持同样的虚拟机混合,你已经知道对资源的负载会是如何。从我的经验来说,即使是集群中有一个完全空置的节点,SCVMM的维护模式并不总是将原节点的虚拟机都分布到这个空置的节点上。这是因为SCVMM的智能布局算法持续地从各主机收集负载参数来决定最好的虚拟机布局。因此当空置节点接收到虚拟机后,它的布局分数下降,导致SCVMM将余下的虚拟机分布到其它的集群节点中。
在图形界面中,唯一能够强制让某个节点的所有虚拟机都热迁移到另一个特定节点的方法是,人工通过每一台虚拟机的迁移向导来实现。但是下面这个脚本能够覆盖智能布局算法并将虚拟机们同步到一个特定的集群节点上。你只需要很简单的回答几个提示。
# ------------------------------------------------------------------------------
# Migrate All VMs to Alternate Node in the Same Cluster
# ------------------------------------------------------------------------------
Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
$VMM = Read-Host "Enter Name of VMM Server"
$SH = Read-Host "Enter Source Host Name"
$DH = Read-Host "Enter Destination Host Name"
Get-VMMServer -computername $VMM
Get-VM | ? {$_.hostname -like "$SH*"} | Move-VM -VMHost "$DH*"
通过以下步骤来运行这个脚本:
1.将上面的SCVMM PowerShell脚本保存下来(例如保存MigrateAllVMsOnNode_SCVMM.ps1);
2.打开Windows PowerShell;
3.运行脚本;
4.回答对于SCVMM服务器、源节点名以及同一个集群中的目标节点名的提示。
5.通过观察命令状态,Failover Cluster Manager或者SCVMM的任务页来监视迁移进度。
在节点间对于一个集群共享卷(Cluster Shared Volume, CSV)上的虚拟机进行迁移
这个脚本识别一个特定集群共享卷上的虚拟机,并将他们热迁移到某特定的目标节点。使用这个脚本来将一个集群共享卷上的虚拟机在热迁移后保持在同一台主机上。
你为什么会需要这样做?在通常的集群操作中,一个虚拟机可以直接访问一个被很多节点共享的卷,并且那个集群中的其它节点也能同时利用这个节点的资源。但是当你使用Microsoft Data Protection Manager或者其它基于Hyper-V卷影副本(VSS)的备份工具时,问题就出来了。在备份的过程中,只有拥有这台虚拟机的主机能够直接访问磁盘。处于其它节点中,并共享该相同的集群共享卷的虚拟机,则需要通过网络来访问磁盘,这扩大了磁盘的延时以及降低了性能。
为了避免这个情况,指定下列的布局架构来对所有共享CSV的虚拟机都维持全性能的磁盘访问。在使用维护模式后,通过使用这个脚本来轻松地将某个CSV上的虚拟机都热迁移到所需的节点上
# ------------------------------------------------------------------------------
# Live Migrate Virtual Machines On a Particular Volume to a New Host in Same Cluster
# ------------------------------------------------------------------------------
Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
$VMM = Read-Host "Enter Name of VMM Server"
$SH = Read-Host "Enter Source Host Name"
$DH = Read-Host "Enter Destination Host Name"
$Vol = Read-Host "Enter Volume/CSV Volume to Move VMs to Destination Host"
Get-VMMServer -computername $VMM
Get-VM | ? {$_.hostname -like "$SH*"} | ? {$_.Location -like "*$Vol*"} | Move-VM -VMHost "$DH*"
通过下列步骤来运行这个脚本:
1.将上面的脚本保存(例如MigrateAllVMsByVolume_SCVMM.ps1);
2.打开Windows PowerShell;
3.运行你保存的上述脚本;
4.回答对于SCVMM服务器、源节点名、目标节点名以及你想指向的集群共享卷(CSV)。
5.通过观察命令状态,Failover Cluster Manager或者SCVMM的任务页来监视迁移进度。
对于SCVMM PowerShell cmdlets进一步的实验
上面的脚本仅仅是两个你能使用SCVMM PowerShell cmdlets的例子。由于SCVMM深度采集每台虚拟机的信息,有更多的方法能够将特定虚拟机包括或者排除在热迁移中:
- 名字:你可以对于某个特定的名字属性来热迁移虚拟机(例如使用-like命令选项);
- 内存:你可以指向处于某内存临界之上或之下的虚拟机;
- 操作系统:你可以通过操作系统来选择虚拟机,例如Windows、Linux(仅快速迁移)等。
通过SCVMM PowerShell cmdlets,你能够较采用图形控制台更深度地定制你的热迁移方案。System Center Virtual Machine Manager 2012会在升级的cmdlet中添加更多的选项。但是图形界面仍将缺少精确的管理功能。因此,学会使用SCVMM PowerShell cmdlets来简化管理任务,会对你受益匪浅
相关推荐
-
回顾年度9大虚拟化技术
虚拟化管理员从未放弃追寻更好虚拟化技术,以使他们的工作更快、更易于管理以及更好地优化。 我们看到,虚拟化工具在 […]
-
从Azure VM到Hyper-V:想想这些技巧
多年来,IT行业已经推动IT人员把工作负载转到云中。虽然在公有云中有一些好处,但有些工作负载更适合运行云本地数据中心中。
-
功能多样的Get-VM PowerShell cmdlet,你知道多少?
Hyper-V管理员能够使用Get-VM PowerShell cmdlet查看并调整一系列虚拟机配置信息。微软花费大量精力对PowerShell进行优化,以提升其对本地或者远程服务器的管理功能。
-
支持Linux虚拟机:新版Hyper-V来帮忙
大家都知道,Linux虚拟机无法利用Hyper-V针对Windows虚拟机提供的众多特性。幸运的是,情况已经发生变化,Hyper-V现在能够为Linux提供更多的支持。