執行 ntpd 但未同步的虛擬機
TL; 博士
VM使用KVM,時間不同步。暫停 2 分鐘後,它會保持 2 分鐘的永久間隔。使用不同的網路配置設置另一個 VM 表明網路配置阻止 ntp 工作。解決這個網路問題不在主題範圍內。
但是,沒有網路問題的新 VM 在恢復後也不會同步。相同的測試:暫停 2 分鐘。使用正確同步的機器檢查日期差異。2 分鐘的延遲是永久性的。
這似乎是一個常見問題,關於如何保持 VM 同步以及同時使用 NTP 和 kvm-clock 存在爭議。我找到了很多參考,但沒有答案。
問題
我有一個 Debian VM
ntpd
正在執行但沒有更正時間。例如,在暫停/恢復之後,我得到了 2 分鐘的永久偏移。
/etc/ntp.conf
是預設或接近預設,沒什麼特別的:# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help driftfile /var/lib/ntp/ntp.drift # Enable this if you want statistics to be logged. #statsdir /var/log/ntpstats/ statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable # You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: <http://www.pool.ntp.org/join.html> server 0.debian.pool.ntp.org iburst server 1.debian.pool.ntp.org iburst server 2.debian.pool.ntp.org iburst server 3.debian.pool.ntp.org iburst # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for # details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions> # might also be helpful. # # Note that "restrict" applies to both servers and clients, so a configuration # that might be intended to block requests from certain clients could also end # up blocking replies from your own upstream servers. # By default, exchange time with everybody, but don't allow configuration. restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery # Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict ::1 # Clients from this (example!) subnet have unlimited access, but only if # cryptographically authenticated. #restrict 192.168.123.0 mask 255.255.255.0 notrust # If you want to provide time to your local subnet, change the next line. # (Again, the address is an example only.) #broadcast 192.168.123.255 # If you want to listen to time broadcasts on your local subnet, de-comment the # next lines. Please do this only if you trust everybody on the network! #disable auth #broadcastclient
ntpq 似乎報告了一個問題:
# cat ntpq -pn remote refid st t when poll reach delay offset jitter ============================================================================== 37.187.7.160 .INIT. 16 u - 1024 0 0.000 0.000 0.000 195.154.211.37 .INIT. 16 u - 1024 0 0.000 0.000 0.000 195.154.216.44 .INIT. 16 u - 1024 0 0.000 0.000 0.000 95.81.173.155 .INIT. 16 u - 1024 0 0.000 0.000 0.000
但是,我不是 netcat 嚮導,但 UDP 埠 123 上的 AFAIU 傳出流量通過:
# nc -vvzu 37.187.7.160 123 mail.lafkor.de [37.187.7.160] 123 (ntp) open sent 0, rcvd 0
這個測試是否足以排除防火牆問題?
主機(也是 Debian 機器)具有相同的 NTP 配置並且同步工作正常。兩台機器的網路配置不同,這就是為什麼我認為這可能是網路問題。
我可以執行任何其他有用的測試嗎?
我認為該
tinker panic 0
參數在這裡不相關,因為它旨在強制更新巨大的差距,而不是 2 分鐘的差距。無論如何,AFAIU,它會在時間偏移的情況下影響行為,但它不能解決ntpq -pn
只返回零的問題。FWIW,受此問題啟發的其他測試輸出:
# ntpq ntpq> pe remote refid st t when poll reach delay offset jitter ============================================================================== mail.lafkor.de .INIT. 16 u - 1024 0 0.000 0.000 0.000 atoll.tropicdre .INIT. 16 u - 1024 0 0.000 0.000 0.000 oods.roflcopter .INIT. 16 u - 1024 0 0.000 0.000 0.000 ntp-3.arkena.ne .INIT. 16 u - 1024 0 0.000 0.000 0.000 ntpq> as ind assid status conf reach auth condition last_event cnt =========================================================== 1 21025 8011 yes no none reject mobilize 1 2 21026 8011 yes no none reject mobilize 1 3 21027 8011 yes no none reject mobilize 1 4 21028 8011 yes no none reject mobilize 1 ntpq> rv associd=0 status=c012 leap_alarm, sync_unspec, 1 event, freq_set, version="ntpd 4.2.6p5@1.2349-o Fri Apr 10 19:04:04 UTC 2015 (1)", processor="x86_64", system="Linux/3.16.0-4-amd64", leap=11, stratum=16, precision=-23, rootdelay=0.000, rootdisp=6683.055, refid=INIT, reftime=00000000.00000000 Mon, Jan 1 1900 0:09:21.000, clock=d9b51587.b7a1085f Tue, Sep 29 2015 15:49:59.717, peer=0, tc=3, mintc=3, offset=0.000, frequency=-0.125, sys_jitter=0.000, clk_jitter=0.000, clk_wander=0.000 ntpq> rv 21025 associd=21025 status=8011 conf, sel_reject, 1 event, mobilize, srcadr=mail.lafkor.de, srcport=123, dstadr=147.210.157.185, dstport=123, leap=11, stratum=16, precision=-23, rootdelay=0.000, rootdisp=0.000, refid=INIT, reftime=00000000.00000000 Mon, Jan 1 1900 0:09:21.000, rec=00000000.00000000 Mon, Jan 1 1900 0:09:21.000, reach=000, unreach=1137, hmode=3, pmode=0, hpoll=10, ppoll=10, headway=0, flash=1600 peer_stratum, peer_dist, peer_unreach, keyid=0, offset=0.000, delay=0.000, dispersion=15937.500, jitter=0.000, xleave=0.167, filtdelay= 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00, filtoffset= 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00, filtdisp= 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0
tcpdump / ntpdate 測試
在 NTP 同步正常工作的機器上,我啟動
tcpdump udp port ntp
,當我重新啟動時ntpd
,我看到這種輸出:# tcpdump udp port ntp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 17:31:33.719166 IP 10.0.2.15.ntp > spica.beduzar.fr.ntp: NTPv4, Client, length 48 17:31:33.736804 IP spica.beduzar.fr.ntp > 10.0.2.15.ntp: NTPv4, Server, length 48 17:31:35.973551 IP 10.0.2.15.ntp > ntp.tuxfamily.net.ntp: NTPv4, Client, length 48 17:31:35.992671 IP ntp.tuxfamily.net.ntp > 10.0.2.15.ntp: NTPv4, Server, length 48 [...]
在我遇到問題的機器上,重新啟動時我根本看不到任何輸出
ntpd
(沒有請求,沒有回复)。我不應該至少看到請求嗎?在好機器上:
# ntpdate 0.debian.pool.ntp.org 29 Sep 17:24:49 ntpdate[700]: adjust time server 193.55.167.1 offset -0.005196 sec
在壞機器上:
# ntpdate 0.debian.pool.ntp.org 29 Sep 17:43:18 ntpdate[3180]: no server suitable for synchronization found
用另一個虛擬機測試
我們設置了另一個具有相同 NTP 配置但具有另一個網路配置的 VM。
tcpdump
和的這個結果ntpdate
是正確的,並ntpq -pn
返回良好的結果。顯然,網路配置確實是故障虛擬機上的一個問題。但是,新 VM 也不同步。如果我暫停它以使其具有大約 100 秒的延遲,它不會同步(我的意思是幾分鐘後,間隙仍然是相同的秒數)。但是,當重新啟動 ntpd 時,它會立即同步。
我似乎有兩個問題:
- 第一個虛擬機上的網路配置
- ntp 不會在兩者上同步(除非重新啟動)
問題解決了。
網路問題
VM 有網路問題阻止 ntpd 成功。它有兩個
eth
介面,一個帶有網關的介面通過我們不直接管理的路由器。雖然我的測試沒有顯示出來,但我猜一些 UDP 幀被阻止了。我們使用另一個網路配置設置了另一個 VM,並ntpq
產生了更好的結果。最終,我們更改了
ntp
配置,以便主機在本地廣播時間,並且所有 VM 在其上同步。更有意義並最大限度地減少公共ntp
伺服器上的負載。
ntpd
幾分鐘後立即設置時鐘在測試期間可能誤導我的一件事是 ntpd 不會立即同步。我認為它會立即檢測到間隙,然後修改時鐘速度,以便時鐘逐漸加入源時鐘。事實上,我們注意到(除非
ntpd
重新啟動)時鐘在幾分鐘內沒有變化,然後突然之間它被設置為立即顯示的內容。同時,輸出中最右邊的列ntpq
顯示同步正在進行。這種
ntpd
行為可能解釋了為什麼我認為ntpd
即使它起作用也不起作用。我只是沒有等待足夠長的時間,我不明白ntpq
輸出。