在没有故障转移群集的情况下配置Hyper-V实时迁移

时间:2024-03-26 21:06:02

在没有故障转移群集的情况下配置Hyper-V实时迁移

Hyper-V虚拟化系统中的实时迁移技术允许在Hyper-V主机之间移动正在运行的虚拟机,而无需停止虚拟机或不影响服务的可用性。在早期的Hyper-V版本中,使用实时迁移,您只能在故障转移群集的节点之间移动虚拟机。由于无共享实时迁移技术,此限制在Hyper-V 3.0Windows Server 2012)和更高版本中已删除。在本文中,我们将展示如何启用实时迁移以及如何在运行Windows Server 2016的独立Hyper-V主机之间移动正在运行的VM

无共享的实时迁移要求:

  1. 可以在运行以下操作系统的服务器之间迁移:Windows Server 2012 R2Windows Server 2016
  2. 虚拟机版本必须为5或更高
  3. 两台计算机必须位于同一Active Directory域或受信任域中
  4. 执行配置的用户必须具有Hyper-V管理员特权。在配置Kerberos约束委派时,用户必须具有域管理员特权(或服务器帐户特权)。

假设我们有两台运行Windows Server 2016且具有Hyper-V角色的服务器:Srv01Srv03。这两个服务器都是Active Directory域的成员,并且没有群集(Windows Server故障转移群集)。在任何服务器上启动Hyper-V Manager控制台,并将两个服务器都添加到其中。

在没有故障转移群集的情况下配置Hyper-V实时迁移

然后在两台服务器的设置中启用实时迁移。为此,请右键单击Hyper-V服务器,然后选择Hyper-V Settings。转到“ 实时迁移部分,然后选中“ 启用传入和传出实时迁移。将迁移列表限制为两个Hyper-V主机的IP地址。

在没有故障转移群集的情况下配置Hyper-V实时迁移

然后在“ 高级功能部分中选择“ 使用Kerberos”作为身份验证协议。在没有故障转移群集的情况下配置Hyper-V实时迁移

您可以使用以下PowerShell命令执行相同的操作:

Enable-VMMigration
Set-VMMigrationNetwork 192.168.10.41 192.168.10.21
Set-VMHost -VirtualMachineMigrationAuthenticationType

注意。也可以使用CredSSP协议进行VM Live Migration,但在这种情况下,管理员将必须在作为迁移源的服务器上登录(使用RDP)或使用PowerShell Remoting远程连接到该服务器。

要使用Kerberos身份验证迁移VM,管理员无需在服务器上登录,但必须配置Active Directory中的约束委派(KCD-Kerberos约束委派)。

启动ADUC管理单元,找到第一个Hyper-V服务器的帐户,打开其属性,然后转到“ 委托选项卡。

选中“ 信任此计算机仅委派给指定的服务“ 仅使用Kerberos”,然后单击“ 添加在没有故障转移群集的情况下配置Hyper-V实时迁移

在下一个窗口中,单击“ 用户  计算机然后指定第二台Hyper-V服务器的名称。在可用服务列表中,选择“ Microsoft虚拟系统迁移服务

在没有故障转移群集的情况下配置Hyper-V实时迁移

提示。如果还必须迁移VM存储,请同时选择cifs协议。

保存委托设置。为第二台Hyper-V服务器配置相同的设置。

等待AD中的更改的复制并重新发布Kerberos票证,然后可以执行VM的实时迁移。右键单击虚拟机,然后选择移动

在没有故障转移群集的情况下配置Hyper-V实时迁移

选择移动虚拟机作为迁移类型。

在没有故障转移群集的情况下配置Hyper-V实时迁移

指定要将虚拟机迁移到的Hyper-V主机的名称。

然后选择目标主机上的文件夹以将VM文件移动到(该文件夹必须已经存在)。

在没有故障转移群集的情况下配置Hyper-V实时迁移

单击完成,然后等待虚拟机到第二台Hyper-V服务器的实时迁移过程结束。

提示。您可以使用以下PowerShell命令启动VM迁移:

Move-VM srvapp1 Srv01 -IncludeStorage -DestinationStoragePath c:\hyperv\vm

如果VM设置中未打开处理器兼容性,则迁移将因以下错误而中断:

无法将虚拟机移至目标计算机。目标计算机上的硬件与此虚拟机的硬件要求不兼容。

要解决此问题,您将必须关闭VM并为其启用CPU兼容性:

Set-VMProcessor srvapp1 -CompatibilityForMigrationEnabled $true