適用於:✔️Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集
時間同步對於安全性和事件相互關聯而言相當重要。 有時候會用於分散式交易實作。 多個電腦系統之間的時間精確度是透過同步來達成。 同步可能會受到多種因素影響,包括重新開機以及時間來源和擷取時間的電腦之間的網路流量。
概觀
電腦時鐘精確度的衡量方式,是依據電腦時鐘與國際標準時間 (UTC) 時間標準的接近程度。 UTC 是由多國的精準原子鐘樣本所定義;原子鐘在 300 年內只會誤差一秒。 但是直接讀取 UTC 需使用專用的硬體。 替代方式為系統將時間伺服器同步為 UTC,並從其他電腦存取以提供延展性和強固性。 每部電腦都有持續運作的時間同步服務,知道需使用哪些時間伺服器,且會定期檢查電腦時鐘是否需要修正,並視需要調整時間。
Azure 主機會與內部 Microsoft 時間伺服器同步,這些時間伺服器會透過 GPS 天線從 Microsoft 所屬的 Stratum 1 裝置擷取時間。 Azure 中的虛擬機器可以依賴其主機將準確的時間 (「主機時間」) 傳遞至 VM,也可以由 VM 直接從時間伺服器取得時間,或結合兩種方式。
虛擬機器與主機的互動也可能會影響時鐘。 進行記憶體保留維修期間,VM 會暫停最多 30 秒。 比方說,維修開始之前 VM 時鐘顯示上午 10:00:00,並持續 28 秒。 VM 繼續執行後,VM 上的時鐘仍會顯示上午 10:00:00,也就是有 28 秒的誤差。 為了更正此問題,VMICTimeSync 服務會監視主機上發生的情況,並提示 VM 上發生變更以補償。
VMICTimeSync 服務會以樣本模式或同步模式運作,且僅會推動時鐘向前。 在需要執行 W32time 的範例模式中,VMICTimeSync 服務每隔 5 秒輪詢主機,並將時間範例提供給 W32time。 大約每 30 秒,W32time 服務會採用最新的時間範例,並用它來影響來賓的時鐘。 如果客體已繼續或客體的時鐘落後主機的時鐘 5 秒以上,就會啟動同步處理模式。 如果 W32time 服務正常執行,則不應該發生後者的情況。
若沒有時間同步功能,VM 上的時鐘將會累積錯誤。 當只有一個 VM 時,除非工作負載需要高度精確的守時,否則效果可能並不重要。 但是在多數情況下,我們都有多部互相連接並使用時間來追蹤交易的 VM,而且整個部署中的時間必須保持一致。 當 VM 之間的時間有所不同,可能會產生下列影響:
- 驗證將會失敗。 Kerberos 這類安全性通訊協定或憑證相依的技術,仰賴整個系統中的時間維持一致。
- 如果記錄檔(或其他數據)不按時達成一致,很難找出系統中發生了什麼事。 同一個事件看起來可能像發生在不同時間,導致難以建立相互關聯。
- 當時鐘有所誤差,計費功能也可能會計算錯誤。
Windows 部署的最佳結果是使用 Windows Server 2016 做為客體作系統來達成,這可確保您可以使用最新的時間同步處理改善。
設定選項
針對裝載於 Azure 的 Windows VM 設定時間同步有三個選項:
- 主機時間和 time.windows.com。 這是 Azure Marketplace 映像中使用的預設組態。
- 僅限主機。
- 使用另一個外部時間伺服器並搭配或不搭配使用主機時間。 針對此選項,請遵循《Azure 中 Active Directory Windows 虛擬機時間機制》指南。
使用預設值
根據預設,Windows 作業系統的 VM 映像檔已設定為由 w32time 從兩個來源進行同步處理:
- NtpClient 提供者,可從 time.windows.com 取得資訊。
- VMICTimeSync 服務,用來將主機時間傳達給 VM,並在 VM 暫停進行維護後進行更正。 Azure 主機使用 Microsoft 所屬的 Stratum 1 裝置來維持時間的準確性。
w32time 偏好依下列優先順序選擇時間提供者:層級、根延遲、根分散、時間位移。 在大多數情況下,Azure VM 上的 w32time 會偏好主機時間,因為它會進行評估來比較這兩個時間來源。
針對加入網域的機器,網域本身會建立時間同步階層,但樹系根仍需從其他地方取得時間,且以下考量仍適用。
僅限主機
由於 time.windows.com 是公用NTP伺服器,因此同步處理時間需要透過因特網傳送流量,因此不同的封包延遲可能會對時間同步的品質造成負面影響。切換至僅限主機同步處理來移除 time.windows.com 有時會改善時間同步處理結果。
如果您使用預設設定遇到時間同步問題,則切換至僅限主機的時間同步是合理的。 試用僅限主機同步處理,以查看這是否會改善 VM 上的時間同步處理。
外部時間伺服器
如果您有特定的時間同步需求,也有使用外部時間伺服器的選項。 外部時間伺服器可以提供精確時間,可以用於測試案例,確保時間與托管於非 Microsoft 數據中心的機器一致,或以特殊方式處理閏秒。
您可以將外部伺服器與 VMICTimeSync 服務和 VMICTimeProvider 結合,以提供類似預設組態的結果。
檢查您的設定
檢查 NtpClient 時間提供者是否已設定為使用明確的 NTP 伺服器 (NTP) 或網域時間同步處理 (NT5DS)。
w32tm /dumpreg /subkey:Parameters | findstr /i "type"
如果 VM 使用 NTP,您會看到下列輸出:
Value Name Value Type Value Data
Type REG_SZ NTP
若要查看 NtpClient 時間提供者使用哪個時間伺服器,請在提升權限的命令提示字元中輸入:
w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"
如果 VM 使用預設值,輸出看起來會像這樣:
NtpServer REG_SZ time.windows.com,0x8
若要查看目前使用的時間提供者。
w32tm /query /source
以下是您可以看到的輸出,以及其意義:
- time.windows.com - 在預設設定中,w32time 會從 time.windows.com 取得時間。 時間同步處理品質取決於其因特網連線能力,並受到封包延遲的影響。 這是您在實體計算機上取得的一般輸出。
- VM IC 時間同步提供者 - VM 正在從主機同步時間。 這是您在 Azure 上執行的虛擬機上的常見輸出結果。
- 您的網域伺服器 - 目前的計算機位於網域中,而網域會定義時間同步階層。
- 其他伺服器 - w32time 已明確設為向這部其他伺服器取得時間。 時間同步品質取決於時間伺服器的品質。
- 本機的CMOS時鐘 - 時鐘未同步。 如果重新開機後 w32time 尚未有足夠的時間啟動,或當所有設定的時間來源均無法使用,您可能會得到此輸出。
加入僅限主機時間同步
Azure 會持續努力改善主機上的時間同步處理,並可保證所有時間同步基礎結構都共置在Microsoft擁有的數據中心。 如果您在偏好使用 time.windows.com 做為主要時間來源的預設設定下有時間同步問題,您可以使用下列命令選擇僅使用主機時間同步。
將 VMIC 提供者標示為已啟用。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\VMICTimeProvider /v Enabled /t REG_DWORD /d 1 /f
將 NTPClient 提供者標示為停用。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\NtpClient /v Enabled /t REG_DWORD /d 0 /f
重新啟動 w32time 服務。
net stop w32time && net start w32time
Windows Server 2012 和 R2 VM
Windows Server 2012 和 Windows Server 2012 R2 有不同的時間同步預設設定。根據預設,w32time 會以偏好在精確時間內降低服務負荷的方式進行設定。
如果您想要移動 Windows Server 2012 和 2012 R2 部署,以使用偏好精確時間的較新預設值,您可以套用下列設定。
更新 w32time 輪詢和更新間隔以符合 Windows Server 2016 設定。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MinPollInterval /t REG_DWORD /d 6 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MaxPollInterval /t REG_DWORD /d 10 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UpdateInterval /t REG_DWORD /d 100 /f
w32tm /config /update
為了讓 w32time 能使用新的輪詢間隔,系統會將 NtpServers 標示為使用新輪詢間隔。 如果伺服器標註使用 0x1 位元旗標遮罩,便會覆寫此機制,且 w32time 會改用 SpecialPollInterval。 請確定指定的 NTP 伺服器使用 0x8 旗標或完全沒有旗標:
檢查 NTP 伺服器所使用的旗標。
w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"
後續步驟
以下是時間同步的更多詳細資訊: