應(yīng)用場(chǎng)景
在解決內(nèi)網(wǎng)環(huán)境集群主機(jī)的時(shí)間同步問(wèn)題時(shí)题诵,遇到了ntp的錯(cuò)誤no server suitable for synchronization found
,之前在生產(chǎn)環(huán)境也遇到過(guò)這個(gè)錯(cuò)誤,為徹底解決這個(gè)小問(wèn)題滓窍,查閱了鳥(niǎo)哥的NTP服務(wù)器一篇碍庵,對(duì)比了網(wǎng)上的一些解決方案,按作為服務(wù)端和用戶端的應(yīng)用場(chǎng)景分別進(jìn)行了梳理割按。
在實(shí)際生產(chǎn)環(huán)境中走哺,我們的集群主機(jī)通常都是部署在內(nèi)網(wǎng)環(huán)境中,這又分兩種情況哲虾,一種是在整個(gè)生產(chǎn)環(huán)境中丙躏,有一臺(tái)或少數(shù)主機(jī)可以和公網(wǎng)連通,一種是整個(gè)集群主機(jī)都在內(nèi)網(wǎng)束凑。有些分布式的應(yīng)用對(duì)主機(jī)的時(shí)間同步要求比較高晒旅,那么,我們?nèi)绾巫龅郊褐鳈C(jī)間的時(shí)間同步呢汪诉?
本文約定废恋,上級(jí)NTP服務(wù)器為xxx.ntp.server,集群中提供NTP服務(wù)的主機(jī)為192.168.169.100扒寄。進(jìn)行NTP同步的用戶端主機(jī)為(192.168.169.101鱼鼓、192.168.169.102)。
集群主機(jī)時(shí)間同步思路
首先明確兩個(gè)時(shí)間的概念:軟體時(shí)間(Linux系統(tǒng)時(shí)間)是Linux操作系統(tǒng)根據(jù)1970/01/01 00:00:00開(kāi)始計(jì)算的總秒數(shù)该编,可用date +%s
查看迄本,硬體時(shí)間(BIOS時(shí)間)是硬件系統(tǒng)上面的時(shí)間,例如BIOS記錄的時(shí)間课竣,可用hwclock -r
查看嘉赎。由于BIOS內(nèi)部芯片的問(wèn)題,導(dǎo)致BIOS與標(biāo)準(zhǔn)時(shí)間(UTC)有一點(diǎn)點(diǎn)的差異存在于樟,長(zhǎng)時(shí)間運(yùn)行后公条,累積的時(shí)間偏差會(huì)很大,所以時(shí)間同步的工作就很重要了迂曲。
那么怎么讓我們集群內(nèi)所有的主機(jī)時(shí)間同步呢靶橱?
- 選擇一部主機(jī)作為服務(wù)端,這部主機(jī)可與公網(wǎng)連通路捧,讓這個(gè)服務(wù)端主機(jī)的時(shí)間與它的上級(jí)時(shí)間同步服務(wù)器的時(shí)間同步关霸,這個(gè)上級(jí)也是向上一層一層傳遞的,我們選擇國(guó)內(nèi)主流的NTP Server進(jìn)行同步即可鬓长,假設(shè)公網(wǎng)的NTP Server為xxx.ntp.server谒拴。
- 一種可能的情況是,它的上級(jí)不存在涉波,即集群內(nèi)所有主機(jī)都在內(nèi)網(wǎng)英上,那么可以選擇其中一臺(tái)主機(jī)作為服務(wù)端部署NTP服務(wù)炭序,其他主機(jī)與這臺(tái)NTP服務(wù)器同步即可,實(shí)現(xiàn)集群主機(jī)的時(shí)間同步苍日。
- 開(kāi)放網(wǎng)絡(luò)服務(wù)讓客戶端連接惭聂,讓客戶端根據(jù)服務(wù)端時(shí)間調(diào)整自己的時(shí)間,使集群內(nèi)的客戶端的時(shí)間都與服務(wù)端一致相恃,這樣就達(dá)到集群的主機(jī)時(shí)間同步辜纲。
NTP服務(wù)的部署
所需軟件安裝yum install -y ntp ntpdate
。服務(wù)主要的配置文件在/etc/ntp.conf
拦耐。
應(yīng)用場(chǎng)景1耕腾,集群環(huán)境有公網(wǎng)主機(jī),可與上級(jí)NTP服務(wù)器xxx.ntp.server連通杀糯,
- 有上層NTP服務(wù)器扫俺,xxx.ntp.server。
- 不對(duì)公網(wǎng)提供服務(wù)固翰,僅允許內(nèi)部網(wǎng)192.168.169.0/24查詢狼纬。
- 檢測(cè)BIOS時(shí)間與Linux系統(tǒng)的時(shí)間差異并寫入
/var/lib/ntp/drift
。
服務(wù)端主機(jī)(192.168.169.100)設(shè)置如下骂际,
vi /etc/ntp.conf
# 放行上級(jí)NTP服務(wù)器
restrict xxx.ntp.server # 放行xxx.ntp.server進(jìn)入本NTP服務(wù)器
# 放行局域網(wǎng)來(lái)源
restrict 192.168.169.0 mask 255.255.255.0 nomodify # 用戶端不能使用ntpc和ntpq 這兩個(gè)命令來(lái)修改服務(wù)器的時(shí)間參數(shù)疗琉, 但用戶端仍可通過(guò)這部主機(jī)進(jìn)行網(wǎng)絡(luò)較時(shí)。
# 設(shè)定上級(jí)NTP服務(wù)器來(lái)源歉铝,將配置文件原來(lái)的[0|1|2|3].centos.pool.ntp.org注釋掉
server xxx.ntp.server prefer # 以這部主機(jī)優(yōu)先
driftfile /var/lib/ntp/drift # 預(yù)設(shè)時(shí)間差異分析盈简,不需修改
# NTP啟動(dòng)與開(kāi)機(jī)啟動(dòng)
service ntpd start
chkconfig ntpd on
NTP的啟動(dòng)與觀察,
# 觀察ntpd服務(wù)狀態(tài)
[hadoop@hadoopmaster ~]$ service ntpd status
ntpd is stopped
[hadoop@hadoopmaster ~]$ chkconfig --list | grep ntp
ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# 啟動(dòng)與設(shè)置開(kāi)機(jī)啟動(dòng)
service ntpd start/stop/restart # 啟動(dòng)/停止/重啟
chkconfig ntpd on/off # 開(kāi)機(jī)啟動(dòng)開(kāi)啟/關(guān)閉
# 觀察服務(wù)啟動(dòng)端口
netstat -tlunp | grep ntp
# 觀察指令
ntpstat
ntpq -p
注意犯戏,上述的ntpstat
和ntpq -p
的輸出結(jié)果中送火。ntp服務(wù)器要能夠連上上層ntp服務(wù)器,否則下層服務(wù)端無(wú)法對(duì)我們的ntp服務(wù)器進(jìn)行同步更新先匪。
用戶端主機(jī)(192.168.169.101、192.168.169.102弃衍、……)設(shè)置如下:
vi /etc/ntp.conf
restrict 192.168.169.100
server 192.168.169.100
service ntpd start
chkconfig ntpd on
重點(diǎn)呀非,應(yīng)用場(chǎng)景2,集群所有主機(jī)都在內(nèi)網(wǎng)镜盯,沒(méi)有主機(jī)可與公網(wǎng)連通岸裙,
首先可以想到,讓其中一臺(tái)主機(jī)作為服務(wù)端速缆,其他主機(jī)作為用戶端降允,在服務(wù)端主機(jī)按如上所述放行局域網(wǎng)來(lái)源,
# 放行局域網(wǎng)來(lái)源
restrict 192.168.169.0 mask 255.255.255.0 nomodify # 用戶端不能使用ntpc和ntpq 這兩個(gè)命令來(lái)修改服務(wù)器的時(shí)間參數(shù)艺糜, 但用戶端仍可通過(guò)這部主機(jī)進(jìn)行網(wǎng)絡(luò)較時(shí)剧董。
用戶端主機(jī)(192.168.169.101幢尚、192.168.169.102)同樣設(shè)置如下:
vi /etc/ntp.conf
restrict 192.168.169.100
server 192.168.169.100
service ntpd start
chkconfig ntpd on
這就會(huì)出現(xiàn)錯(cuò)誤no server suitable for synchronization found
,這是因?yàn)镹TP Server還沒(méi)有和它自身或者它的上級(jí)Server同步上翅楼。進(jìn)行如下配置尉剩,讓NTP Server和其自身保持同步,如果在/etc/ntp.conf
中定義的Server都不可用時(shí)毅臊,將使用local時(shí)間作為ntp服務(wù)提供給ntp客戶端理茎。
server 127.127.1.0
fudge 127.127.1.0 stratum 8
在NTP Server上重新啟動(dòng)ntp服務(wù)后,NTP Server自身或者與其上級(jí)Server的同步的需要一個(gè)時(shí)間段管嬉,這個(gè)過(guò)程可能是5分鐘皂林,在這個(gè)時(shí)間之內(nèi)在客戶端運(yùn)行ntpdate命令時(shí)會(huì)產(chǎn)生no server suitable for synchronization found
的錯(cuò)誤。
可用如下命令查看NTP Server何時(shí)完成和自身的同步蚯撩。在NTP Server上使用命令watch ntpq -p
础倍。ntpq -p
可以列出目前我們的NTP與相關(guān)的上層NTP的狀態(tài)。出現(xiàn)的LOCAL的這個(gè)就是與自身同步的NTP Server求厕。注意reach這個(gè)值著隆,在啟動(dòng)NTP Server服務(wù)后,這個(gè)值就從0開(kāi)始不斷增加呀癣,當(dāng)增加到17的時(shí)候美浦,從0到17是5次的變更,每一次是poll的值的秒數(shù)项栏,是64秒*5=320秒的時(shí)間浦辨。如果之后從ntp客戶端同步ntp server還失敗的話,用ntpdate –d來(lái)查詢?cè)敿?xì)錯(cuò)誤信息沼沈,再做判斷流酬。
用戶端時(shí)間更新
應(yīng)用場(chǎng)景1,用戶端手動(dòng)校時(shí)
# 軟體時(shí)間修改
date -s "YYYYMMDD hh:mm:ss"
# 修改BIOD記錄的時(shí)間
date;hwclock -r # 查閱軟體時(shí)間和硬體時(shí)間
hwclock -w;hwclock -r;date # 寫入硬體時(shí)間列另,這樣軟體時(shí)間與硬體時(shí)間就同步了
注意芽腾,用date -s
更新完Linux系統(tǒng)的時(shí)間后,需要用hwclock -w
更新BIOS時(shí)間页衙。因?yàn)槊看沃匦麻_(kāi)機(jī)時(shí)摊滔,系統(tǒng)會(huì)重新由BIOS時(shí)間讀出來(lái)。
應(yīng)用場(chǎng)景2店乐,用戶端網(wǎng)絡(luò)較時(shí)艰躺,
可用ntpdate
進(jìn)行網(wǎng)絡(luò)較時(shí),但要注意眨八,因?yàn)镹TP服務(wù)器本身會(huì)與它的上級(jí)服務(wù)器進(jìn)行時(shí)間同步腺兴,所以在NTP服務(wù)器不可以使用ntpdate
,即ntp
與ntpdate
不能同時(shí)啟用廉侧。
ntpdate -dv [NTP IP/hostname] # -d為debug模式页响,-v顯示詳細(xì)信息
用戶端進(jìn)行網(wǎng)絡(luò)較時(shí)方法一篓足,利用ntpdate,寫入crontab拘泞,每天5:10主機(jī)會(huì)自動(dòng)進(jìn)行網(wǎng)絡(luò)較時(shí)纷纫,這個(gè)方式適合不啟動(dòng)ntpd服務(wù)的情況。
vi /etc/crontab
10 5 * * * root (/usr/sbin/ntpdate xxx.ntp.server && /sbin/hwclock -w) &> /dev/null
用戶端進(jìn)行網(wǎng)絡(luò)較時(shí)方法二陪腌,如果ntpd的server/client時(shí)間誤差超過(guò)1000秒辱魁,得先進(jìn)行手工同步。然后利用NTP诗鸭,加入我們要的NTP服務(wù)器染簇,啟動(dòng)ntpd并設(shè)置開(kāi)機(jī)啟動(dòng),并取消crontab更新程序强岸。
vi /etc/ntp.conf
restrict 192.168.169.100
server 192.168.169.100
service ntpd start
chkconfig ntpd on
注意锻弓,提供ntp服務(wù)的主機(jī)要能夠連上上層ntp服務(wù)器,否則下層用戶端無(wú)法對(duì)我們的ntp服務(wù)器進(jìn)行同步更新蝌箍,即192.168.169.100需要與公網(wǎng)的上級(jí)NTP服務(wù)器連通青灼。
微信公眾號(hào)「數(shù)據(jù)分析」,分享數(shù)據(jù)科學(xué)家的自我修養(yǎng)妓盲,既然遇見(jiàn)杂拨,不如一起成長(zhǎng)。
讀者交流電報(bào)群
知識(shí)星球交流群