以前のうるう秒の時に書いた
「LinuxとntpのslewモードとLeapIndicatorビット」
https://srad.jp/~marusa/journal/593599/
の続編
今回のうるう秒は2017年1月1日 08:59:60秒(JST)
以前のうるう秒の時は社内サーバの同期元(上位)NTPサーバがntpdだったのでntpdをslewモードに切り替えて動作させるという対応を行った。
今回は上位NTPサーバがCentOS7のchronydに変わったため、他の方法はないのか調べた結果をまとめておきます。
なおこのサーバはntp.nict.jpと直接同期しており、このサーバに対して社内のntpクライアントが時刻同期を行う構成。
結論から言うと、CentOS7の最新のchrony(2.1.1)ならleap smearモードで動作できるのでそのような設定を行うということ。
Google Public NTPはLeap Smearを採用している
/etc/chrony.confの末尾に以下の設定を追加してchronydを再起動する。
※注意
CentOS7の初期版Chronyはバージョンが低い(1.3だっけ?)ためにleapsecmodeに対応しない。
yum update chronyにて最新版にしておくこと。
# vi /etc/chrony.conf
---
leapsecmode slew
maxslewrate 1000
smoothtime 400 0.001 leaponly
---
# systemctl restart chronyd
# journalctl |grep chronyd
12月 28 11:08:29 sv01 chronyd[12690]: chronyd exiting
12月 28 11:08:29 sv01 chronyd[12870]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
12月 28 11:08:29 sv01 chronyd[12870]: Frequency -14.001 +/- 0.007 ppm read from /var/lib/chrony/drift
12月 28 11:08:33 sv01 chronyd[12870]: Selected source 133.243.238.164
12月 28 11:08:33 sv01 chronyd[12870]: Time smoothing activated (leap seconds only)
---
この設定は、chrony本家のchrony.conf (5) manページのleapsecmodeの項に記載されている。
「CentOS7 うるう秒対策 chrony」なんかでググって出てくるQiitaの記事
「Chronyのうるう秒対策」 に書かれている設定はこれが元ネタだと思う。書かれている説明がどうにも微妙なので元ネタを探してしまいましたよ。
https://chrony.tuxfamily.org/doc/2.4/chrony.conf.html
に書かれている原文での説明は以下の通り。
A recommended configuration to enable a server leap smear is:
leapsecmode slew
maxslewrate 1000
smoothtime 400 0.001 leaponly
The first directive is necessary to disable the clock step which would reset the smoothing process. The second directive limits the slewing rate of the local clock to 1000 ppm, which improves the stability of the smoothing process when the local correction starts and ends. The third directive enables the server time smoothing process. It will start when the clock gets to 00:00:00 UTC and it will take 17 hours 34 minutes to finish. The frequency offset will be changing by 0.001 ppm per second and will reach a maximum of 31.623 ppm. The leaponly option makes the duration of the leap smear constant and allows the clients to safely synchronise with multiple identically configured leap smearing servers.
このLeap Smear設定では、17時間34分かけて1秒を吸収している。
GoogleのLeap Smearでは20時間1秒を20時間に刻んでいるそうである。
またAWSのマネジメントコンソールやバックエンドシステムでは、前日12:00:00から毎秒1/86400秒ずつ時計を遅らせ23:59:59に0.5秒遅れ。うるう秒挿入時には0.5秒進みとなり、そこから引き続き毎秒1/86400秒ずつ時計を遅らせて12:00:00に標準時と同期する(24時間かけて1秒時計を遅らせる)という動作になるそうだ。
■参考リンクたち
「うるう秒がやってくる」
http://qiita.com/pitan/items/1cb3f78dd936afc6aa32
「Linuxのうるう秒おさらい」
http://d.hatena.ne.jp/nekoruri/20150629/leapsecond2
「Chronyがうるう秒をどう処理するのか実験してみました」
http://qiita.com/kirksencho/items/f789af7ed6046278b9d3
「Chronyのうるう秒対策」
http://qiita.com/ynishimura0922/items/ab4fed24f680aa034f82
「leap-sec&chronyd」
http://qiita.com/h-imaoka/items/5ac853a34a03218bf552
「chrony.conf(5) Manual Page」
https://chrony.tuxfamily.org/doc/2.4/chrony.conf.html
「Google Public NTP - Leap Smear」
https://developers.google.com/time/smear
AWS調整時刻(AWS Adjusted Time)
http://aws.typepad.com/aws_japan/2015/05/look-before-you-leap-the-coming-leap-second-and-aws.html
「平成29年 (2017年) 1月1日に挿入されるうるう秒について」
https://www.miraclelinux.com/support/axs7/axs7-support/20161101