間同步NTP完全指南:w32tm配置與排錯(cuò)實(shí)戰(zhàn))
簡(jiǎn)介面向Windows環(huán)境的一款NTP時(shí)間同步工具專(zhuān)為需要統(tǒng)一系統(tǒng)時(shí)間的運(yùn)維人員、開(kāi)發(fā)者和普通用戶(hù)設(shè)計(jì)可解決內(nèi)外網(wǎng)環(huán)境下的時(shí)鐘偏差問(wèn)題。工具采用可視化圖形界面支持指定局域網(wǎng)或公網(wǎng)NTP服務(wù)手動(dòng)發(fā)送時(shí)鐘同步事件自定義同步時(shí)間間隔與最大時(shí)間偏差閾值達(dá)到條件后自動(dòng)改寫(xiě)系統(tǒng)時(shí)間兼顧靈活性與易用性。壓縮包共31個(gè)文件以C頭文件和實(shí)現(xiàn)文件為主輔以圖標(biāo)資源、Visual Studio工程文件及資源腳本整體體積僅114KB適合輕量級(jí)部署與二次開(kāi)發(fā)。工程內(nèi)部分為NTP客戶(hù)端、數(shù)據(jù)收發(fā)、顯示界面、工具類(lèi)及同步邏輯等模塊結(jié)構(gòu)清晰便于閱讀與維護(hù)。已有9298人學(xué)習(xí)下載該源碼包可從中了解時(shí)間同步協(xié)議的封裝細(xì)節(jié)、界面交互設(shè)計(jì)以及同步事件觸發(fā)流程為自研時(shí)鐘管理工具提供參考。1. Windows系統(tǒng)時(shí)間同步(NTP)開(kāi)機(jī)就對(duì)時(shí)的最簡(jiǎn)單解法Windows系統(tǒng)時(shí)間同步(NTP)這件事大多數(shù)人是到了被坑之后才想起來(lái)研究的。明明系統(tǒng)設(shè)置里寫(xiě)著“自動(dòng)同步時(shí)間”服務(wù)器卻還是慢了三分鐘——證書(shū)校驗(yàn)失敗、定時(shí)任務(wù)跑錯(cuò)時(shí)間點(diǎn)、日志排查對(duì)不上賬。這背后真正的原因很多人不知道Windows自帶的W32Time時(shí)間服務(wù)默認(rèn)同步周期是一周一次新裝的機(jī)器可能開(kāi)機(jī)好幾天都不校時(shí)。這份資源圍繞Windows時(shí)鐘同步NTP把完整鏈路串起來(lái)了W32Time服務(wù)機(jī)制、時(shí)鐘源選型、w32tm命令實(shí)操、注冊(cè)表批量配置、常見(jiàn)踩坑排查再到定時(shí)巡檢腳本落地。適合要維護(hù)Windows服務(wù)器和工作站的運(yùn)維、開(kāi)發(fā)以及自己攢了一堆機(jī)器的技術(shù)愛(ài)好者全程不需要額外安裝第三方打時(shí)鐘軟件。2. NTP同步機(jī)制與時(shí)鐘源選型先把“對(duì)誰(shuí)同步”搞清楚2.1 W32Time服務(wù)的工作機(jī)制UDP 123與默認(rèn)一周的同步周期W32Time是Windows自帶的NTP客戶(hù)端服務(wù)從Windows 2000開(kāi)始就一直存在服務(wù)顯示名是“Windows Time”。它監(jiān)聽(tīng)UDP 123端口向配置的NTP服務(wù)器發(fā)送時(shí)間請(qǐng)求用NTP協(xié)議里的四步時(shí)間戳算法算出本地時(shí)鐘偏移然后通過(guò)調(diào)整系統(tǒng)時(shí)鐘頻率把偏差收斂掉。很多人在這一步就踩了第一個(gè)坑以為服務(wù)啟動(dòng)了就會(huì)立刻同步實(shí)際不是。關(guān)鍵在啟動(dòng)類(lèi)型。W32Time服務(wù)默認(rèn)是“手動(dòng)觸發(fā)啟動(dòng)”不是開(kāi)機(jī)自啟它會(huì)在機(jī)器加入域、網(wǎng)卡狀態(tài)變化、或者特定系統(tǒng)事件觸發(fā)時(shí)才拉起。所以你在一臺(tái)新裝Windows上執(zhí)行net start w32time能夠正常啟動(dòng)重啟后又變回停止?fàn)顟B(tài)。另一個(gè)反直覺(jué)點(diǎn)是默認(rèn)同步策略Windows默認(rèn)用SpecialSkew策略對(duì)大多數(shù)工作站來(lái)說(shuō)時(shí)間同步周期不是幾小時(shí)而是整整一周。一周不校時(shí)按普通主板RTC的漂移程度偏差積累到幾十秒甚至幾分鐘都很常見(jiàn)。理解了這兩個(gè)機(jī)制就能明白Windows的時(shí)鐘同步不是一個(gè)“開(kāi)關(guān)打開(kāi)就完事”的功能它由服務(wù)狀態(tài)、觸發(fā)條件、輪詢(xún)策略三個(gè)環(huán)節(jié)共同決定。資源里后續(xù)所有腳本和配置本質(zhì)上都是在干預(yù)這三個(gè)環(huán)節(jié)——把服務(wù)設(shè)為自啟、把同步源換成國(guó)內(nèi)可達(dá)性更好的服務(wù)器、把輪詢(xún)周期壓縮到分鐘級(jí)從而保證機(jī)器時(shí)鐘長(zhǎng)期穩(wěn)定。2.2 時(shí)鐘源怎么選公網(wǎng)NTP服務(wù)器與Stratum層級(jí)NTP協(xié)議里衡量時(shí)間源精度的單位叫Stratum層級(jí)。Stratum 0是原子鐘、GPS、長(zhǎng)波授時(shí)這類(lèi)硬件源不直接對(duì)外提供服務(wù)Stratum 1是直連Stratum 0的服務(wù)器精度最高但通常有訪(fǎng)問(wèn)限制Stratum 2從Stratum 1同步Stratum 3再?gòu)腟tratum 2同步以此類(lèi)推。普通服務(wù)器選Stratum 2或Stratum 3的公共時(shí)間源完全夠用因?yàn)樽罱K精度瓶頸在網(wǎng)絡(luò)鏈路延遲層級(jí)多一跳帶來(lái)的誤差遠(yuǎn)小于RTT抖動(dòng)帶來(lái)的誤差。國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下我一般建議優(yōu)先選國(guó)內(nèi)公共NTP源而不是Windows默認(rèn)的time.windows.com——后者在部分網(wǎng)絡(luò)環(huán)境下UDP 123出方向可達(dá)性不穩(wěn)定。以下是我常用的幾個(gè)時(shí)間源時(shí)間源服務(wù)器域名適用場(chǎng)景阿里云ntp.aliyun.com含ntp1~ntp7國(guó)內(nèi)服務(wù)器/工作站首選多IP自動(dòng)容錯(cuò)騰訊云ntp.tencent.com騰訊云內(nèi)網(wǎng)機(jī)器延遲最低國(guó)家授時(shí)中心ntp.ntsc.ac.cn對(duì)精度有要求且網(wǎng)絡(luò)鏈路穩(wěn)定時(shí)使用NISTtime.nist.gov海外機(jī)房或跨境專(zhuān)線(xiàn)場(chǎng)景選型時(shí)有兩條原則。第一不要只填一個(gè)源NTP服務(wù)器也有被擠爆或臨時(shí)故障的時(shí)候Windows注冊(cè)表里支持填多個(gè)源用空格分隔w32tm會(huì)自動(dòng)從候選中選擇最優(yōu)的第二優(yōu)先選擇RTT穩(wěn)定在10毫秒以?xún)?nèi)的源配置完可以用ping測(cè)一下延遲而不是盲目追求“最權(quán)威”。Stratum 1域名看著高端但很多有白名單限制被拒反而不如Stratum 2穩(wěn)定。2.3 同步周期與時(shí)間偏移的關(guān)系先認(rèn)識(shí)的幾個(gè)參數(shù)W32Time的輪詢(xún)間隔不是寫(xiě)死的秒數(shù)而是通過(guò)注冊(cè)表里的MinPollInterval和MaxPollInterval兩個(gè)值控制的。這兩個(gè)值的單位是“2的指數(shù)次方秒”比如MinPollInterval6表示最短間隔2^664秒MaxPollInterval10表示最長(zhǎng)間隔2^101024秒。默認(rèn)情況下Windows使用SpecialSkew策略最大間隔被放到很大實(shí)際表現(xiàn)就是一周?chē)@一次。很多人改配置時(shí)只關(guān)注NTP服務(wù)器地址忽略了這個(gè)輪詢(xún)參數(shù)結(jié)果就是地址改對(duì)了但一周才同步一次遇到主板RTC漂移大的機(jī)器時(shí)間照樣越走越偏。資源里提供的腳本把MaxPollInterval壓到了2^664秒也就是一分鐘左右就會(huì)和源核對(duì)一次這個(gè)頻率對(duì)絕大多數(shù)場(chǎng)景都足夠也不會(huì)對(duì)服務(wù)器和源造成壓力。真正的時(shí)間偏移收斂不靠“撥表”靠的是NTP客戶(hù)端長(zhǎng)期小步調(diào)整所以輪詢(xún)周期短比一次性手動(dòng)resync更能解決問(wèn)題。3. w32tm 命令實(shí)戰(zhàn)從查詢(xún)狀態(tài)到手動(dòng)校時(shí)的完整流程3.1 查詢(xún)當(dāng)前狀態(tài)w32tm /query /status 的輸出怎么讀上手的第一個(gè)動(dòng)作永遠(yuǎn)是先看當(dāng)前狀態(tài)而不是直接改配置。在管理員權(quán)限命令行執(zhí)行w32tm /query /status輸出里幾個(gè)關(guān)鍵字段的含義Source當(dāng)前正在使用的NTP服務(wù)器地址如果顯示“Local CMOS Clock”說(shuō)明沒(méi)配外部源Stratum本機(jī)當(dāng)前層級(jí)正常應(yīng)該是配置源的層級(jí)加1Last Successful Sync Time最近一次成功同步的時(shí)間如果顯示很久以前說(shuō)明輪詢(xún)周期有問(wèn)題Last Offset上次對(duì)時(shí)結(jié)束時(shí)計(jì)算出的時(shí)間偏差單位是秒要區(qū)分Source和配置的服務(wù)器列表的區(qū)別Source是當(dāng)前正在使用的那個(gè)源是w32tm從配置里多個(gè)候選中動(dòng)態(tài)選出來(lái)的配置列表里可能有多個(gè)但同一時(shí)刻只會(huì)用其中一個(gè)。執(zhí)行后如果發(fā)現(xiàn)Source不是你預(yù)期的服務(wù)器可以先強(qiáng)制重新發(fā)現(xiàn)一遍w32tm /query /source w32tm /query /peers第一條只顯示當(dāng)前源第二條顯示所有可用源。需要注意的是/query /peers在舊版系統(tǒng)如Windows 7上輸出內(nèi)容有限在較新的Win10/Server 2016以上才比較完整老系統(tǒng)上看到空列表不要慌不代表沒(méi)配置。3.2 手動(dòng)同步命令/resync 與 /resync /rediscover 的差別手動(dòng)向時(shí)間源發(fā)起同步用w32tm /resyncw32tm /resync這條命令很容易讓人誤判返回“命令成功完成”不代表時(shí)間已經(jīng)同步完成它只代表同步請(qǐng)求已經(jīng)觸發(fā)實(shí)際是否把時(shí)間拉齊要等一個(gè)輪詢(xún)周期后再查詢(xún)。如果系統(tǒng)時(shí)間偏差很小毫秒級(jí)W32Time通過(guò)調(diào)整時(shí)鐘頻率平滑校準(zhǔn)不會(huì)產(chǎn)生跳變感如果偏差超過(guò)默認(rèn)閾值通常十幾秒以上才會(huì)直接跳變。所以對(duì)一臺(tái)偏差很大的機(jī)器resync之后立刻看時(shí)間可能感覺(jué)“沒(méi)變化”這是正常的。另一種更暴力的情況w32tm /resync /rediscover/rediscover參數(shù)會(huì)重新掃描網(wǎng)絡(luò)接口并重新解析NTP服務(wù)器的DNS適用于機(jī)器換了IP段、DNS解析異常、或剛從內(nèi)網(wǎng)切到外網(wǎng)這種網(wǎng)絡(luò)環(huán)境變化的場(chǎng)景。常見(jiàn)做法是先執(zhí)行一次/rediscover再執(zhí)行/query /status確認(rèn)Source已經(jīng)切換然后再?zèng)Q定要不要繼續(xù)排查。3.3 服務(wù)起不來(lái)怎么辦重新注冊(cè)w32time的完整命令順序在精簡(jiǎn)版系統(tǒng)或者被“優(yōu)化工具”清理過(guò)的機(jī)器上W32Time服務(wù)可能處于未注冊(cè)狀態(tài)事件查看器里會(huì)出現(xiàn)時(shí)間服務(wù)相關(guān)錯(cuò)誤。此時(shí)手動(dòng)啟動(dòng)服務(wù)會(huì)失敗需要按順序重新注冊(cè)sc config w32time start demand w32tm /unregister w32tm /register net start w32time四條命令的順序不能顛倒。sc config先把啟動(dòng)類(lèi)型設(shè)為“手動(dòng)觸發(fā)啟動(dòng)”確保服務(wù)存在但不會(huì)影響系統(tǒng)啟動(dòng)速度w32tm /unregister會(huì)刪除服務(wù)及全部相關(guān)注冊(cè)表項(xiàng)這一步是必要的因?yàn)槿绻?cè)表里殘留舊配置/register不會(huì)重建默認(rèn)配置w32tm /register重新寫(xiě)入服務(wù)定義和默認(rèn)配置最后net start手動(dòng)拉起服務(wù)。如果機(jī)器之前被清理工具動(dòng)過(guò)只執(zhí)行前兩步往往不夠還要配合重新指定時(shí)間源w32tm /config /manualpeerlist:ntp.aliyun.com ntp.tencent.com /syncfromflags:manual /update w32tm /resync這里 /manualpeerlist 是配置的時(shí)間源列表多個(gè)源用空格分隔整體用引號(hào)包住/syncfromflags:manual 表示強(qiáng)制從指定源同步而不是從域控或CMOS/update 讓配置立即生效。注意如果這臺(tái)機(jī)器在域環(huán)境里不要執(zhí)行帶 /syncfromflags:manual 的命令否則會(huì)脫離域時(shí)間策略。域環(huán)境的正確玩法在第4章單獨(dú)講。4. 批量設(shè)置NTP服務(wù)器注冊(cè)表、批處理腳本與域環(huán)境差異4.1 注冊(cè)表關(guān)鍵項(xiàng)NtpServer、Type與輪詢(xún)周期參數(shù)W32Time的配置全部存在注冊(cè)表里手動(dòng)改注冊(cè)表是批量操作的基礎(chǔ)。兩個(gè)主要位置NtpServer和Type在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters輪詢(xún)和修正參數(shù)在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ConfigParameters下面兩個(gè)值最核心NtpServer字符串值多個(gè)源用空格分隔例如“ntp.aliyun.com ntp.tencent.com”TypeNTP表示強(qiáng)制從外部NTP源同步NT5DS表示從域控繼承時(shí)間Config下面常用的三個(gè)值MinPollInterval最小輪詢(xún)間隔的指數(shù)值設(shè)6表示64秒MaxPollInterval最大輪詢(xún)間隔的指數(shù)值設(shè)6表示最長(zhǎng)64秒設(shè)10表示1024秒MaxPosPhaseCorrection / MaxNegPhaseCorrection允許的最大正負(fù)時(shí)間修正量修改注冊(cè)表后不會(huì)立即生效需要重啟W32Time服務(wù)。很多人改完注冊(cè)表立刻執(zhí)行w32tm /resync發(fā)現(xiàn)用的還是舊源就是因?yàn)闆](méi)重啟服務(wù)。4.2 一鍵批處理腳本改時(shí)間源、重啟服務(wù)并立即同步給一臺(tái)臺(tái)機(jī)器手動(dòng)改注冊(cè)表太容易漏了這個(gè)批處理腳本可以直接在整批機(jī)器上用echo off set NTP_SOURCEntp.aliyun.com ntp.tencent.com rem 寫(xiě)入時(shí)間源和同步類(lèi)型f 參數(shù)強(qiáng)制覆蓋 reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters /v NtpServer /t REG_SZ /d %NTP_SOURCE% /f reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters /v Type /t REG_SZ /d NTP /f rem 輪詢(xún)周期控制在 64 秒到 1024 秒之間 reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v MinPollInterval /t REG_DWORD /d 6 /f reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v MaxPollInterval /t REG_DWORD /d 6 /f rem 重啟服務(wù)讓配置生效 net stop w32time net start w32time rem 觸發(fā)一次立即同步 w32tm /resync腳本的邏輯分三步先寫(xiě)Parameters里的NtpServer和Type把同步源固定再寫(xiě)Config里的輪詢(xún)間隔讓客戶(hù)端保持較密集的同步節(jié)奏最后重啟服務(wù)并立即觸發(fā)一次同步。需要注意reg add里的/d參數(shù)傳的是字符串%NTP_SOURCE%被展開(kāi)成“ntp.aliyun.com ntp.tencent.com”引號(hào)是必須的否則空格會(huì)被當(dāng)成參數(shù)分隔。這個(gè)腳本在域環(huán)境里要謹(jǐn)慎Type被寫(xiě)成NTP之后機(jī)器就強(qiáng)制從外部源同步而不是從域控同步了。如果這臺(tái)機(jī)器還要正常使用域賬號(hào)登錄Kerberos認(rèn)證對(duì)時(shí)間精度要求很高脫離域時(shí)間源可能導(dǎo)致認(rèn)證失敗。所以在域環(huán)境里要么不執(zhí)行這條腳本要么把Type那行的NTP改回NT5DS。4.3 域環(huán)境的差異NT5DS模式與PDC外部時(shí)間源域環(huán)境的時(shí)間同步邏輯跟工作組完全不同。域內(nèi)普通機(jī)器默認(rèn)從域控同步TypeNT5DS域控之間再?gòu)闹饔蚩豍DC模擬器同步而PDC自己需要配置外部NTP源。如果PDC沒(méi)配外部源整個(gè)域的時(shí)間就會(huì)慢慢漂移而且越往下的機(jī)器偏差越大——這就是域名“時(shí)間越來(lái)越不準(zhǔn)”的根本原因。正確做法是先確認(rèn)PDC在哪臺(tái)機(jī)器上netdom query fsmo找到PDC后在它上面執(zhí)行w32tm /config /manualpeerlist:ntp.aliyun.com ntp.tencent.com /syncfromflags:manual /reliable:YES /update net stop w32time net start w32time w32tm /resync /rediscover/reliable:YES 標(biāo)記這臺(tái)機(jī)器是可靠時(shí)間源域內(nèi)其他機(jī)器會(huì)優(yōu)先跟隨它不會(huì)再去跟一個(gè)不可靠的上游。這里不要用第4.2節(jié)的批處理腳本去改域內(nèi)每一臺(tái)機(jī)器正確做法是保持客戶(hù)機(jī)的NT5DS類(lèi)型不動(dòng)讓它們通過(guò)域控間接同步。如果客戶(hù)機(jī)之前被手動(dòng)改成NTP模式導(dǎo)致時(shí)間偏移只需把Type改回NT5DS并重啟服務(wù)即可。域環(huán)境里的另一個(gè)隱藏坑是虛擬化域控。如果PDC跑在VMware或Hyper-V虛擬機(jī)里宿主機(jī)的時(shí)間同步會(huì)把域控時(shí)間拉偏進(jìn)而影響全網(wǎng)。這種情況下先解決第5.4節(jié)提到的虛擬化同步問(wèn)題再配外部時(shí)間源才有效。5. Windows 時(shí)間同步避坑指南五個(gè)出現(xiàn)頻率最高的翻車(chē)場(chǎng)景5.1 /resync 顯示成功但時(shí)間紋絲不動(dòng)偏差太大時(shí)先手動(dòng)粗?,F(xiàn)象在一臺(tái)偏差已經(jīng)很大的機(jī)器上執(zhí)行w32tm /resync返回“命令成功完成”等了幾分鐘再查時(shí)間還是老樣子。原因有兩層一是時(shí)間偏差超過(guò)了系統(tǒng)允許的最大修正量二是w32tm在偏差過(guò)大時(shí)拒絕一次性跳變需要先人工把時(shí)間拉到一個(gè)合理的范圍內(nèi)再讓NTP精確校準(zhǔn)。解決先手動(dòng)粗校時(shí)間把系統(tǒng)時(shí)鐘改到和當(dāng)前時(shí)間差20秒以?xún)?nèi)再?gòu)?qiáng)制重新同步w32tm /config /manualpeerlist:ntp.aliyun.com /syncfromflags:manual /update w32tm /resync /rediscover w32tm /resync /force/force參數(shù)跳過(guò)策略檢查強(qiáng)制發(fā)起同步請(qǐng)求。注意/force不代表“時(shí)間直接跳過(guò)去”它只是讓客戶(hù)端不要因?yàn)樯弦粋€(gè)同步周期太近而拒絕請(qǐng)求。如果問(wèn)題頻繁出現(xiàn)還要檢查事件日志里有沒(méi)有“時(shí)間服務(wù)遇到嚴(yán)重錯(cuò)誤”的條目那條日志會(huì)告訴你真正的拒絕原因。5.2 w32tm /query 報(bào) 0x800705B4 超時(shí)UDP 123 被攔或源不可達(dá)現(xiàn)象執(zhí)行w32tm /query /status時(shí)提示0x800705B4超時(shí)或者執(zhí)行resync時(shí)提示“服務(wù)沒(méi)有及時(shí)響應(yīng)”。原因基本都是UDP 123端口不通防火墻出站規(guī)則攔截、云安全組沒(méi)放行、或者目標(biāo)NTP服務(wù)器DNS解析到了不可達(dá)的IP。解決先確認(rèn)端口連通性。NTP使用的是UDP 123不是TCP 123很多防火墻策略容易搞混Test-NetConnection ntp.aliyun.com -Port 123如果TcpTestSucceeded顯示False不代表UDP不通UDP的連通性測(cè)試不能用這個(gè)命令直接判斷更可靠的做法是抓包看是否有響應(yīng)。實(shí)際排查時(shí)可以換一個(gè)源試試比如把time.windows.com換成ntp.aliyun.com同時(shí)檢查本機(jī)防火墻出站規(guī)則里UDP 123是否放行。云服務(wù)器還要去控制臺(tái)檢查安全組出方向規(guī)則。5.3 事件 ID 36/38/47 連環(huán)出現(xiàn)服務(wù)注冊(cè)表被清理過(guò)的典型癥狀現(xiàn)象系統(tǒng)日志里頻繁出現(xiàn)時(shí)間服務(wù)相關(guān)的警告和錯(cuò)誤事件ID分別是36時(shí)間服務(wù)未運(yùn)行、38客戶(hù)端無(wú)法連接服務(wù)器、47NTP服務(wù)器地址解析失敗。這三組事件同時(shí)出現(xiàn)通常意味著W32Time服務(wù)本身已經(jīng)半殘——注冊(cè)表項(xiàng)被優(yōu)化工具清理過(guò)或者服務(wù)啟動(dòng)被策略禁用。解決按第3.3節(jié)的四步順序重新注冊(cè)服務(wù)然后再驗(yàn)證sc config w32time start demand w32tm /unregister w32tm /register net start w32time w32tm /config /manualpeerlist:ntp.aliyun.com ntp.tencent.com /syncfromflags:manual /update w32tm /resync /rediscover執(zhí)行完別忘了再查一次事件日志確認(rèn)36/38/47不再出現(xiàn)。如果依然報(bào)47那就是DNS解析問(wèn)題用nslookup ntp.aliyun.com確認(rèn)機(jī)器能正確解析出公網(wǎng)IP有些內(nèi)網(wǎng)DNS會(huì)把公網(wǎng)域名解析到內(nèi)網(wǎng)地址上。5.4 虛擬機(jī)里時(shí)間總是跳變虛擬化平臺(tái)同步與 NTP 打架現(xiàn)象虛擬機(jī)的系統(tǒng)時(shí)間即便配置了正確的NTP源還是規(guī)律性跳變有時(shí)候快幾分鐘有時(shí)候慢幾分鐘完全沒(méi)有收斂的趨勢(shì)。原因很可能是虛擬化平臺(tái)自帶的時(shí)間同步機(jī)制和客戶(hù)機(jī)內(nèi)部的NTP客戶(hù)端互掐——VMware Tools、Hyper-V集成服務(wù)、KVM的kvm-clock都會(huì)周期性地把宿主機(jī)時(shí)間推給客戶(hù)機(jī)宿主機(jī)時(shí)間本身有漂移時(shí)就把客戶(hù)機(jī)的時(shí)間帶偏了。解決先關(guān)掉虛擬化平臺(tái)側(cè)的時(shí)間同步保留客戶(hù)機(jī)內(nèi)部的NTP。VMware是在虛擬機(jī)選項(xiàng)里關(guān)掉“Time Synchronization”Hyper-V是在集成服務(wù)里取消勾選“時(shí)間同步”KVM則需要在客戶(hù)機(jī)內(nèi)核參數(shù)里處理。關(guān)掉后在客戶(hù)機(jī)里執(zhí)行一次w32tm /resync /rediscover重新建立和公網(wǎng)NTP源的對(duì)時(shí)鏈路然后連續(xù)觀察幾個(gè)小時(shí)看是否還跳。這個(gè)問(wèn)題在Windows物理機(jī)和虛擬機(jī)上表現(xiàn)很不一樣物理機(jī)不存在平臺(tái)同步干擾所以遇到虛擬機(jī)時(shí)間不準(zhǔn)時(shí)先懷疑平臺(tái)。5.5 域內(nèi)機(jī)器時(shí)間偏差越同步越大PDC 的外部時(shí)間源沒(méi)配好現(xiàn)象域內(nèi)工作站的任務(wù)欄時(shí)間顯示正常但登錄域賬號(hào)時(shí)報(bào)“無(wú)法驗(yàn)證Kerberos票據(jù)”域控之間的時(shí)間互相對(duì)不上。用w32tm /query /source查看每臺(tái)機(jī)器都顯示同步自某臺(tái)域控但整體時(shí)間卻和真實(shí)時(shí)間差了很遠(yuǎn)。原因幾乎都是PDC模擬器自己的外部時(shí)間源沒(méi)配好導(dǎo)致整個(gè)域的時(shí)間基準(zhǔn)就是錯(cuò)的。解決在PDC上重新配置外部時(shí)間源并驗(yàn)證w32tm /config /manualpeerlist:ntp.aliyun.com ntp.tencent.com /syncfromflags:manual /reliable:YES /update net stop w32time net start w32time w32tm /resync /rediscover然后在PDC上確認(rèn)Source已經(jīng)變成外部NTP源而不是Local CMOS Clock。PDC時(shí)間準(zhǔn)了之后域內(nèi)機(jī)器會(huì)在下一個(gè)同步周期自動(dòng)收斂。這里有個(gè)常見(jiàn)誤區(qū)只改客戶(hù)機(jī)不改PDC域內(nèi)機(jī)器無(wú)論怎么resync都只是從PDC拉一個(gè)錯(cuò)誤的時(shí)間基準(zhǔn)解決不了根因。6. 定時(shí)巡檢腳本把人工校時(shí)變成每天自動(dòng)校準(zhǔn)6.1 一個(gè)能直接落地的PowerShell巡檢腳本前面所有配置做完之后剩下的就是維護(hù)問(wèn)題。我給常用服務(wù)器配的巡檢腳本邏輯很簡(jiǎn)單啟動(dòng)時(shí)查一遍當(dāng)前時(shí)間源和偏差如果偏差超過(guò)1秒就觸發(fā)一次resync然后把結(jié)果寫(xiě)進(jìn)日志文件方便事后追查。$logFile C:\Windows\Temp\time_sync.log $timestamp Get-Date -Format yyyy-MM-dd HH:mm:ss $source w32tm /query /source $status w32tm /query /status $offsetLine $status | Select-String Last Offset $entry $timestamp | Source$source | $offsetLine Add-Content -Path $logFile -Value $entry if ($offsetLine -match Last Offset: -?\ds) { w32tm /resync Add-Content -Path $logFile -Value $timestamp | Resync triggered }這里有個(gè)細(xì)節(jié)要說(shuō)明w32tm /query /status在不同語(yǔ)言版本下輸出格式不完全一樣“Last Offset”在中文系統(tǒng)里是“上次偏移量”所以腳本里的匹配字符串按實(shí)際系統(tǒng)改單位也可能顯示為ms或s匹配正則要跟著調(diào)。我一般先用命令手動(dòng)執(zhí)行一遍把實(shí)際輸出格式復(fù)制進(jìn)腳本再啟用避免腳本因系統(tǒng)語(yǔ)言版本差異白跑。6.2 計(jì)劃任務(wù)注冊(cè)每天凌晨3點(diǎn)自動(dòng)執(zhí)行腳本寫(xiě)好后注冊(cè)成計(jì)劃任務(wù)schtasks /create /tn TimeSyncCheck /tr powershell -ExecutionPolicy Bypass -File C:\Scripts\TimeSyncCheck.ps1 /sc daily /st 03:00 /ru SYSTEM參數(shù)說(shuō)明/sc daily計(jì)劃每天執(zhí)行/st 03:00定在凌晨3點(diǎn)這個(gè)時(shí)間段業(yè)務(wù)負(fù)載最低NTP輪詢(xún)對(duì)網(wǎng)絡(luò)和CPU的影響可以忽略/ru SYSTEM以系統(tǒng)賬戶(hù)運(yùn)行避免權(quán)限問(wèn)題導(dǎo)致腳本無(wú)法寫(xiě)入日志。計(jì)劃任務(wù)每天跑一次每次執(zhí)行時(shí)如果偏差小就只記日志不動(dòng)作偏差大了才觸發(fā)resync。從那次被時(shí)間問(wèn)題逼到重啟所有虛擬機(jī)以后我養(yǎng)成一個(gè)習(xí)慣任何一臺(tái)Windows機(jī)器落地第一件事就是確認(rèn)時(shí)間源、輪詢(xún)周期和同步日志強(qiáng)制走一遍配置和巡檢流程再談下一步連續(xù)觀察三天日志沒(méi)問(wèn)題才算交付。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取