通過 Hyper-V 虛擬化的域控制器的時間同步
我想知道是否有人可以推荐一種比我目前配置的更好的方法來為一組 Windows Server 2008 R2 伺服器配置域時間同步。我有三個域控制器,它們都是 Hyper-V 來賓。對於所有這些數據中心,集成服務的主機時間同步功能都被禁用。DC 配置為權威時間伺服器,FSMO DC1 伺服器使用公共 nist-a 和 nist-b 伺服器作為其時間源。DC2、DC3 和此環境中的所有其他伺服器,包括主機和來賓,都是一個域的成員,並期待 DC1 的時間。對於所有剩餘的來賓(即不是 DC),集成服務的時間同步功能被啟用。
時間服務在 900 秒內檢測到大於 5000 毫秒的時間差。時間差可能是由於與低精度時間源的同步或次優網路條件造成的。時間服務不再同步,無法向其他客戶端提供時間或更新系統時鐘。當從時間服務提供商接收到有效時間戳時,時間服務將自行更正。
如果有人對虛擬化 DC 進行了類似的設置,並且在域中的所有伺服器之間實現了高度準確的時間同步,我們將不勝感激。
謝謝。
在虛擬化域環境中保持時間的最可靠方法是保持 PDC 物理,增加所有虛擬化 DC 和域成員的同步頻率和漂移容限,並禁用所有相關 VM 的主機-客戶機時間同步。
這是問題的偽解釋(我已經很久沒有看到這個了):
當一台機器(工作站、伺服器、虛擬機)啟動時,它會從 RTC(主機板/BIOS 上的電池支持時鐘晶片)讀取時間,併計算出每個 CPU 滴答的持續時間。作業系統然後計算自最初讀取以來發生的時鐘滴答數,並將從該時間開始的時間添加到啟動時讀取的原始時間。這為您提供目前時間。
問題是,主機混淆了虛擬機發生的真實時鐘週期。當主機上實際發生 500 個時鐘週期時,VM 可能已經看到 100 個時鐘週期。所以這種計算時間的方法失效了,時間在虛擬機上變得不正常了。
通過在 vSphere 和 Hyper-V 上安裝的 vm 工具/增強包進行主機-訪客時間同步可以在某種程度上解決這個問題,但它們並不完美(在某些設置中,如果虛擬機落後於實時,他們可以向前拉動虛擬機,但他們如果虛擬機偏離實時,請不要向前跳轉)。
在多核設置上計算時鐘週期的方式(時間計數器基本上在每個核心上模擬)和可以動態改變時鐘速度的設置(我不知道這是如何維護的),這進一步複雜化了。考慮到 VM 可以在一個核心上執行一個時鐘週期,然後在下一個週期跳轉到不同 CPU 上的不同核心的想法,這真的很可怕。
所以回到最初的觀點:預設情況下,域時間從 PDC 開始,然後向下滲透到其他 DC,然後從那里傳到成員伺服器和工作站。因此,如果您確保您的 PDC 是一個真正可靠的時間源(通過保持其物理),並在所有其他域成員上禁用主機-來賓同步,您將確保一個穩定且相對準確的時間基礎設施。
請注意,將您的 PDC 作為物理伺服器執行,然後在該伺服器上啟用 Hyper-V 並向其添加一些來賓可能也不是一個合適的修復程序,因為我相信當您啟用 Hyper-V 時,“基本”作業系統實際上變成了虛擬化作業系統也是如此(默默地)。因此,保留一台物理伺服器作為 PDC,並保持 Hyper-V 開箱即用。
需要注意的有趣的一點是:Microsoft 對 Windows 時間同步的官方立場,即使使用自 XP/2003 以來內置於 Windows 的兼容 NTP 服務,也是 15 秒。在實踐中,您可以將其降低到 100 毫秒以下,但它們所支持的只是同步到 15 秒內。有點道理,大多數 MS 環境核心中唯一對時間敏感的關鍵組件是 Kerberos,預設情況下,只要您在 5 分鐘的公差範圍內,它就會正常執行。