charleschchen
作者charleschchen·2020-04-30 15:03
系统架构师·浪潮商用机器有限公司

闰秒问题介绍

字数 1949阅读 996评论 0赞 0

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 主服务器。
参考:

Leap Second Information for AIX
http://www-01.ibm.com/support/docview.wss?uid=isg3T1022057

对于 Linux ,方案类似,主要也是通过控制回调幅度来解决问题,参考:

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

leapsecmode slew

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

OPTIONS="-g -x"

说明:
此方案需要保证 ntp 版本已经包含如下补丁( 4.2.6p5-20 或更新的版本):

ntpd -x steps clock on leap second

http://bugs.ntp.org/show_bug.cgi?id=2745

参考:

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/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广