实时迁移
实时迁移是微软向Windows Server 2012 Hyper-V添加的最重要的功能,通过实时迁移功能,在Hyper-V主机之间移动虚拟机(VM)则无需停机,正常维护Hyper-V主机时,可以将它托管的所有VM全部移走,等到维护结束后,再移回来,整个过程不会引起业务中断。此外,利用实时迁移功能还可以更好地动态调整主机资源利用率,将繁忙的Hyper-V主机上的部分VM移动到相对空闲的Hyper-V主机上,这样可以确保即便在业务高峰期也能给终端用户提供很好的性能。本章主要介绍Windows Server 2012 Hyper-V的实时迁移功能(Live Migration)。
一、约束委派设置的两种方法
1. 通过GUI界面设置
在我们进行实时迁移设置前,首先要进行配置约束委派,因为Hyper-V实时转移提供了两种验证通信协议,预设为CredSSP,另一种是Kerberos委派。不过相对比较安全的Kerberos委派可以阻绝任何不明启用的服务器使用委派,所以建议使用。如果使用Kerberos委派来验证实时迁移,那就必须要先设定限制委派,然后才可以继续其余的步骤,而且还要必须使用Domain Administrators群组成员的账户在Active Directory的Computers设置限制委派。如果使用CredSSP,那就不需要进行设定委派。
步骤1 打开“Active Directory 用户和计算机”管理单元。从服务器管理器 (SM) 中执行该操作,打开“Active Directory 用户和计算机”管理单元。从导航面板中选择域,然后双击“Computers”文件夹。在“Computers”文件夹中,右击源服务器的计算机账户,然后在弹出的快捷菜单中选择“属性”命令。
步骤2 在接下来弹出的“属性”对话框中,单击“委派”选项卡。在“委派”选项卡下选择“信任仅委派到特定服务的计算机”。在该选项下面,选择“仅限使用 Kerberos”。单击“添加。
步骤3 在接下来弹出的“添加服务”对话框中,单击“用户或计算机”按钮。
步骤4 在“选择用户或计算机”对话框中的“输入对象名称来选择”文本框中键入目标服务器的名称,单击“检查名称”按钮以验证你输入的名称是否正确,若无误,则单击“确定”按钮。
步骤5 在“添加服务”对话框,在可用服务列表中执行以下步骤,然后单击“确定”。要移动虚拟机存储器,请选择 cifs。如果要同时迁移存储器与虚拟机,而且仅迁移虚拟机的存储器,则需要执行此步骤。如果将该服务器配置为使用Hyper-V的SMB存储器,则应首先选中该选项。要迁移虚拟机,选择“Microsoft 虚拟系统迁移服务。
步骤6 在“属性”对话框的“委派”选项卡上,确定上一步选定的服务列在目标计算机可以为其提供委派证书的服务中,然后单击“确定”按钮。
委派要在域中的每台Hyper-V主机中都要添加相应的委派,否在会在迁移过程中报错。如在Hyper-V02中,就需要信任Hyper-V01中的Kerberos协议,并指定相应的服务类型。操作步骤与之前的相同。如果只设定一方,那就只能将虚拟机迁移过去,但却无法迁移过来。
2. 通过Powershell命令设置
下面我们用Powershell的方式进行委派,但是Powershell方式的委派非常麻烦,幸运的是在TeachNet Blogs中有提供了一个Set-KCD.ps1脚本文件,该脚本简化了烦琐的委派步骤,其地址为:http://blogs.technet.com/b/matthts/archive/2012/06/10/configuring-kerberos-constrained-delegation-for-hyper-v-management.aspx
从Blogs上我们可以下载到Set-KCD脚本文件,下载之后解压后会有两个文件,一个是Set-KCD.ps1和Set-KCD.Zip。在解压Set-KCD.Zip后,会发现里面还有个Set-KCD.ps1,第二个Set-KCD.ps1文件大约9.2KB,第一个Set-KCD.ps1大小则为3KB,其实两种Set-KCD.ps1都能实现同样的效果,差别就是文件较大的Set-KCD.ps1文件包含服务类型的名称。
首先我先看大小为3KB的Set-KCD.ps1文件,其代码如图所示。
接下来我们看大小为9.2KB的Set-KCD.ps1文件,由于代码过长,这里只给出了部分代码,可自行下载后查看,其代码如图所示。
了解了Set-KCD脚本文件,在准备执行Set-KCD.ps1脚本文件之前,还需要进行一步操作,否则会在执行的过程中会出下无法加载文件的情况。
遇到这种事情是由于Set-KCD不是Windows Powershell内建的指令,所以必须要解除限制,设定为无限制才能执行。设置完成后,我们还可以恢复Windows Powershell内建的指令限制。首先使用Powershell命令Set-ExecutionPolicy Undefined,目的是降低Windows Powershell安全性,当执行完成后,可以使用Powershell命令Set-ExecutionPolicy RemoteSigned恢复其安全性。
下面我们就来设置mabofeng.com域中的Hyper-V01信任委派Hyper-V02的服务类型CIFS。将9.2KB大小的Set-KCD.ps1文件拷贝到C盘下,使用的Powershell命令为
.\SetKCD.ps1 –TrustedComputer Hyper-V01 –TrustingComputer Hyper-V02 –ServiceType CIFS –Add
如果要将3KB大小的Set-KCD.ps1文件拷贝到C盘下,使用的Powershell命令为:
.\SetKCD.ps1 –AdDN “cn=Hyper-V01,cn=computers,dc=mabofeng,dc=com” –HostFQDN Hyper-V02.mabofeng.com –Service CIFS –Add
接下来设置mabofeng.com域中的Hyper-V01信任委派Hyper-V02的服务类型Microsoft Virtual System Migration Service。将9.2KB大小的Set-KCD.ps1文件复制到C盘下,使用的Powershell命令为:
.\SetKCD.ps1 –TrustedComputer Hyper-V01 –TrustingComputer Hyper-V02 –ServiceType “Microsoft Virtual System Migration Service” –Add
如果要将3KB大小的Set-KCD.ps1文件复制到C盘下,使用的Powershell命令为:
.\SetKCD.ps1 –AdDN “cn=Hyper-V01.cn=computers,dc=mabofeng,dc=com” –HostFQDN Hyper-V02.mabofeng.com –Service “Microsoft Virtual System Migration Service” –Add
复制完成后,进行设置信任委派,我们可以使用如下命令:
Get-AdObject “cn=Hyper-V01,cn=computers,dc=mabofeng,dc=com” –Properties msDSAllowedToDelegateTo
在域控中设定完成委派后,接下来就是设定转移的来源和目的地Hyper-V主机了。设定来源和目的地服务器目的是,让它们可以传送和接收实时迁移。当设置服务器的时候,有两种方案可供选择:在任何可用网络允许实时迁移的流量或只在指定网络上允许实时迁移的流量。最安全做法就是指定专用的网络负责实时迁移的网络流量。要在非群集Hyper-V主机上开启实时迁移,只要在Hyper-V主机的Hyper-V设置中进行设置即可。 #p#
二、实时迁移设置的两种方法
1. 通过GUI界面设置
在Hyper-V实时迁移设置中,首先勾选“启用传入和传出的实时迁移”,并选择身份验证协议。身份验证协议分为两种:一种是使用凭据安全支持提供程序(CredSSP),这种身份验证协议必须登录到服务器才能执行实时迁移,所以不是最佳的选择;而另一种方式是采用Kerberos,这种方式更为安全,在域控中我们已经设置了采用Kerberos委派,并设定了cifs和Microsoft 虚拟系统迁移服务。在“指定所允许的并行实时迁移数量”中输入允许的数量。
接下就是设置传入实时迁移的网络情况,这里也有两种选择:一是使用任何可用的网络进行实时迁移,这种方式可以利用所有Hyper-V主机之间的网络,但是由于发生实时迁移后,对网络的压力较大,给其它网络中的业务造成压力;二是使用指定的IP地址进行实时迁移,这也是我们要选择的方式。单击图6-16中的“添加”即可设置IP地址,单击“编辑”即可修改实时迁移IP地址。
2. 通过Powershell命令设置
如果是Microsoft Hyper-V Server 2012,无法通过GUI界面设置实时迁移,那么我们也可以通过Powershell的方式设置Hyper-V的实时迁移,主要的命令包括:
启动传入和传出的实时迁移,命令如下:
Enable-VMMigration
停用传入和传出的实时迁移,命令如下:
Disable-VMMigration
查看传入和传出的实时迁移状态(见图6-17),命令如下:
Get-VMHost
使用凭据安全支持提供程序(CredSSP),命令如下:
Set-VMHost –UseAnyNetworkForMigration $ture
指定使用IP地址为192.168.1.201进行实施迁移,命令如下:
Add-VMMigrationNetwork 192.168.1.201/32
指定使用IP段都可以进行实施迁移,命令如下:
Add-VMMigrationNetwork 192.168.0.0/32
查看传入和传出的实时迁移IP地址,命令如下:
Get-VMMigrationNetwork
将192.168.1.201的先后顺序调到3,命令如下:
Set- VMMigrationNetwork 192.168.1.201/32 –NewPriority 3
在Hyper-V设置中,还需要进行设置的就是存储迁移的并发迁移量,设置允许存储迁移的并发数量。
除了在Hyper-V主机上要设置实时迁移以外,要注意在虚拟机的设置中,一定要勾选“将虚拟机迁移到具有不同处理器版本的物理计算机”选项,如果不勾选这个选项,在迁移到不同版本的CPU时候,会出现错误,导致迁移失败。
三、具有共享存储的实时迁移
实时迁移具有很多种类:
具有共享存储的实时迁移,就是虚拟机运行在具有共享存储的磁盘中,两台Hyper-V并非是群集关系,可以将虚拟机实时迁移到另外一台主机上,在迁移过程中可保证虚拟机不关机、不重启,服务器不中断,确保业务的正常运行。
另外一种迁移是运行在一台Hyper-V主机中,改变虚拟机的存放位置,将虚拟机的存放位置从一个磁盘迁移到另一个磁盘,同样的,在迁移过程中虚拟机不关机、不重启,服务器不中断,保证业务的正常运行。
最后一种就是当虚拟机运行在单台Hyper-V主机时,将单台Hyper-V主机中的虚拟机迁移到另外一台Hyper-V主机,并且这两台Hyper-V主机并没有共享存储,也就是说,要同时迁移虚拟机和虚拟机存放的磁盘位置。
无论是哪种迁移,将虚拟机迁移到另外一台主机上时候,转移虚拟机基本上包括了转移虚拟机的快照、当前配置、智能分页和虚拟硬盘,如果是迁移虚拟存储文件,还可以指定将虚拟机磁盘存放到不同的目录上。但这里要注意的就是,当迁移虚拟机到另外一台主机上时,如果虚拟机使用的是DHCP,那么在迁移完成后,IP地址可能会发生变更,所以最好将虚拟机的IP地址设置成为固定的形式。在两台Hyper-V主机上进行迁移时,如果两台主机的虚拟交换机名称不同,则也可能发生迁移失败。
下面我们就来介绍如何进行具有共享存储的实时迁移,。相对于其它迁移方式,这种迁移速度是最快的,如果虚拟机存放在共享存储中,而共享存储是采用SMB3.0就可以顺利的迁移,如果是早期的Hyper-V版本,则无法使用具有共享存储进行实时迁移。这里还要注意,共享存储必须具有Hyper-V的Administrator的权限,并设置授予完全控制。否则在迁移虚拟时候会发生错误。
1. 通过GUI界面进行迁移
步骤1 在Hyper-V管理器中,右击选择要迁移的虚拟机,在之后弹出的快捷菜单中选择“移动”命令。
步骤2 在迁移“新建虚拟机”向导中,点选“移动虚拟机”选项,然后单击“下一步”按钮。由于采用的是共享存储,所以就没必要移动虚拟机的存储了。
步骤3 在指定目标的计算机界面上,输入指定目标计算机的名称,或者通过单击“浏览”按钮在域中查找到要迁移的目地虚拟主机,之后单击“下一步”按钮。
步骤4 在选择移动虚拟机后,可以在“选择移动选项”界面中选择如何使用虚拟机迁移项目,这里包括如下选项:
“将虚拟机的数据移动到一个位置”选项,此选项将迁移虚拟机到所指定的一个位置,这里的意思是迁移快照、智能分页、虚拟机配置文件和虚拟机的虚拟硬盘,将这些文件指定一个位置。
“通过选择项目移动位置来迁移虚拟机的数据”选项,这里的意思是将迁移快照、智能分页、虚拟机配置文件和虚拟机的虚拟硬盘分别指定存放的位置。这种选项和上一个选项可以手动或者自动选择虚拟机的存放位置,如果无需移动虚拟机虚拟硬盘,则指定路径时,将虚拟机的虚拟硬盘指定到源地址即可。
“仅移动虚拟机”选项,将虚拟机的文件除了虚拟机的虚拟硬盘之外的文件进行迁移,迁移后的虚拟机存放在系统默认的地方。
这里我们选择“仅移动虚拟机”选项。
2. 通过Powershell命令进行迁移
通过Powershell也能进行虚拟机的迁移,使用命令Move-VM。首先我们先查看在Powershell中的迁移虚拟机的命令语法。
命令Move-VM的语法中包括了:
-SmartPagingFile: 智能分页处理。
-AnapshotFile :快照文件。
-VirtualMachine: 虚拟机配置文件。
-VHDs :虚拟机的虚拟硬盘。
通过Powershell命令可以将新建虚拟机从Hyper-V01主机上迁移到Hyper-V02主机上,使用的命令为:
Move-VM “新建虚拟机” Hyper-V02
可以将新建虚拟机从Hyper-V01主机上迁移到Hyper-V02主机上,并指定虚拟机的虚拟硬盘路径在C:\TestVM,其命令为:
PS C:\>Move-VM “新建虚拟机” Hyper-V02 –IncludeStorage –DestinationStoragePath C:\TestVM
可以将新建虚拟机从Hyper-V01主机上迁移到Hyper-V02主机上。并指定智能分页处理、快照文件、虚拟机配置文件和虚拟机的虚拟硬盘路径,使用的命令为:
PS C:\>Move-VM “新建虚拟机” Hyper-V02 –VirtualMachinePath D:\TestVM\Config –SnapshotFilePath D:\ 新建虚拟机\Snapshots –SmartPagingFilePath D:\ 新建虚拟机\SmartPaging –IncludeStorage –VHDs @(@{“SourceFilePath” =“C:\ 新建虚拟机\Disk1.VHDX”; “DestinationFilePath” = “D:\ 新建虚拟机\Disks\Disk1.VHDX”}, @{“SourceFilePath” = “C:\ 新建虚拟机\Disk2.VHDX”; “DestinationFilePath” = “D:\ 新建虚拟机\Disks\Disk2.VHDX”}) #p#
四、存储实时迁移
存储实时迁移是将虚拟机的存放位置从一个地方迁移到另一个地方,比如可以将虚拟机的存放位置从C盘迁移到D盘,或者将虚拟机硬盘迁移到共享存储上面,也可以将虚拟机在共享存储中的不同LUN之间相互迁移,在迁移过程中,虚拟机不会出现中断。但是由于存储实时迁移包括了迁移虚拟机的快照、智能分页、虚拟机配置和虚拟机的虚拟硬盘,所以迁移过程是比较慢的,具体速度取决于我们存储网络和磁盘速率。当然,在虚拟机关机的情况下,速度要比开机时候迁移的要快。
1. 通过GUI界面进行迁移
步骤1 在Hyper-V管理器中,右击选择要迁移的虚拟机,在之后弹出的快捷菜单中选择“移动”命令。在迁移“新建虚拟机”向导中,选择“迁移虚拟机的存储”选项,由于是在同一台主机上,就没必要移动虚拟机了。
步骤2 在选择移动虚拟机存储后,可以在“选择移动选项”中选择如何使用虚拟机存储迁移项目,这里包括的具体选项有:
“将虚拟机的数据移动到一个位置”选项,此选项将迁移虚拟机到所指定的一个位置,这里的意思是迁移快照、智能分页、虚拟机配置文件和虚拟机的虚拟硬盘,将这些文件指定一个位置。
“将虚拟机的数据移动到其他位置”选项,即通过选择项目移动位置来迁移虚拟机的数据,这里的意思是将迁移快照、智能分页、虚拟机配置文件和虚拟机的虚拟硬盘分别指定存放的位置。这个选项和上一个选项可以手动或者自动选择虚拟机的存放位置。
“仅移动虚拟机的虚拟硬盘”选项,对虚拟机的虚拟硬盘文件进行迁移,迁移后的虚拟机存放在系统默认的地方。
这里我们选择“仅移动虚拟机的虚拟硬盘。
步骤3 在选择要移动的项目中会列出虚拟机中的所有虚拟硬盘,可以将虚拟机中的虚拟硬盘全部勾选上然后可以进行迁移,也可以迁移其中的一些虚拟硬盘,但是不建议将一个虚拟机的硬盘迁移到不同的目录中。这里的新建虚拟机只有1块硬盘,我们就选择迁移此虚拟硬盘。
步骤4 为虚拟机中的虚拟硬盘选择迁移的目标路径,从图6-30中可以看出,新建虚拟机的当前位置在C盘下面,在“新位置”中单击“浏览”按钮选择路径或者直接输入路径,若是输入路径的地址下没有输入的文件夹,则会自动创建文件夹。
步骤5在摘要中查看要迁移虚拟机的路径,确认无误后单击“完成”按钮就开始迁移,整个迁移虚拟机的过程虚拟机不会出现中断。
2. 通过Powershell命令进行迁移
通过Powershell也能进行虚拟机存储的迁移,使用的命令是Move-VMStorage。首先我们先查看在Powershell中的迁移虚拟机的命令语法。
命令Move-VM的语法中包括了:
-SmartPagingFile :智能分页处理。
-AnapshotFile :快照文件。
-VirtualMachine: 虚拟机配置文件。
-VHDs :虚拟机的虚拟硬盘。
可以将新建虚拟机存储位置从默认路径迁移到D:\新建虚拟机,使用的命令如下:
PS C:\> Move-VMStorage “新建虚拟机” –DestinationStoragePath D:\新建虚拟机
将新建虚拟机的智能分页处理、快照文件、虚拟机配置文件和虚拟机的虚拟硬盘迁移到指定的路径,使用的命令如下:
PS C:\>Move-VMStorage “新建虚拟机” –VirtualMachinePath D:\新建虚拟机\Config –SnapshotFilePath D:\新建虚拟机\Snapshots –SmartPagingFilePath D:\新建虚拟机\SmartPaging –VHDs @(@{“SourceFilePath” = “C:\新建虚拟机\Disk1.VHDX”; “DestinationFilePath” = “D:\新建虚拟机\Disks\Disk1.VHDX”}, @{“SourceFilePath” = “C:\新建虚拟机\Disk2.VHDX”; “DestinationFilePath” = “D:\新建虚拟机\Disks\Disk2.VHDX”}) #p#
五、非共享存储的实时迁移
Windows Server 2012中的Hyper-V在虚拟机的迁移中,支持了具有非共享存储的实时迁移,这样可以大大增强了Hyper-V虚拟机的灵活性,在一些没有共享存储和群集的环境中,基于非共享存储的实时迁移起到了重要的作用。
非共享存储的实时迁移具备以下四个特性:
即使在迁移工程中遇到故障或问题,导致迁移失败,也能保证有一台可用虚拟机。
可跨群集迁移虚拟机,例如我们可以从非群集的计算机迁移到群集计算机。
支持不同存储类型的迁移虚拟机,无需受存储类型约束,不管环境是 JBOD 还是直通存储,又或者是 iSCSI 存储,都能实现实时迁移。
可以使用 Powershell 发起实施迁移的操作,那么就能够实现自动化的操作。
综上所述,非共享存储的实时迁移为我们提供了低成本、高效率、灵活便捷的迁移方案,这一迁移方式能够被用到多种应用环境下,例如:
开发或 IT 人员能够将测试好的虚机在不停机的前提下直接迁移到生产环境。
在多主机环境下,如果需要进行主机维护,可以在不依赖共享存储的前提下,快速、灵活的在主机之间移动虚机。
故障检修和硬件升级,中小企业可能只有一台服务器并通过虚拟化方式运行着业务服务器,当遇到硬件故障或需要更新服务器时,IT顾问可以快速在笔记本上建立临时的基于 Windows Server 2012 的 Hyper-V 主机,将其加入到现有域中完成业务虚拟机的迁移,在完成原服务器的更换后,再迁移回去。
非共享存储的实时迁移在迁移过程中虚拟机不会出现中断的现象。
而迁移的过程中,有的Hyper-V主机没有共享存储,所以在迁移时,需要迁移虚拟机的所有配置,包括虚拟机的虚拟硬盘、配置文件、虚拟机快照和Hyper-V智能分页文件,迁移过去的虚拟机文件和数据存储可位于一个或者多个位置。由于没有共享存储,该实时迁移方案不提供高可用性。
可以通过Powershell发起实施迁移的操作,可以采用Move-VMStorage或者是Move-VM命令,只要指定相应的虚拟机迁移目标存储路径,虚拟机就会迁移过去,这与之前迁移使用的命令相同。Windows Server 2012 无需共享存储的实时迁移整体来讲非常易用,无需过多的设置即可完成,仔细操作下来也就是几个简单的步骤,这完全依靠强大的基础架构作为支撑,所以在迁移之前的Hyper-V主机中,都必须加入域环境。
本文出自 “让"云"无处不在” 博客,请务必保留此出处http://mabofeng.blog.51cto.com/2661587/1294328