导读:想客户所想,解决客户问题是IPS服务部门一贯遵循的宗旨。在此非常时期,我们真心感谢您长期以来对Power服务器的信任,特意推出客户关怀计划,希望与您同心协力,共克时艰。
IPS专家秘籍是IPS的服务专家通过多年客户IT运维的丰富实战经验,总结出的“系统调优及故障排除文档”。希望通过IPS服务专家们的经验分享,助力客户/合作伙伴排除故障,优化性能,确保IT系统高效、平稳运行。
由于地球自转速度不均匀(主要是逐渐变慢,当然这种变慢是极其缓慢的,大约每个世纪变慢不到2毫秒),如果按照精确的原子时(铯原子钟)计时方式,将一天精确地设定为86400秒,数千年之后太阳当头照的时间可能不是中午十二点而是是下午一点,数万年之后时钟上的中午十二点对应的将会是午夜。这对人文世界显然有较大的负面影响。目前各方折中之后的应对办法是闰秒方案,即在适当的时间插入或者删除1秒(绝大多数情况是插入1秒),来适应实际上并不完全规整的天文时间。由于地球转速变慢不是均匀的,所以闰秒不像闰年一样能精确预测,闰秒调整的具体时间是不确定的,通常只能提前6个月决定是否实施闰秒调整。
到本文档写作时间为止,UTC时间一共插入了27个闰秒。最近一次闰秒出现在北京时间2017年1月1日07:59:60。参考:
https://en.wikipedia.org/wiki/Leap_second
闰秒虽然只是在当前时间上插入或者拿走1秒,并不像夏令时可能加减1小时,但由于操作系统的实现方式,闰秒可能造成更大的负面影响。
夏令时的时间调整时,实际的UNIX timestamp是不受影响的。不管夏令时是加快还是减慢一小时,timestamp还是按实际的速度单调增加;所以实际上只是显示的时间根据夏令时进行了调整。而闰秒将实实在在地造成UNIX timestamp回调。一些时间精度要求严格的应用(比如数据库、HA软件等等)往往是通过timestamp差值来评估时长的,因此往往无法接受timestamp直接回调1秒,可能出现运行异常。比如如果在计算上一次心跳到当前时间的间隔时,出现了时间回调,可能恰好造成计算出来的时间间隔为负数,如果应用没有妥善处理(例如用unsigned类型存储该值,负数就会被当做极大的正整数),可能直接判定为心跳超时,触发异常处理。如果你的服务器没有配置时间同步,不需要采取任何应对措施。
或者如果你的NTP服务器没有使用支持闰秒的时钟源(比如使用内部的不支持闰秒的时钟源),闰秒的影响也仅仅是,当闰秒发生后,你的服务器集群时间比实际世界时间快了1秒而已。你可以在任何合适的时间校正这一秒的误差,就如同你平时处理普通的时间精度误差一样。AIX不支持闰秒,对闰秒的处理是按照ntp时间不同步的普通场景来处理的。因此通常只要控制ntp的时间调整幅度,就可以防止应用运行异常。对NTP客户端而言,可以作如下配置,控制ntp时间调整幅度,防止直接回调1秒造成的异常:
1). 在/etc/ntp.conf增加如下行:
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/