パスワードを忘れた? アカウント作成
13108541 journal
日記

marusaの日記: うるう秒対策 2017年1月1日版(chrony編) 3

日記 by marusa

以前のうるう秒の時に書いた
「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

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 「leapsecondとか規格に入ってなくて、うるう秒はstratum1の機器が24hかけて微調整すること」、とかのほうがよかったんじゃないか感

    # おつかれさまです。

    --
    M-FalconSky (暑いか寒い)
    • >「leapsecondとか規格に入ってなくて、うるう秒はstratum1の機器が24hかけて微調整すること」、とかのほうがよかったんじゃないか感

      激しく同意です。

      というか、Google Public NTPを上位STRATUMとして参照できてしまえばおしまいなのに
      と思いました。

      と思ったらPublicというくらいなので公開されているようですね。
      https://developers.google.com/time/ [google.com]

      Configure your network settings to use time.google.com as your NTP server.

      注意書きもあって、
      We recommend that you don’t configure Google Public NTP together with non-leap-smearing NTP servers.
      Google Public NTPと他のLeap SmearingしてないNTPを一緒にNTPサーバとして
      参照する設定はしないようにねって書いてあります。

      --
      GUST NOTCH な気分でいこう!
      親コメント
      • by Anonymous Coward

        「もう2月29日なんて作らずに4年間で分割して吸収しちまおうぜ」という意見が出ないかと期待しているのですが。

        # 4年に1回は実装しましたが、100年に1回の例外と400年に1回の例外の例外は実装していません、というのは多そう
        # めんどくさいので1か月は常に30日な、みたいな実装はみたことあります
        # 結論: 日付や時間の計算は必ず(最悪、できる限り)ライブラリを使おう。あなたの独自実装よりはマシなはず

typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...