引言:單位安裝Windows 2008群集,在安裝過程中出現一個問題,建AD時報錯提示無法配置DNS,RPC服務器不可用。安裝完成后,DNS服務器可以創建,但是DNS服務會自動關閉,查看事件日志顯示DNS無法創建線程。本文介紹故障的處理方法。
最近,單位安裝Windows 2008群 集,安裝環境為:兩臺NF8560M2+存儲+2臺光纖交換機。
結合項目,安裝步驟大體為:a.安裝操作系統,b.安裝系統驅動,c.安裝系統補丁,d.存儲掛載和存儲區域劃分(仲裁+共享),e.安裝存儲自帶的客戶端程+Windows自帶的多路徑(I/O)功能(服務器管理→功能→新增功能),f.聯機存儲硬盤,添加盤符(仲裁和共享盤符通常為X和Y,可以自定義),g.群集配置(具體配置文檔根據要安裝的數據庫可以從網上找下,重點是心跳網卡設置)。
但是,在本次安裝的過程中出現了這樣一個問題:建AD到最后的時候報錯提示無法配置DNS,RPC服務器不可用,點“確定”和“完成”,DNS服務器可以創建,但是DNS服務會自動關閉。查看事件日志顯示,DNS無法創建線程。
經探討驗證,發現引起故障的主要原因為:在當前Windows 2003 R2 x64以及Windows Server 2008或Windows Server 2008 R2 DNS服務的代碼中硬性規定了DNS線程的最大數量為120個(這個是寫死在代碼中的)。但是,DNS對CPU的核心數并沒有作任何的限制,因此會創建超過120個線程。
具體來說,DNS服務有2個功能的線程創建是根據CPU數量來決定的,一個是DNS Dynamic update功能以及 UDP I/O and dispatch程序。在64核的機器上,它們會創建64個Dynamic update的線程和64個UDP處理線程。因此,在64核CPU的平臺上,線程數量就會大大地超過限制的數量。64×2+ (64/2 or NumberOfZones ) +6 =Max 166 > 120, 因此就會報ERROR_SERVICE_NO_THREAD的錯誤。在32核的平臺上,DNS服務就工作正常,因為它最多創建86左右的線程。32×2 +16+6=86 threads。
本項目服務器配置4路8核CPU,默認開啟了超線程技術,實際32核可以模擬到64核(任務管理器→性能一欄可以查看)。
針對故障,我們最終是這樣解決的:已經確認這個是Windows DNS服務的一個Bug,我們惟一的選擇是使用少于48核CPU的平臺來提供DNS服務。48×2+18+6=120(我們可以通過減少AD集成的DNS區域到18個來符合線程的限制)。當然,如果我們僅用32核CPU,那就更沒有問題了。
具體方法有兩個:
1.點擊“開始→運行”,鍵入msconfig,調出“系統配置”窗口,在“啟動”選項里找到“高級選項卡”,更改CPU個數,改為32。
2.開機后進BIOS→A dvanced→Process&Clock→in tel HT technology,把 這個地方默認的Enable改成Disabled。
修改完成后,在“任務管理器→性能”一欄,可以看到CPU數量已經調整為32個。