The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

IT 經驗談:關於網域主控站安裝在 VM 裡的慘痛教訓

我公司人不多,但還是有導入 AD 架構,運作幾年來其實也沒發生過什麼狀況,但昨天卻發生一件很瞎的 IT 事件,讓我處理這個問題處理到超過晚上 12 點,原因就出在一個非常瞎的原因,實在讓我又氣又恨,不知道要恨 Hyper-V 還是 AD 架構,不過再怎麼說這些都是自找的,只能吃苦當吃補了!

我前陣子買了壹台新主機,並安裝了 Hyper-V 與 Exchange Server 2007,而且也把舊的網域主控站 ( DC, Domain Controller ) 虛擬化,安裝在這台主機的 Hyper-V 裡。

首先,先將新安裝的 VM 設定成為第二台備援用的 DC,誰知道主要的 DC 主機在第二台虛擬化後的 DC 生效後沒幾天就 自然身亡(硬碟掛掉),不得已只好把虛擬化後的 DC 當成主要 DC 使用,而且這幾個月都是只有壹台 DC 的情況在運作,且由於是新機器,應該不會出什麼大問題,所以也沒有想到要弄另一台 DC 起來。

運作了快一年也沒出什麼大事,但小問題倒是不少,最常發生的問題如下:

---

我的主機除了有 Hyper-V 之外,還有另一個依賴 AD 的大怪獸 “Exchange Server 2007”,所以該電腦必須加入網域才行。當 Hyper-V 主機重開機時,所�� VM 會先進入「儲存狀態」的狀況,然後進行重開機,重開機完後會自動回覆狀態,但開完機之後所有 Windows 服務與 Hyper-V 服務會同時啟動,Hyper-V 服務啟動後才會啟動所有之前儲存狀態的 VM(包括 DC 那台),所以 Exchange Server 2007 相關服務會先啟動,但因為 DC 這台 VM 尚未完全回覆狀態,所以 Exchange 會因為查不到 DC 而啟動失敗。

因此每次主機重開,我都要手動啟動一次 Exchange Server 2007 的 Microsoft Exchange System Attendant 服務,才能讓所有人登入 Exchange 使用。

---

昨天,我手很癢的先將 Hyper-V 中所有的 VM 手動「儲存狀態」,然後再將 Windows Update 過後的主機重開,這卻導致在重開機後不會自動啟動這些被我手動儲存狀態的 VM,當我要手動啟動 DC 這台 VM 時,卻遇到了如下圖的錯誤:

Hyper-V Manager: An error occurred while attempting to start the selected virtual machine(s).  The computer 'localhost' failed to perform the requested operation.

所有 Hyper-V 中的 VM 都可以啟動,就唯讀 DC 這台主機無法啟動,非常怪異!

從事件檢視器中的 [應用程式及服務記錄檔] / [Microsoft] / [Windows] / [Hyper-V-VMMS] / [Admin] 發現如下的錯誤,這是因為找不到 DC 的關係才無法啟動的。

Failed to register service principal name.

所以啦,一整個囧很大,第一次遇到這種服務啟動打死結的情況!

  • 主機重開機
  • 主機等 DC 上線
  • 但 DC 在 Hyper-V 的 VM 裡
  • Hyper-V 等 DC 上線才能啟動 VM
  • 但 DC 在 Hyper-V 的 VM 裡
  • Hyper-V 等 DC 上線才能啟動 VM
  • 但 DC 在 Hyper-V 的 VM 裡
  • Hyper-V 等 DC 上線才能啟動 VM
  • ……

早知道手動將 DC 儲存狀態會有這種狀況,我就不會雞婆將 DC 手動儲存狀態了,但千金難買早知道阿!

這個教訓讓我學到 3 個寶貴的經驗:

  1. DC 可以安裝在 VM 裡,但只有壹台 DC 時,VM 的 宿主(Host) 不要加入網域!
  2. 沒事不要手動將 DC 儲存狀態或關閉,反正主機重開機時會自動將 VM 重啟!
  3. DC 至少要兩台,兩台都在 VM 裡的話,不要一起關機!

最後,我的自救方法就是新增一個 VM,重新掛載原本 DC 那台 VM 的 VHD 虛擬硬碟,然後開機後重新設定網路,這才救了我一命!