如何优化大型网络中的 Active Directory 复制

文章翻译 文章翻译
文章编号: 244368 - 查看本文应用于的产品
本文的发布号曾为 CHS244368
重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 Microsoft Windows 注册表说明
展开全部 | 关闭全部

本文内容

概要

本文描述如何优化大型网络配置中的 Active Directory 复制。

更多信息

警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。
当在网络中添加或移除域控制器时、当域控制器不可用时或者当数据复制计划改变时,知识一致性检查器 (KCC) 会动态地调整网络的数据复制拓扑。

KCC 的任务包括:
  • 根据 Active Directory 对象描述的网络拓扑,KCC 创建用于定义域控制器的入站复制和出站复制的连接对象:

    • 当复制源在同一站点中时,进入运行 KCC 的域控制器。
    • 当复制源在不同的站点中时,如果运行 KCC 的域控制器是为其站点选择的站点间拓扑生成器,则进入运行 KCC 的站点。
  • 将 KCC 定义的和管理员定义的 Microsoft Windows NT 目录服务连接 (ntdsConnection) 对象转换为目录服务 (DS) 复制引擎理解的配置。
默认情况下,每 15 分钟执行一次上述各项任务。有关 KCC 的更多信息,请参阅 Windows 2000 Resource Kit 中的“Active Directory 复制”一章。

示例

在某些包含许多站点、许多域或站点间有许多路由的大型站点配置中,站点间 KCC 执行缓慢,并占用太多中央处理单元 (CPU) 时间和内存资源。

如果 D 是网络中域的数目,S 是网络中站点的数目,并且
(1 + D) * S^2 <= 100,000
那么,您就可以放心地忽略本文的其余部分。

下表列出了在没有进行性能优化的情况下,一个站点间 KCC 在各种集散式配置下运行时的执行时间和内存占用的数据。每个站点都包含一个域控制器(对应于单个域)和一个全局编录。各个域在这些站点间均匀分布。自动站点链接桥接已启用。测量是在 Intel Pentium III Xeon 处理器为 500MHz 和随机存取内存 (RAM) 为 1 GB 的条件下进行的。内存使用包含数据库缓存。当计算机的物理内存小时,内存占用也小。

收起该表格展开该表格
位置站点数目域数目运行时间 (h:m:s)内存使用量(单位为 K)
分散站点12510:00:1211748
中心站点12510:00:2112256
分散站点25010:00:4145660
中心站点25010:01:0544820
分散站点50010:02:56173216
中心站点50010:04:34174752
分散站点100010:15:23685596
中心站点100010:17:34688568
分散站点100010:15:54685604
中心站点100010:17:51689668
分散站点125100:00:5958520
中心站点125100:01:1958536
分散站点250100:04:00228304
中心站点250100:04:47227508
分散站点500100:21:32815916
分散站点500100:19:41823808
中心站点500100:21:18828484
分散站点125500:04:49266088
中心站点125500:05:54264024
分散站点250500:20:19831924
中心站点250500:22:49841536
执行时间的公式为:
(1 + num domains) * num sites ^ 2 * 0.0000075 minutes
通过使用 Active Directory 站点和服务管理单元,可以确定 KCC 在现有配置下运行的时间长度:
  1. 通过查看 NTDS 站点设置对象的属性,确定站点中的哪个域控制器是当前的站点间拓扑生成器。
  2. 确定在该域控制器上 KCC 执行的时间长度:

    1. 右键单击 NTDS 设置
    2. 单击检查复制拓扑
此外,还可通过使用注册表编辑器查看以下注册表项,监控正在运行的 KCC 的执行时间:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Diagnostics
将“1 知识一致性检查器”的值更改为 3 或更大。

当此值设置为 3 或更大时,KCC 将记录事件 1009 和 1013 以表示检查的开始和结束。

建议

如果您的配置不满足以上标准,请使用以下适当的方法:

减少站点配置中站点链接桥的使用

此方法适用于典型的集散式配置,它可减少站点间可能的路由数。

自动站点链接桥接表示整个网络是完全通过 Internet 协议 (IP) 路由的。在这种情况下,给定站点上的任何计算机都可以通过 IP 与任何其他站点上的任何计算机通信。默认情况下,对于 IP 和简单邮件传输协议 (SMTP) 站点间传输,自动站点链接桥接是启用的。要禁用此功能,应当在需要的位置添加显式站点链接桥对象。只有当特定站点包含域的域控制器,而该域控制器在任何相邻的站点中不存在,但该域的另一个域控制器却存在于林中的其他站点中时,才需要站点链接桥。相邻站点指包含所述站点的任何站点链接中包含的任何站点。大多数配置不需要使用站点链接桥,因为任何具有给定域(该域存在于多个站点中)的域控制器的站点几乎始终与至少一个包含相同域的域控制器的其他站点相邻。

如果在禁用自动站点链接桥接之后,KCC 不能直接或间接连接所有包含特定域的域控制器的站点,则 KCC 将记录事件 1311。

示例

目录服务一致性检查器已经确定以下情况:
  1. 没有使用 Active Directory 站点和服务管理器发布足够的物理连接来创建连接林中所有站点的跨越树。
  2. 不能在一个或多个关键服务器上执行复制来将更改传播到所有站点。这通常是无法连接到服务器导致的。
要解决问题 A,请使用 Active Directory 站点和服务管理器执行下列操作之一:
  • 发布足够的站点连接信息,这样计算机可以推知此分区可以到达此站点的路由。这是首选方法。
  • 从另一个站点中包含相同分区的控制器中,向此站点中包含分区域控制器=europe、域控制器=mycorp、域控制器=com 的域控制器添加 ntdsConnection 对象。
要解决问题 B,请查看当前的事件日志,以确定 KCC 不能与哪个或哪些服务器联系。

要禁用自动站点链接桥接,请执行下列操作:
  1. 双击 Active Directory 站点和服务管理单元。
  2. 右键单击 IP 传输对象,然后单击属性
  3. 在“站点间传输”容器中,单击适当的复选框以清除它,然后单击确定
对 KCC 可以自动计算站点间拓扑的配置依然有限制,即使不使用站点链接桥接也是如此。下表列出在各种集散式配置下运行的站点间 KCC 的执行时间和内存占用的数据。每个站点都包含一个域控制器(对应于单个域)和一个全局编录 (GC)。各个域在这些站点间均匀分布。自动站点链接桥接被禁用,而且尚未定义站点链接桥。测量是在 Intel Pentium III Xeon 处理器为 500MHz 且 RAM 为 1GB 的条件下进行的;在 200MHz 的 Intel Pentium II 处理器上的执行时间大约是这些列出时间的两倍。内存使用包含数据库缓存。当计算机的物理内存小时,内存占用也小。

收起该表格展开该表格
位置站点数目域数目运行时间 (h:m:s)内存使用量(单位为 K)
分散站点100210:01:2731380
中心站点100210:04:4633352
分散站点50210:00:359980
中心站点50210:01:5811540
分散站点25210:00:234072
中心站点25210:00:544112
分散站点12710:00:101464
中心站点12710:00:262052
分散站点1002500:39:4292160
中心站点1002501:21:3085392
分散站点502500:11:3342456
中心站点502500:26:2637384
分散站点252500:03:3215292
中心站点252500:09:3618408
分散站点127500:01:157364
中心站点127500:04:059324
分散站点1002100:09:0050752
中心站点1002100:19:0460956
分散站点的执行时间的公式为:
(1 + number of domains) * number of sites * 0.0006 minutes
其中 number of domains 是域数目,number of sites 是站点数目。

中心站点的执行时间的公式为:
(1 + number of domains) * number of sites * 0.0015 minutes

仅在非峰值时段运行站点间 KCC

此方法适用于计算机有个很少执行任务的时间段,且站点间 KCC 正好可以在该时间段内运行的情况。仅当减少了站点链接桥接的使用,而 KCC 的执行时间或内存使用在关键业务时段仍不理想时,一般才使用此方法。

可以将给定站点中的 KCC 配置为只禁用站点间拓扑计算,而保留它们响应站点内更改复制要求的能力。然后可以在一天中的特定时间重新启用站点间拓扑计算,并持续一段时间,以使站点中的 KCC 有足够的时间运行站点间检查,然后再次禁用站点间拓扑计算。

当禁用特定站点的站点间拓扑检查时,该站点将不响应在站点间拓扑中的更改。如果复制给定域的所有站点间连接的一个或两个复制伙伴都不可用,KCC 将不能自动适应新的源或目标,直到域控制器重新联机或 KCC 的站点间部分再次运行。

注意:管理员可以在禁用站点间 KCC 时手动添加连接。

要评估此方法在您的配置中是否可行,首先应确定 KCC 在您的环境下运行所需的时间。然后确定在每个站点的一个域控制器中是否有一个时间段来满足该时间和内存要求。不必同时在所有站点运行 KCC 的站点间部分。

要计划站点间 KCC 的运行,请使用任务计划程序组件来计划“wscript /b runkcc.vbs”(下文提供了文本形式的脚本)的执行。有关任务计划程序的更多信息,请参阅 Windows 2000 帮助中的“任务计划程序”主题。Runkcc.vbs 需要在它运行的计算机上安装 Windows 2000 CD-ROM 中的 Support\Tools 文件夹中的支持工具。

彻底禁用站点间 KCC,手动配置连接

此方法适用于典型的集散式配置。只有在前两种方法不可行时,特别是在配置中有成千上万的站点时,一般才使用此方法。

如果彻底禁用了自动站点间拓扑,则必须由管理员亲自创建必需的站点间复制连接对象以确保复制数据在林中继续流动。一般说来,如果用户的站点数超过了 KCC 限制,则可以使用集散式网络拓扑来连接公司总部与大量同类分公司站点。这种对称极大地简化了该过程。

如果没有 KCC 的帮助,在创建您自己的连接对象之前,应当考虑以下几点:
  • 服务器故障。考虑分公司站点的域控制器 BR1 连接到公司中心站点的域控制器 HQ1,而 HQ1 发生硬件错误、电源故障或某种其他灾难性事件的情况。当启用自动站点间拓扑时,KCC 负责添加其他连接以便从公司中心站点的另一个域控制器临时复制,直到 HQ1 重新联机。如果没有自动站点间拓扑生成,要确保发生服务器故障时复制继续进行,必须定义冗余连接。定义两个 BR1 入站连接,一个从 HQ1,另一个从 HQ2。如果分公司有两个域控制器,即 BR1 和 BR2,那么第二个连接应当从 HQ2 到 BR2。这样,在分公司的两个域控制器之一发生故障时,可以从公司中心站点复制更新。

    以这种方式定义的冗余连接可能会强制多次复制同一个 Active Directory 更新,除非正在使用 IP 传输,并且站点的所有入站连接都有站点内的相同目标域控制器。当使用 SMTP 传输或多个目标域控制器时,应当使复制计划在时间上错开,以便在目标站点中接收、应用和复制来自第一个复制源的更新后,再请求第二个复制源。将以上示例推而广之,第一个连接可在奇数钟点复制,而第二个连接可在偶数钟点复制。
  • 全局编录放置。如果一个站点包含几个 GC,则其中一个或多个 GC 必须用于复制到该站点和从该站点进行复制。否则,GC 将不会保持同步。
  • 域放置。如果某特定域的各个域控制器分布在多个站点上,则该域的一个或多个域控制器必须用于与同一域的其他域控制器进行复制。这可保证域数据在该域的所有域控制器上复制。如果站点 2 包含域 A 的一个域控制器,那么站点 1 中域 A 的域控制器仅仅与站点 2 中一个域 B 的 GC 进行复制是不够的。因为域 B 的 GC 只有域 A 的对象属性的子集,它不能充当在域 A 的各个域控制器之间复制此集内没有的属性的渠道。
  • 平衡负载。分配入站和出站复制负载。例如,如果公司中心站点有 100 个域控制器,1000 个分公司各有 1 个域控制器,而您不希望将所有 1000 个分公司域控制器配置为从中心站点的同一域控制器中进行复制。而使用负载平衡,可使公司中心站点的每个域控制器与 10 个分公司站点通信。由于每次只能发生一个入站复制,而且与分公司站点的通信一般通过慢速广域网 (WAN) 链接进行,所以,如果不能平衡负载,则不仅会增加中心站点域控制器的 CPU 和内存的负荷,还可能导致大量的等待复制的数据积压。
也可通过 KCC 的一次运行初步创建连接,然后由管理员对这些连接进行调整。如果不准备以后定期运行站点间 KCC,那么管理员必须定义其他复制连接,以便在第一个连接所识别的源域控制器发生故障时复制可以继续进行。如果所有现有的连接都失败,而且站点间 KCC 没有重新运行,则管理员必须直接连接到目标域控制器,并建立与可访问的域控制器的连接。在稳定性差的配置(由于网络故障而使最佳源域控制器偶尔长时间不可用的情况)中,最好拥有一个以上的额外连接。

Runkcc.vbs(触发 KCC 一次性运行的 VBScript)

Microsoft 提供的编程示例只用于说明目的,不附带任何明示或默示的保证。这包括但不限于对适销性或特定用途适用性的默示保证。本文假定您熟悉所演示的编程语言和用于创建和调试过程的工具。Microsoft 的支持工程师可以帮助解释某个特定过程的功能,但是他们不会修改这些示例以提供额外的功能或构建过程以满足您的特殊需求。 '*/ runkcc.vbs
'*/
'*/ Parameters:<none>
'*/ Purpose:When run on a domain controller, this script makes the local domain controller the Inter-Site
'*/ Topology Generator for its site, enables inter-Site topology generation temporarily if it is disabled,
'*/ runs the KCC topology generation process, and disables inter-site topology generation if it was
'*/ configured so to begin with.
'*/
'*/

On Error Resume Next

Call ExecuteKCC()

Public Sub ReportError ()

'tell the user the error
wscript.Echo "The following error occurred:(" + cstr(hex(err.number)) +") " + cstr(err.description)

End Sub

Public Sub ExecuteKCC ()

On Error Resume Next

wscript.echo "Loading functions for use by this script..."
set dll=createobject("iadstools.DCFunctions")
if err.number <> 0 then ReportError:WScript.Quit
dll.enabledebuglogging 1

'get the local box name
wscript.echo "1> Connecting to local machine..."
set localMachine=GetObject("LDAP://localhost/rootdse")
if err.number <> 0 then ReportError:Wscript.Quit
ServerName=localmachine.get("dnsHostName")
if err.number <> 0 then ReportError:WScript.Quit
wscript.echo "2> Found local machine " + ucase(ServerName)

'get the config NC
configNC=localMachine.get("configurationNamingContext")
if err.number <> 0 then ReportError:Wscript.Quit
wscript.echo "3> Configuration Naming Context is:" + configNC

'get the SiteName of this box
domain controllerSiteName=dll.dsgetsitename
if err.number <> 0 then ReportError:Wscript.Quit
wscript.echo "4> The site for this server is:" + domain controllersitename

'get the DSA DN for this box
DSAObj = localMachine.get("dsServiceName")
if err.number <> 0 then ReportError:Wscript.Quit
wscript.echo "5> The DN for this machine's DSA is:" + DSAObj

'bind to the Site Settings object in the Directory
SiteSettingsPath="LDAP://localhost/CN=NTDS Site Settings,CN="+domain controllerSiteName+",CN=Sites,"+configNC
set SiteSettings=GetObject(SiteSettingsPath)
if err.number <> 0 then ReportError:WScript.Quit

'make the current box the ISTG
wscript.echo "6> Making " + ucase(ServerName) + " the Inter Site Topology Generator for the " + ucase(domain controllerSiteName) + " site."
SiteSettings.Put "interSiteTopologyGenerator",DSAObj
SiteSettings.SetInfo
if err.number <> 0 then ReportError:Wscript.Quit

'get the current options
origOptions=SiteSettings.Get("options")
if hex(err.number) = "8000500D" then
origOptions=0
elseif err.number=0 then
'do nothing
else
ReportError:Wscript.Quit
end if
modOptions=origOptions
wscript.echo "7> Currently, the options specified for KCC operations for the ISTG in this site is set to:" + cstr(origOptions)

'enable the KCC if currently disabled, otherwise, leave it alone
if modOPtions And 16 then
mod2Options=modOptions XOr 16
wscript.echo "8> The KCC is currently disabled for inter-site topology generation.Temporarily re-enabling it.Setting options to:"+ cstr(mod2Options)
SiteSettings.Put "options", mod2Options
SiteSettings.SetInfo
if err.number <> 0 then
ReportError
wscript.echo "An error occurred during the process of modifying the options attribute.Check to make sure that it has the correct original value.This script is terminating."
Wscript.Quit
end if
else
wscript.echo "8> The KCC is currently enabled to handle inter-site topology generation.No change is necessary before triggering the KCC."
end if

'run the KCC
Result=dll.TriggerKCC(cstr(ServerName))
if err.number > 0 then ReportError
If result=0 then
wscript.echo "9> The KCC was successfully triggered on " + ucase(ServerName)
else
wscript.echo "9> The following error occurred trigerring the KCC on " + ucase(ServerName) + ":" + dll.lasterrortext
end if

'disable the KCC
wscript.echo "10> Re-writing the original options (" + cstr(origOptions) + ") to the ISTG."
SiteSettings.Put "options", origOptions
SiteSettings.SetInfo
if err.number <> 0 then ReportError:WScript.Quit

End Sub

'end script

有关 Windows 2000 KCC 的其他信息,请单击下面的文章编号,以查看相应的 Microsoft 知识库文章:
242780 如何禁止知识一致性检查器自动创建复制拓扑
224815 Active Directory 复制中站点间拓扑生成器的角色
214745 事件 ID 1311 疑难解答:知识一致性检查器

属性

文章编号: 244368 - 最后修改: 2006年2月20日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
关键字:?
kbinfo kbnetwork KB244368
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com