編者按: 筆者遇到某單位的云主機(jī)時(shí)間同步故障問題,致使其教學(xué)活動(dòng)不能按時(shí)開展。本文通過檢查集群服務(wù)器配置,詳細(xì)介紹了對(duì)該故障的排查過程。
“新冠”肺炎疫情發(fā)生后,為了更好地為師生提供在線教學(xué)服務(wù),A 教學(xué)單位租用了B 運(yùn)營商的云主機(jī),將在線教學(xué)平臺(tái)遷移到了B 運(yùn)營商的云平臺(tái)上。
遷移到云上以后,師生不能像以前那樣按時(shí)開展課堂簽到、課堂測驗(yàn)、課堂教學(xué)和課堂小競賽等教學(xué)活動(dòng)。教師按計(jì)劃發(fā)布這些教學(xué)活動(dòng)后,師生無法按時(shí)開展活動(dòng),這些活動(dòng)或比原計(jì)劃早幾分鐘、或比原計(jì)劃晚幾分鐘。
筆者受A 單位網(wǎng)管員之邀,檢查了該單位的云主機(jī)環(huán)境。該單位租用了20 多臺(tái)B 運(yùn)營商提供的云主機(jī),這些云主機(jī)分別承載在線教學(xué)平臺(tái)的Web 服務(wù)(應(yīng)用服務(wù)器)、數(shù)據(jù)庫服務(wù)、教學(xué)資源轉(zhuǎn)換服務(wù)以及教學(xué)資源上傳和下載服務(wù),每類服務(wù)通過集群實(shí)現(xiàn)負(fù)載均衡。
基于安全性的考慮,這些云主機(jī)并沒有連接到互聯(lián)網(wǎng)。它們自成一個(gè)私有網(wǎng)絡(luò),只有一臺(tái)云主機(jī)(集群服務(wù)器)對(duì)外提供服務(wù),其他云主機(jī)以端口映射的方式,通過集群服務(wù)器對(duì)外提供在線教學(xué)服務(wù),其拓?fù)浣Y(jié)構(gòu)如圖1所示。
當(dāng)前的故障是,A 單位在線教學(xué)活動(dòng)不是不能開展,而是不能按時(shí)開展,還存在步調(diào)不一致的現(xiàn)象,可以排除在線教學(xué)平臺(tái)本身的故障,估計(jì)是這些云主機(jī)的時(shí)間不對(duì),或早于北京時(shí)間幾分鐘,或晚于北京時(shí)間幾分鐘。
筆者逐一檢查這些云主機(jī),發(fā)現(xiàn)多數(shù)云主機(jī)的時(shí)間比北京時(shí)間慢5 min 左右,只有少部分云主機(jī)時(shí)間和現(xiàn)在北京時(shí)間相差不多,有的還快1 min 左右,跟前面的分析基本一致。
圖1 單位拓?fù)浣Y(jié)構(gòu)圖
按理說,都是一家運(yùn)營商提供的云主機(jī),這些云主機(jī)應(yīng)該在同一個(gè)云平臺(tái)下,不應(yīng)該出現(xiàn)時(shí)間不一致的現(xiàn)象。經(jīng)調(diào)查才知道,A 單位的網(wǎng)管員也發(fā)現(xiàn)了云主機(jī)時(shí)間不對(duì)的問題,因?yàn)檫@些云主機(jī)不能連接到互聯(lián)網(wǎng),只能手動(dòng)調(diào)整時(shí)間。手動(dòng)調(diào)整時(shí)間后沒多久,甚至不到一天,時(shí)間又恢復(fù)成原樣,比北京時(shí)間慢5 min 左右。
在VMware vSphere 虛擬化環(huán)境,ESXi 主機(jī)會(huì)按物理服務(wù)器時(shí)鐘自動(dòng)校準(zhǔn)時(shí)間,而虛擬機(jī)操作系統(tǒng)又會(huì)按ESXi 主機(jī)的時(shí)鐘自動(dòng)校準(zhǔn)時(shí)間。只要物理服務(wù)器時(shí)間不對(duì),它會(huì)影響ESXi 主機(jī)的時(shí)間,進(jìn)而影響運(yùn)行在ESXi 主機(jī)下所有虛擬機(jī)的時(shí)間。遇到這種時(shí)間不對(duì)的問題,可以將Exsi 主機(jī)時(shí)間同步外部NTP 服務(wù)器即可。只要ESXi 主機(jī)時(shí)間配置正確,其下的虛擬機(jī)都會(huì)和主機(jī)自動(dòng)保持一致。
當(dāng)前故障和vSphere 虛擬化環(huán)境類似,A 單位租用的云主機(jī)和ESXi 下的虛擬機(jī)比較類似,現(xiàn)在是B 運(yùn)營商所建云平臺(tái)的時(shí)鐘出了問題,其下的云主機(jī)按云平臺(tái)的時(shí)鐘自動(dòng)校準(zhǔn)時(shí)間。A 單位網(wǎng)絡(luò)管理員在云主機(jī)上修改的時(shí)間只是系統(tǒng)時(shí)間,改不了硬件時(shí)鐘。只要重啟云主機(jī)或過一段時(shí)間,云主機(jī)的系統(tǒng)會(huì)按云平臺(tái)時(shí)鐘校準(zhǔn)時(shí)間。
因此,筆者建議該單位網(wǎng)管員聯(lián)系云平臺(tái)工程師,讓云平臺(tái)工程師來修正云平臺(tái)時(shí)鐘?,F(xiàn)在有很多權(quán)威的NTP 服務(wù)器,因此,也可以在云平臺(tái)上同步外部NTP 服務(wù)器時(shí)間,解決云主機(jī)時(shí)間問題。
比較遺憾的是,該單位網(wǎng)管員與云平臺(tái)工程師幾番溝通后,對(duì)方表示現(xiàn)在沒有辦法修正云平臺(tái)時(shí)鐘,也不能在云平臺(tái)上同步外部NTP 服務(wù)器。
因A 單位租用的云主機(jī)只有一臺(tái)可以連接互聯(lián)網(wǎng),其他云主機(jī)不能連接到互聯(lián)網(wǎng)。于是筆者決定在連接互聯(lián)網(wǎng)的云主機(jī)上部署NTP 服務(wù),讓其他云主機(jī)的時(shí)間與這臺(tái)云主機(jī)同步。因這臺(tái)云主機(jī)的主要作用是集群服務(wù),為了便于描述,本文后面把這臺(tái)云主機(jī)稱為集群服務(wù)器。
集群服務(wù)器使用操作系統(tǒng)是CentOS 7.2,內(nèi)網(wǎng)地址是192.168.3.45,下面是完整的故障排除過程。
(1)安裝NTP 軟件包:yum install ntp。其中yum是CentOS 在線安裝更新工具,安裝部署NTP 軟件包的時(shí)候需要訪問互聯(lián)網(wǎng)。
(2)設(shè)置時(shí)區(qū)為亞洲/上海:timedatectl settimezone Asia/Shanghai。
(3)啟動(dòng)NTP 服務(wù):system ctl start ntpd。
(4)將NTP 服務(wù)配置為開機(jī)自動(dòng)啟動(dòng):systemctl enable ntpd。
默認(rèn)情況下,NTP 服務(wù)不需要配置,直接可以使用。也可以使用“vi/etc/ntp.conf”命令編輯配置文件"ntp.conf",按需配置NTP服務(wù)。原始的NTP 配置文件如圖2 所示。
下面對(duì)NTP 配置文件做一個(gè)簡單介紹,以便讀者可以根據(jù)需要配置NTP。
以driftfile 記錄時(shí)間差異:driftfile/var/lib/ntp/drift。
這條配置用來記錄時(shí)間差異,NTPD(NTP Daemon)將根據(jù)這條配置自動(dòng)計(jì)算本機(jī)的頻率與上層time server頻率之間的誤差,并根據(jù)記錄結(jié)果及時(shí)做出調(diào)整。
圖2 原始的ntp 配置文件
用restrict 控制相關(guān)權(quán)限:
restrict 192.168.1.0 mask 255.255.255.0 nomo dify notrap
這條配置實(shí)例的意思就是允許192.168.1.0/24 網(wǎng)段的主機(jī)進(jìn)行時(shí)間同步,其中nomodify 參數(shù)用來限制客戶端不能使用命令ntpc和ntpq 來修改服務(wù)器端的時(shí)間,“notrap”表示不接受遠(yuǎn)程登錄請求。
用server 設(shè)定NTP 主機(jī)來源:
以下是配置文件默認(rèn)的NTP 主機(jī)來源,也可以指定其它主機(jī)來源。其中iburst選項(xiàng)的作用是如果在一個(gè)標(biāo)準(zhǔn)的輪詢間隔內(nèi)沒有應(yīng)答,客戶端會(huì)發(fā)送一定數(shù)量的包給NTP 服務(wù)器。如果在短時(shí)間內(nèi)呼叫幾次NTP 服務(wù)器沒有出現(xiàn)可辨識(shí)的應(yīng)答,那么本地時(shí)間將不會(huì)變化。
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
(1)檢查是否安裝NTP服務(wù):rpm-qa | grep ntp。
如果已安裝NTP 服務(wù),此時(shí)會(huì)顯示如下NTP 信息:
ntp-4.2.6p5-29.e17.centos.x86_64
ntpdate-4.2.6p5-29.e17.centos.x86_64
(2)查看NTP 服務(wù)狀態(tài):systemctl status ntpd。
如果Active 狀態(tài)為“act ive(running)”,表示NTP 服務(wù)正常。
如果Active 狀態(tài)為“in active(dead)”表示未激活,此時(shí)可以手動(dòng)啟動(dòng)或重啟NTP 服務(wù):
systemctl start ntpd(啟動(dòng)NTP 服務(wù))
systemctl restart ntpd(重啟NTP 服務(wù))
如果已用命令“system ctl enable ntpd”設(shè) 置了開機(jī)啟動(dòng)NTP 服務(wù),但開機(jī)后未能自動(dòng)啟動(dòng)NTPD 服務(wù),說明系統(tǒng)上存在與NTPD 服務(wù)沖突的服務(wù)。對(duì)CentOS 7.2 而言,安裝系統(tǒng)后,存在chronyd 和chronyc 兩個(gè)進(jìn)程,此時(shí)可以使用命令,這是用來維持計(jì)算機(jī)系統(tǒng)時(shí)鐘準(zhǔn)確性的程序,它和NTP 服務(wù)有沖突,其中chronyd 進(jìn)程默認(rèn)是開機(jī)自動(dòng)運(yùn)行。因此,只要用命令“systemctl disable chronyd”禁止其開機(jī)啟動(dòng),這樣就可以解決NTP服務(wù)不能開機(jī)啟動(dòng)的問題。
(3)查看時(shí)間同步狀態(tài)。使用“ntpstat”命令可以查看時(shí)間同步狀態(tài)。
(4)查看當(dāng)前使用的NTP服務(wù)器。使用“ntpq-p”命令可以查看當(dāng)前使用的是哪臺(tái)NTP 服務(wù)器。
(5)查看NTPD 進(jìn)程。使用“pgrep ntpd”命令可以查看NTPD 進(jìn)程,依此判斷NTP 服務(wù)是否在運(yùn)行。
在默認(rèn)情況下,NTP 采用的是UDP 協(xié)議,端口號(hào)是123。如果在安裝NTP 服務(wù)的云主機(jī)上啟用了防火墻,需要設(shè)置防火墻規(guī)則,開放這個(gè)端口,讓其他云主機(jī)的時(shí)間與這臺(tái)NTP 服務(wù)器同步。
Centos 7.2 允許Fire wallD 和iptables 兩種防火墻共存,默認(rèn)是使用的是FirewallD。
(1)FirewallD 防火墻
如果云主機(jī)啟動(dòng)的是FirewallD 防火墻,可以用以下命令配置FirewallD 防火墻規(guī)則,允許其他設(shè)備訪問ntp:
firewall-cmd--zone=public--add-port=123/udp--permanent
配置防火墻規(guī)則后,重啟防火墻服務(wù),使配置生效:
systemctl restart fire walld
(2)iptables 防火墻
如果云主機(jī)啟動(dòng)的是iptables 防火墻,可以使用如下命令配置防火墻規(guī)則,允許其他云主機(jī)訪問NTP:
iptables-A INPUT-s 192.168.3.0/24-p udp--dport 123-j ACCEPT
iptables 和firewalld在規(guī)則修改方面差別很大。FirewallD 可以動(dòng)態(tài)修改單條規(guī)則,動(dòng)態(tài)管理規(guī)則集。iptables 則不一樣,添加規(guī)則后,需要保存并全部刷新,才可以使防火墻規(guī)則生效。在此可以使用“systemctl iptables save”命令保存防火墻規(guī)則,通過“systemctl iptables restart”命令重啟防火墻。
A 單位云主機(jī)多數(shù)使用的是Windows Server 2008操作系統(tǒng),下面以Windows系統(tǒng)為例,將系統(tǒng)時(shí)間配置為自動(dòng)和NTP 服務(wù)器同步。
(1)雙擊屏幕右下角任務(wù)欄顯示的時(shí)間,打開“日期和時(shí)間”窗口。
(2)單擊“Internet 時(shí)間→更改設(shè)置”設(shè)置Internet時(shí)間。
(3)出現(xiàn)“Internet 時(shí)間設(shè)置”對(duì)話框后,勾選“與Internet 時(shí)間服務(wù)器同步”,在“服務(wù)器”文本框中輸入新搭建NTP 服務(wù)器的IP 地址“192.168.3.45”,單擊“立即更新”按鈕,當(dāng)前云主機(jī)即可保持和NTP 服務(wù)器時(shí)間同步。
如果云主機(jī)是Linux 系統(tǒng),可以使用NTP 或chrony同步前面配置的NTP 服務(wù)器。chrony 是CentOS 默 認(rèn)的服務(wù),而NTP 服務(wù)需要單獨(dú)安裝部署。下面就以chrony為例,介紹Linux 系統(tǒng)下的時(shí)間同步設(shè)置。
(1)使用“vi/etc/chrony.conf”命令編輯chrony 配置文件chrony.conf。chrony.conf 配置文件和NTP 配置文件比較相似,此時(shí)可以用“server 192.168.3.45”,將前面配置的NTP 服務(wù)器配置NTP 主機(jī)源。
(2)配置chrony 后,使用“systemctl restart ehronyd.service”命令重啟ehronyd服務(wù),此時(shí)云主機(jī)的時(shí)間就會(huì)自動(dòng)和前面配置的NTP 服務(wù)器同步。
筆者在為A 單位的在線教學(xué)平臺(tái)配置好時(shí)間同步后,該平臺(tái)完全恢復(fù)了正常訪問,但沒過多久平臺(tái)又出現(xiàn)了同樣的故障。A 單位網(wǎng)管員再次找到筆者,詢問是不是NTP 服務(wù)器出現(xiàn)了故障,現(xiàn)在云主機(jī)的時(shí)間又不對(duì)了。
筆者找了一臺(tái)云主機(jī),再次同步了云主機(jī)的時(shí)間,能同步成功,說明新部署的NTP服務(wù)器能正常工作。同步后,發(fā)現(xiàn)Windows 標(biāo)記的下次同步時(shí)間和當(dāng)前同步時(shí)間正好差7 天。
筆者并不了解B 運(yùn)營商采用的是什么虛擬化技術(shù),可以參照VMwar 虛擬化技術(shù)分析當(dāng)前的故障。在VMware虛擬化技術(shù)中,虛擬機(jī)的操作系統(tǒng)會(huì)利用VMware Tools讀取ESXi 主機(jī)系統(tǒng)的硬件時(shí)鐘進(jìn)行同步和校準(zhǔn)。即便沒有VMware Tools,虛擬機(jī)操作系統(tǒng)每次啟動(dòng)時(shí)都會(huì)讀取硬件時(shí)鐘,然后進(jìn)行校準(zhǔn)。
同樣,對(duì)于A 單位的云主機(jī)而言,也有類似VMware Tools的進(jìn)程,前面雖然已經(jīng)和NTP 同步了時(shí)間,但同步的是系統(tǒng)時(shí)鐘,無法修改硬件時(shí)鐘,如果與NTP的同步周期超過云主機(jī)操作系統(tǒng)與硬件時(shí)鐘校準(zhǔn)的周期,或在同步周期內(nèi)重啟過云主機(jī),云主機(jī)的時(shí)間就會(huì)和硬件時(shí)鐘保持一致。
上次A 單位網(wǎng)管員與B云平臺(tái)運(yùn)營工程師已經(jīng)溝通過,沒有辦法讓B 云平臺(tái)運(yùn)營工程師修改底層的硬件時(shí)鐘,只能通過縮短云主機(jī)與NTP 服務(wù)器同步周期來解決云主機(jī)時(shí)間不對(duì)的問題。對(duì)于Windows 操作系統(tǒng)而言,可以通過修改注冊表中時(shí)間同步對(duì)應(yīng)的鍵值來達(dá)到縮短同步周期的目的。
具體步驟如下:
1.打開運(yùn)行窗口,輸入“regedit”命令,打開注冊表編輯器窗口。
2.打開注冊表編輯器,找到NTP 時(shí)間同步周期對(duì)應(yīng)鍵值,其位于[HKEY_LOCAL_MACHINESYSTEMCurrent ControlSetservicesW32 TimeTimeProvidersNtp Client],鍵值是“Special PollInterval”,該鍵值默認(rèn)數(shù)據(jù)是“604 800”,這個(gè)數(shù)據(jù)正好是一周的時(shí)間(單位是秒)。筆者將其修改“3 600”,也就是將云主機(jī)時(shí)間同步周期從一周縮短至1 h。
在修改同步周期后,隨即手工同步時(shí)間,此時(shí)系統(tǒng)顯示距離下次同步時(shí)間正好是一個(gè)小時(shí),說明修改當(dāng)即生效。
依此類推,筆者將其他云主機(jī)時(shí)間同步周期都縮短為1 h。至此,故障修復(fù)完成。經(jīng)過近一周的觀察,再也沒有出現(xiàn)過類似的故障。