Windows Server 2012中复制虚拟域控制器

在Windows Server 2012之前的各个微软Windows Server版本中,在域控制器升级过程中,添加一个附加的虚拟域控制器的方法涉及到以下两种复制数据的方法:“通过网络复制”或“使用IFM媒体”。

根据数据库(NTDS.DIT)的大小,使用这两种方法都会花费很多时间来复制活动目录数据库。

而Windows Server 2012新加入的复制功能,不仅加快了建立新的附加域控制器的速度,而且还节省了快速部署时配置域控制器的时间。

运行在Hyper-V Version 3.0和VMware的vSphere 5.1上的Windows Server 2012虚拟域控制器知道它运行在虚拟化平台上。这跟运行在Windows Server 2008 R2或更早版本上的虚拟域控制器来比是个显著的变化。

运行在虚拟化平台上的Windows Server 2012域控制器带有复制和安全恢复的功能,而且这些功能不能被禁用。本文主要是来解释复制过程,安全恢复功能将在以后介绍。

为了避免复制旧对象或延迟对象,微软修改了Hyper-V Hypervisor的代码,加入了一个叫做VM-Generation-ID(VMGID)的功能。VM-Generation-ID这个功能可以让Windows Server 2012虚拟域控制器被安全成功地复制。

概述

自微软Windows Server 2012开始,在Windows Server 2012活动目录中,在虚拟域控制器和运行虚拟域控制器的虚拟机实例容器中的计算机对象上出现了一个新的属性。这个属性被称为VM-Generation-ID唯一标识符。

当Windows Server 2012虚拟域控制器启动后,它会将VM-Generation-ID的数据和虚拟机实例容器的数据进行匹配。如果数据不匹配,Windows Server 2012虚拟域控制器就会知道,快照已经应用或者发生了复制事件。因此,对于复制事件,活动目录管理员完全不用担心,可以安全地使用Windows Server 2012复制一个虚拟域控制器。

准备

若要成功复制一个虚拟域控制器,需要具备以下条件:

● 支持VMGID的虚拟化平台。VMGID目前支持Windows Server 2012中的Hyper-V Version 3.0和 vSphare 5.1

● 作为访客域控制器运行的Windows Server 2012操作系统

● 在复制开始前要在Windows Server 2012域控制器上使用的PDC Emulator

● 森林功能级别要到Windows Server 2003或更高

● Schema版本要设置到56

● 源虚拟域控制器中的可复制的域控制器组和Domain Naming Context权限设置

注:PDC Emulator必须在Windows Server 2012域控制器上运行,原因如下:

1. 特殊的可复制域控制器组在活动目录中创建,在域命名上下文的根上要对这个组的权限进行设置。默认情况下,这个组里没有成员。PDC Emulator,如果是从以前的域控制器转到Windows Server 2012上的,那就要创建这个组。

2. 复制域控制器使用DRSUAPI RPC协议直接与PDC Emulator联系,用于创建被复制的域控制器上的计算机对象。

复制

VM-Generation-ID的安全复制功能可以成功地复制Windows Server 2012域控制器。复制过程包括以下几个步骤:

● 准备环境

● 授权域控制器作为复制源

● 检查并生成应用程序和服务列表

● 配置源域控制器

● 导出,复制,导入,重命名源域控制器,使之成为一个新的虚拟机

● 启动这个新虚拟机

● 完成

1. 准备环境

你要运行一些命令来验证负责复制域控制器和PDC Emulator的驱动,要保证在Windows Server 2012域控制器上能够使用。

检查VM-Generation-ID驱动

Windows Server 2012上的Microsoft Hyper-V 3.0提供了一个叫做Microsoft Hyper-V Generation Counter的驱动(vmgencounter.sys)。这个驱动程序负责复制域控制器。你可以在Hyper-V Host上的Device Manager里查看这个驱动是否可用。

检查PDC Emulator

源域控制器必须有访问控制权,让域控制器对自身进行复制。默认情况下,Cloneable Domain Controllers这个组有此权限并且没有成员。FSMO角色转移到Windows Server 2012域控制器时,PDCE创建了该组。

2. 授权域控制器作为复制源

为Cloneable Domain Controllers安全组添加源域控制器计算机对象,好让这个域控制器用于复制。复制过程会检查当前的域控制器是否被指定用于复制虚拟域控制器。

3. 检查应用程序和服务列表

你需要检查安装在源域控制器上的应用程序和服务列表。

运行在计算机上的每一个应用程序或服务都会创建“安全标识符”来识别一些其内部的组件。检查域控制器上会受到复制过程影响的应用程序是很有必要的一步。

若要获取已安装的应用程序和服务列表,请运行下面这个PowerShell命令:

Get-ADDCCloningExcludedApplicationList

获得列表之后,检查应用程序发行商,看它们的应用程序是否受影响。在你最终确定了应用程序列表之后,你需要使用下面这条命令生成一个CustomDCCloneAllowList.XML文件:

Get-ADDCCloningExcludedApplicationList -GenerateXML

CustomDCCloneAllowList.XML文件保存在%SystemRoot%NTDS 目录下

4. 配置源域控制器

这里,要运行一个PowerShell命令,在%SystemRoot%NTDS文件夹下生成DCCloneConfig.XML文件。该文件包括复制的域控制器的配置信息。%SystemRot%System32文件夹下有一个DCCloneConfig.XML样板。该样板文件名为SampleDCCloneConfig.XML。

运行下面的PowerShell命令来生成DCCloneConfig.XML文件:

New-ADDCCloneConfigFile -CloneComputerName “Name_of_New_DC” -SiteName “Name_of_AD_Site”

-Static -IPv4Address “IP_Address_of_New_DC” -IPv4SubnetMask “Subnet_Mask_for_New_DC”

-IPv4DefaultGateway “Gateway_For_New_DC” -IPv4DNSResolver “IP_Address_of_DNS_Server”

复制文件生成之后,使用下面的PowerShell命令或使用Hyper-V Manager关闭源域控制器:

Stop-VM -Name “SourceDC” – ComputerName “HyperVHost”

5. 导出,复制,导入,重命名源域控制器,使之成为一个新的虚拟机

在这里,源域控制器已经准备好了必要的复制配置文件。运行下面的PowerShell命令来对源域控制器进行导出,导入和重命名:

导出源域控制器的虚拟机:

Export-VM -Name “SourceDC” – ComputerName “HyperVHost” -Path “E:ExportedSourceDC”

将E:ExportedSourceDC文件夹内容复制到一个新的Hyper-V Host上

导入并生成一个新的VM-Generation-ID:

$vm = Import-VM -Path “E:ExportedSourceDCSourceDCVirtual Machines” -Copy -GenerateNewId

注:GenerateNewID才能让域控制器被成功复制。如果你导入到同一个Hyper-V Host里,务必在导入虚拟机命令中使用下面的参数来指定文件夹位置:

-VhdDestinationPath

-SnapshotFilePath

-SmartPagingFilePath

-VirtualMachinePath

重命名新复制的虚拟机:

Rename-VM -VM $vm -New-Name “VirtualDC2”

6. 启动新虚拟机

最后,启动源域控制器和新导入的复制的虚拟机。复制的虚拟机启动后,它会处理DCCloneConfig.XML文件中的指令来配置这个虚拟机的计算机名称,IP地址和AD站点,就是你在第四步里使用New-ADDCCloneConfigFile命令指定的内容。

7. 完成

复制的域控制器也是Cloneable Domain Controllers组的一部分。记得从这个组里移除新复制的域控制器的计算机对象。