網站首頁
公司介紹
新聞中心
產品中心
項目案例
聯系我們
IPS專家秘籍第十一期:閏秒問題介紹

時間:2020年05月26日    作者:admin

導讀:想客戶所想,解決客戶問題是IPS服務部門一貫遵循的宗旨。在此非常時期,我們真心感謝您長期以來對Power服務器的信任,特意推出客戶關懷計劃,希望與您同心協力,共克時艱。 IPS專家秘籍是IPS的服務專家通過多年客戶IT運維的豐富實戰經驗,總結出的“系統調優及故障排除文檔”。希望通過IPS服務專家們的經驗分享,助力客戶/合作伙伴排除故障,優化性能,確保IT系統高效、平穩運行。
1

閏秒的起源

由于地球自轉速度不均勻(主要是逐漸變慢,當然這種變慢是極其緩慢的,大約每個世紀變慢不到2毫秒),如果按照精確的原子時(銫原子鐘)計時方式,將一天精確地設定為86400秒,數千年之后太陽當頭照的時間可能不是中午十二點而是是下午一點,數萬年之后時鐘上的中午十二點對應的將會是午夜。這對人文世界顯然有較大的負面影響。

目前各方折中之后的應對辦法是閏秒方案,即在適當的時間插入或者刪除1秒(絕大多數情況是插入1秒),來適應實際上并不完全規整的天文時間。由于地球轉速變慢不是均勻的,所以閏秒不像閏年一樣能精確預測,閏秒調整的具體時間是不確定的,通常只能提前6個月決定是否實施閏秒調整。

到本文檔寫作時間為止,UTC時間一共插入了27個閏秒。最近一次閏秒出現在北京時間2017年1月1日07:59:60。

參考:

https://en.wikipedia.org/wiki/Leap_second

2

閏秒對計算機系統的影響

閏秒雖然只是在當前時間上插入或者拿走1秒,并不像夏令時可能加減1小時,但由于操作系統的實現方式,閏秒可能造成更大的負面影響。

夏令時的時間調整時,實際的UNIX timestamp是不受影響的。不管夏令時是加快還是減慢一小時,timestamp還是按實際的速度單調增加;所以實際上只是顯示的時間根據夏令時進行了調整。
而閏秒將實實在在地造成UNIX timestamp回調。一些時間精度要求嚴格的應用(比如數據庫、HA軟件等等)往往是通過timestamp差值來評估時長的,因此往往無法接受timestamp直接回調1秒,可能出現運行異常。比如如果在計算上一次心跳到當前時間的間隔時,出現了時間回調,可能恰好造成計算出來的時間間隔為負數,如果應用沒有妥善處理(例如用unsigned類型存儲該值,負數就會被當做極大的正整數),可能直接判定為心跳超時,觸發異常處理。
3

應對方案

如果你的服務器沒有配置時間同步,不需要采取任何應對措施。

或者如果你的NTP服務器沒有使用支持閏秒的時鐘源(比如使用內部的不支持閏秒的時鐘源),閏秒的影響也僅僅是,當閏秒發生后,你的服務器集群時間比實際世界時間快了1秒而已。你可以在任何合適的時間校正這一秒的誤差,就如同你平時處理普通的時間精度誤差一樣。
如果你的服務器配置了時間同步:

AIX不支持閏秒,對閏秒的處理是按照ntp時間不同步的普通場景來處理的。因此通常只要控制ntp的時間調整幅度,就可以防止應用運行異常。對NTP客戶端而言,可以作如下配置,控制ntp時間調整幅度,防止直接回調1秒造成的異常:

1). 在/etc/ntp.conf增加如下行:

slewalways yes

2). 修改xntpd服務的屬性,增加-x選項:
# chssys -s xntpd -a "-x"
# stopsrc -s xntpd
# startsrc -s xntpd

一般不建議AIX作為NTP主服務器。

對于Linux,方案類似,主要也是通過控制回調幅度來解決問題,參考:

較新的系統(使用chronyd同步方式的系統),可以在/etc/chrony.conf文件中增加:

leapsecmode slew

較早的系統(使用ntpd同步方式的系統),可以修改/etc/sysconfig/ntpd,增加:

OPTIONS="-g -x"

說明:

此方案需要保證ntp版本已經包含如下補丁(4.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/