導(dǎo)讀:想客戶所想,解決客戶問題是IPS服務(wù)部門一貫遵循的宗旨。在此非常時期,我們真心感謝您長期以來對Power服務(wù)器的信任,特意推出客戶關(guān)懷計劃,希望與您同心協(xié)力,共克時艱。
IPS專家秘籍是IPS的服務(wù)專家通過多年客戶IT運維的豐富實戰(zhàn)經(jīng)驗,總結(jié)出的“系統(tǒng)調(diào)優(yōu)及故障排除文檔”。希望通過IPS服務(wù)專家們的經(jīng)驗分享,助力客戶/合作伙伴排除故障,優(yōu)化性能,確保IT系統(tǒng)高效、平穩(wěn)運行。
由于地球自轉(zhuǎn)速度不均勻(主要是逐漸變慢,當(dāng)然這種變慢是極其緩慢的,大約每個世紀(jì)變慢不到2毫秒),如果按照精確的原子時(銫原子鐘)計時方式,將一天精確地設(shè)定為86400秒,數(shù)千年之后太陽當(dāng)頭照的時間可能不是中午十二點而是是下午一點,數(shù)萬年之后時鐘上的中午十二點對應(yīng)的將會是午夜。這對人文世界顯然有較大的負(fù)面影響。目前各方折中之后的應(yīng)對辦法是閏秒方案,即在適當(dāng)?shù)臅r間插入或者刪除1秒(絕大多數(shù)情況是插入1秒),來適應(yīng)實際上并不完全規(guī)整的天文時間。由于地球轉(zhuǎn)速變慢不是均勻的,所以閏秒不像閏年一樣能精確預(yù)測,閏秒調(diào)整的具體時間是不確定的,通常只能提前6個月決定是否實施閏秒調(diào)整。
到本文檔寫作時間為止,UTC時間一共插入了27個閏秒。最近一次閏秒出現(xiàn)在北京時間2017年1月1日07:59:60。參考:
https://en.wikipedia.org/wiki/Leap_second
閏秒雖然只是在當(dāng)前時間上插入或者拿走1秒,并不像夏令時可能加減1小時,但由于操作系統(tǒng)的實現(xiàn)方式,閏秒可能造成更大的負(fù)面影響。
夏令時的時間調(diào)整時,實際的UNIX timestamp是不受影響的。不管夏令時是加快還是減慢一小時,timestamp還是按實際的速度單調(diào)增加;所以實際上只是顯示的時間根據(jù)夏令時進(jìn)行了調(diào)整。而閏秒將實實在在地造成UNIX timestamp回調(diào)。一些時間精度要求嚴(yán)格的應(yīng)用(比如數(shù)據(jù)庫、HA軟件等等)往往是通過timestamp差值來評估時長的,因此往往無法接受timestamp直接回調(diào)1秒,可能出現(xiàn)運行異常。比如如果在計算上一次心跳到當(dāng)前時間的間隔時,出現(xiàn)了時間回調(diào),可能恰好造成計算出來的時間間隔為負(fù)數(shù),如果應(yīng)用沒有妥善處理(例如用unsigned類型存儲該值,負(fù)數(shù)就會被當(dāng)做極大的正整數(shù)),可能直接判定為心跳超時,觸發(fā)異常處理。如果你的服務(wù)器沒有配置時間同步,不需要采取任何應(yīng)對措施。
或者如果你的NTP服務(wù)器沒有使用支持閏秒的時鐘源(比如使用內(nèi)部的不支持閏秒的時鐘源),閏秒的影響也僅僅是,當(dāng)閏秒發(fā)生后,你的服務(wù)器集群時間比實際世界時間快了1秒而已。你可以在任何合適的時間校正這一秒的誤差,就如同你平時處理普通的時間精度誤差一樣。AIX不支持閏秒,對閏秒的處理是按照ntp時間不同步的普通場景來處理的。因此通常只要控制ntp的時間調(diào)整幅度,就可以防止應(yīng)用運行異常。對NTP客戶端而言,可以作如下配置,控制ntp時間調(diào)整幅度,防止直接回調(diào)1秒造成的異常:
1). 在/etc/ntp.conf增加如下行:
2). 修改xntpd服務(wù)的屬性,增加-x選項:
# chssys -s xntpd -a "-x"
# stopsrc -s xntpd
# startsrc -s xntpd
一般不建議AIX作為NTP主服務(wù)器。
對于Linux,方案類似,主要也是通過控制回調(diào)幅度來解決問題,參考:較新的系統(tǒng)(使用chronyd同步方式的系統(tǒng)),可以在/etc/chrony.conf文件中增加:
leapsecmode slew
較早的系統(tǒng)(使用ntpd同步方式的系統(tǒng)),可以修改/etc/sysconfig/ntpd,增加:
OPTIONS="-g -x"
說明:
此方案需要保證ntp版本已經(jīng)包含如下補(bǔ)?。?.2.6p5-20或更新的版本):
https://access.redhat.com/articles/15145
https://access.redhat.com/solutions/1379783
https://developers.redhat.com/blog/2015/06/01/five-different-ways-handle-leap-seconds-ntp/