如何在大型網路中最佳化 Active Directory 複寫

文章翻譯 文章翻譯
文章編號: 244368 - 檢視此文章適用的產品。
本文曾發行於 CHT244368
重要 本文包含如何修改登錄的相關資訊。修改登錄之前,請務必將它備份起來,並瞭解如何在發生問題時還原登錄。如需有關如何備份、還原和修改登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
256986 Microsoft Windows 登錄說明
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何在大型網路設定中最佳化 Active Directory 複寫。

其他相關資訊

警告 如果您使用「登錄編輯程式」或其他方法不當地修改登錄,可能會發生嚴重問題。您可能需要重新安裝作業系統,才能解決這些問題。Microsoft 不保證可以解決這些問題。請自行承擔修改登錄的一切風險。 當網路中新增或移除網域控制站、網域控制站無法使用或資料複寫排程變更時,「知識一致性檢查程式」(KCC) 會動態調整網路的資料複寫拓撲。

KCC 的工作是:
  • 根據 Active Directory 物件描述的網路拓撲,KCC 會建立連線物件,用來定義網域控制站的輸入和輸出複寫:

    • 對於同一站台內的來源,會輸入至執行 KCC 的網域控制站。
    • 對於不同站台中的來源,如果執行 KCC 的網域控制站是為其站台所選的 interSiteTopologyGenerator,則輸入至執行 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 以未套用效能調整的各種中樞與支點設定執行時,所執行的執行時間和記憶體消耗量數字。每個站台都具有單一網域的網域控制站和通用類別目錄。網域會平均分佈在站台之間。自動站台連結橋接已啟用。測量是在具有 1 GB「隨機存取記憶體」(RAM) 的 Intel Pentium III Xeon (速度為 500MHz) 上進行的。記憶體使用量包括資料庫快取。在實體記憶體較少的電腦上,記憶體消耗量也較低。

摺疊此表格展開此表格
位置# 站台# 網域經過時間 (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 以表示檢查的開始和結束。

建議

如果您的設定不符合上述條件,請使用適當的方法:

減少使用站台設定中的站台連結橋接

這個選項會減少站台之間的潛在路由數目,在一般的中樞與支點設定中很管用。

自動站台連結橋接表示整個網路完全是由網際網路通訊協定 (IP) 傳送的。在這種情況下,指定站台上的任何電腦都可以透過 IP 與任何其他站台中的任何電腦通訊。根據預設,IP 和 Simple Mail Transport Protocol (SMTP) 站台間傳輸都會啟用自動站台連結橋接。您必須在有需要的地方新增明確的站台連結橋接物件,才能停用此功能。只有當某個特定站台含有不在任何相臨站台中的網域的網域控制站,但該網域的另一個網域控制站卻出現在樹系的其他站台中時,才需要站台連結橋接。相臨站台定義為含有所討論的站台的任何站台連結中的任何站台。大部分設定都不需要使用站台連結橋接,因為任何含有位於多個站台中的指定網域的網域控制站的站台,幾乎一定會與至少一個含有相同網域的網域控制站的其他站台相臨。

在停用自動站台連結橋接之後,如果 KCC 無法直接或間接連接所有含有特定網域的網域控制站的站台,KCC 將會記錄事件 1311。

範例

目錄服務一致性檢查程式判定可能:
  1. 沒有足夠的實體連線能力可以透過 [Active Directory 站台及服務管理員] 來發行,以建立一個連接樹系中所有站台之跨距樹狀目錄。
  2. 無法經由一些重要的伺服器來執行複寫,以使變更能在所有站台上傳播。經常是因為伺服器無法連線。
如果要解決問題 A,請使用 [Active Directory 站台及服務管理員] 執行下列其中一項操作:
  • 發行足夠的站台連線能力資訊,例如電腦可以推測一個路由,使磁碟分割可以連接到這個站台。這是比較偏好的選擇。
  • 從存在含有相同磁碟分割 domain controller=europe,domain controller=mycorp,domain controller=com 的另一個站台的網域控制站上,將一個 ntdsConnection 物件新增到含有磁碟分割 domain controller=europe,domain controller=mycorp,domain controller=com 的這個站台的網域控制站。
如果要解決問題 B,請檢查目前的事件記錄,以判斷 KCC 無法與哪個或哪些伺服器連線。

停用自動站台連結橋接:
  1. 按兩下 [Active Directory 站台及服務] 嵌入式管理單元。
  2. 用滑鼠右鍵按一下 IP 傳輸物件,然後按一下 [內容]
  3. 在 [站台間傳輸] 容器中,按一下適當的核取方塊以取消選取,然後按一下 [確定]
即使不使用站台連結橋接,KCC 可以自動計算站台間拓撲的設定仍然會有限制。下表列出站台間 KCC 以各種中樞與支點設定執行時,所執行的執行時間和記憶體消耗量數字。每個站台都有單一網域的網域控制站和通用類別目錄 (GC)。網域會平均分佈在站台之間。自動站台連結橋接已停用,而且未定義站台連結橋接。測量是在具有 1 GB RAM 的 Intel Pentium III Xeon (速度為 500MHz) 上進行的;Intel Pentium II 200MHz 處理器的執行時間大約是上述的兩倍。記憶體使用量包括資料庫快取。在實體記憶體較少的電腦上,記憶體消耗量也較低。

摺疊此表格展開此表格
位置# 站台# 網域經過時間 (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。如此萬一兩個分公司網域控制站的其中一個發生故障,還可以從公司中心站台複寫更新。

    除非使用 IP 傳輸,而且輸入站台的所有連線都具有站台內的相同目的網域控制站,否則使用這種方法定義的重複連線可能導致多次強制複寫同一個 Active Directory 更新。當使用 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
domaincontrollerSiteName=dll.dsgetsitename

if err.number <> 0 then ReportError:Wscript.Quit
wscript.echo "4> The site for this server is:" + domaincontrollersitename

'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="+domaincontrollerSiteName+",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(domaincontrollerSiteName) + " 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 How to disable the Knowledge Consistency Checker from automatically creating replication topology
224815 The Role of the Inter-Site Topology Generator in Active Directory Replication
214745 Troubleshooting Event ID 1311: Knowledge Consistency Checker

屬性

文章編號: 244368 - 上次校閱: 2006年12月21日 - 版次: 5.1
這篇文章中的資訊適用於:
  • 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