深入理解全域性編錄伺服器GC

2021-05-21 12:53:30 字數 3307 閱讀 9870

在win2003ad域環境中,除了fsmo操作主機角色外,全域性編錄伺服器(gc)也是有著特殊含義的網域控制器。通過gc,可以提高在活動目錄中搜尋物件的速度,可以加快使用者登入驗證等。

簡單的說,gc是森林中所有物件的唯讀調整緩衝記憶體( read only cache),目錄只用於搜尋。gc伺服器儲存本域中所有物件的所有屬性,同時會儲存林中其他域中所有物件的部分屬性。一般來說,屬性是否儲存在gc中,取決於該屬性在搜尋中使用的頻率,由系統自動進行決定。但ad架構管理員也可以定義物件的哪些屬性儲存的gc中,同時決定該屬性是否可以進行索引。

一:gc出現的原因   

在win2003活動目錄中有兩種目錄服務,分別是dns以及ldap,兩個目錄服務互為補充。dns的目的比較簡單,用於簡單快速的定位網域控制器,但定位到具體的網域控制器後,對活動目錄資訊的更細緻訪問,如活動目錄中關於使用者,電腦,印表機等物件資訊搜尋,dns就無能為力。此時就需要通過ldap服務來訪問。   如果使用者知道某個物件處於哪個域,也知道物件的標識名,那麼用ldap搜尋物件就非常容易。但如果使用者只知道某個物件的某個屬性,根本不知道物件所處的域,也不知道該物件的標識名,那麼使用ldap來搜尋物件是一件非常困難的事,ad不得不對當前環境中每乙個域的每個物件都搜尋一遍。為了解決這個問題,活動目錄提供了全域性編錄伺服器(gc,到global catalog)。gc中包含了當前林中每個域中所有物件的副本,如果在一次ldap搜尋中,涉及到搜尋中多個域的名稱上下文時,ad會選擇搜尋gc伺服器,從而實現加快搜尋速度,減少網路通訊量的目的。

二:gc的作用

1. 儲存物件資訊副本,提高搜尋效能

全域性編錄伺服器中除了儲存本域中所有物件的所有屬性外,還儲存林中其他域所有物件的部分屬性,這樣就允許使用者通過全域性編錄資訊搜尋林中所有域中物件的資訊,而不用考慮資料儲存的位置。通過gc執行林中搜尋時可獲得最大的速度並產生最小的網路通訊量。

2. 儲存通用組成員身份資訊,幫助使用者構建訪問權杖

全域性組成員身份儲存在每個域中,但通用組成員身份只儲存在全域性編錄伺服器中。

我們知道,使用者在登陸過程中需要由登入的dc構建乙個安全的訪問權杖,而要構建成功乙個安全的訪問權杖由三方面資訊組成:使用者sid,組sid,權力。其中使用者sid和使用者權力可以由登入dc獲得,但對於獲取組sid資訊時,需要確定該使用者屬不屬於通用組,而通用組資訊只儲存在gc中。所以當gc故障,負責構建安全訪問權杖的dc就無法聯絡gc來確認該使用者組的sid,也就無法構建乙個安全的訪問權杖。

注:在win2003中,可以通過通用組快取功能解決gc不線上無法登入情況,具體操作本文略過。

3. 提供使用者upn名稱登入身份驗證。

當執行身份驗證的網域控制器沒有使用者upn帳號資訊時,將由gc解析使用者主機名稱(upn)進行身份驗證,以完成登入過程

4.  驗證林中其他域物件的參考

當網域控制器的某個物件的屬性包含有另乙個域某個物件的參考時,將由全域性編錄伺服器來完成驗證。

三:檢視當前環境中gc伺服器

1.  通過「active directory 站點和服務」檢視       

點選「開始-設定-控制面板-管理工具-active directory站點和服務」: 選中"ntds setting",右鍵選擇「屬性」, 在彈出的「ntds setting 屬性」對話方塊中,有「全域性編錄」核取方塊,如果選中,表示是一台全域性編錄伺服器, 如果沒有選中,則表示當前的伺服器不是全域性編錄伺服器。

2.  利用複製監視器replmon檢視

複製監視器replication monitor(replmon)是針對windows server的故障查詢工具,不但是定位活動目錄複製故障強有利的工具,同時也可以使用該工具檢視和檢查操作主機角色狀態。 步驟:選中當前dc,右鍵單擊,選擇「show global catalog servers in enterprise」

3.  通過命令列方式檢視全域性編錄伺服器

在supprot tools和resource tools工具中,有多個命令列工具可以檢視全域性編錄伺服器,這裡只列出兩個最常見的命令列工具  

使用dsquery命令檢視當前域中的gc: dsquery server -domain dgstella.com -isgc   

使用nltest命令檢視當前域中的gc: nltest /dsgetdc:dgstella.com

四:提公升dc為全域性編錄伺服器

將一台網域控制器提公升為全域性編錄伺服器操作很簡單,方法見通過「active directory 站點和服務」管理單元檢視全域性編錄伺服器,將「全域性編錄」核取方塊選中即可。

注意:設定完成後,並不代表當前的全域性編錄伺服器已經提公升完成,因為全域性編錄伺服器中包含有多個域的所有物件,需要時間來進行全域性編錄資料庫同步。

五:驗證全域性編錄伺服器的提公升

通過提公升dc為全域性編錄伺服器操作,需要時間同步全域性編錄伺服器,同步完成後,全域性編錄伺服器才開始真正執行。

下面介紹如何檢視全域性編錄伺服器是否已經開始工作

1:使用ldp工具檢視當前dc的isglobalcatalogready屬性

ldp(ldap流覽器工具)是乙個輕量目錄訪問協定 (ldap) 使用者端實用工具,可以用來查詢和流覽 ldap目錄服務,詳細用法本文不做具體介紹,可以搜尋相關的說明文件或後期的blog文章介紹。這裡只給出簡單的使用說明步驟:與ldap目錄繫結「執行」,輸入「ldp」,開啟ldp視窗後,選擇「connection ", ldp連線到「dgstella.com」網網域控制器,顯示檢測結果,從下圖可以看出「isglobalcatalogready」屬性為true;

2:檢視dns管理工具檢視gc記錄是否已更新到dns中。

從下圖可以看出當前哪個網域控制器是gc,且使用的埠是多少,預設的gc使用埠是3268

如果dns記錄缺失,可以通過一下方法來進行修復: net stop netlogon&net start netlogon&nltest /dsregdns

六:驗證全域性編錄伺服器是否工作正常

全域性編錄伺服器正確提公升後,可以通過檢視登錄檔資訊和埠狀態來檢視全域性編錄伺服器是否工作正常。

1:檢視登錄檔資訊(hklm/system/currentcontrolset/services/ntds/parameters)健值:global catalog promotion complete,值為1,表示gc工作正常;

2:全域性服務編錄器預設使用3268/3269埠,通過檢視埠是否處於監聽狀態可以判斷gc是否工作正常,使用netstat -an命令檢視當前正在執行的埠,可以看到3268/3269埠已經處於正常監聽狀態;

七:使用adsiedit工具檢視全域性編錄伺服器中的資料

包中包括adsiedit.dll和adsiedit.msc兩個檔,需要手動把他們拷到指定路徑下,比如:c: /windows/adsiedit.dll 然後還需要進行註冊,如執行中執行:regsvr32 c: /windows/adsiedit.dll

全域性編錄伺服器(GC)

gc是一台dc,它是一台特殊的dc,它儲存森林中所有物件部分唯讀資訊的特殊dc。在森林可以有多台gc,全域性編錄是一庫,它包含了在活動目錄中所有物件連續請求資訊的子集,例如使用者登入的id等。gc的主要作用有 1 儲存森林物件的資訊副本。2 儲存能用組成員身份資訊。3 提高使用者主體 upn 名稱身...

深入理解Redis 伺服器啟動過程

一台redis伺服器從啟動到能夠接收客戶端的命令請求,需要經過一系列的初始化和設定過程,大致需要經過以下幾步。伺服器狀態結構的初始化會建立乙個struct rdisserver型別的例項變數server作為伺服器的狀態,同時為結構中的其他屬性設定預設值。由redis.c initserverconf...

深入理解PHP原理之PHP與WEB伺服器互動

大家都知道,php需要在具體的web伺服器中才能執行,例如nginx apache等,但是php是怎樣啟動,又是怎樣在伺服器中執行,然後兩者又是怎樣進行互動的呢?1.web伺服器呼叫php介面 以apache伺服器為例,我們看看該伺服器是怎樣啟動php,並呼叫php中的方法。apache伺服器啟動並...