朝から昼寝

ITや家計、身近なことの整理

[お知らせ]
当サイトは、2024年1月1日に
新URL(happynap.net)に引っ越しました





このページの内容は、最新ではない場合がありますので、新URLをご確認ください。






当サイトには広告を含みます。"オススメ"として紹介している商品やサービスは、個人的にそう思えたものだけです。
共感、興味をもっていただけるものがあればご利用ください (広告掲載ポリシー)。

chronyによる時刻同期ノウハウ2(複数NTPサーバ指定、NTPサーバ移行)

概要

chronyは、RHEL7、CentOS7以降におけるデフォルトの時刻同期機能(NTP実装)です。従来はntpdがありました。

本記事は、chronyにおけるNTPサーバの複数指定や、移行についてまとめたものです。主に、RHEL7、CentOS7以降でOS標準のchronyを使用した環境を対象としていますが、基本的にはどのシステムでも共通です。
2023年10月更新: RHEL7系 (chrony-3.4 ベース) を対象に記載していましたが、RHEL9系 (chrony-4.3 ベース) との差分を確認し、気付いた点は補足しました。

chronyの基本的な設定についての記事は以下です。

happy-nap.hatenablog.com

Stable Diffusionで作成 (プロンプト:time synchronization effect, cyber space background, dark terminal prompt)
Stable Diffusionで作成 (プロンプト:time synchronization effect, cyber space background, dark terminal prompt)

本記事の目的
  • chronyにおいて複数のNTPサーバを指定する。
  • 複数のNTPサーバ指定により参照設定を冗長構成とする際のポイントを把握する。
  • NTPサーバを移行する際のシナリオを検討する。

基本

参照先NTPサーバの指定(serverとpoolの違い)

chronyでは参照先NTPサーバの指定方法として、serverpoolの2種類の設定(ディレクティブ)があります。

どちらもほぼ同じ動作が可能であり、大きな違いはありません。
基本的にはserverで十分です。ntpdと同様の指定方法なので、経験的に慣れてらっしゃる方も多いでしょう。
ポイントとしては、同期先として指定するNTPサーバのDNS登録名(ホスト名、FQDN)を1つにまとめて運用したい場合は、poolを使用すべきです。
これは、NTPサーバのリプレース時の移行シナリオとも関連します(後述)。

  • serverディレクティブ

    • server ntp-server1.domain.comのように、NTPサーバを指定します。
    • 複数のNTPサーバを指定する場合、各NTPサーバについてserver行を分けて記載します。
    • 指定したNTPサーバを名前解決した際に、複数のIPアドレスが得られた場合、そのうちの1つだけを時刻ソースとして扱います。

  • poolディレクティブ

    • pool pool.ntp-servers.domain.comのように、プール(=NTPサーバ(群))を指定します。
    • 複数のプールを指定する場合、各プールについてpool行を分けて記載します。
    • 指定したNTPサーバを名前解決した際に、複数のIPアドレスが得られた場合、それら全てを時刻ソースとして扱います(ただしデフォルトでmaxsourcesオプションで指定された最大4つまで)。
      • 名前解決時に複数のIPアドレスが得られる環境での使用を想定したディレクティブです。
      • 例: pool.ntp.orgに登録されているプールである"jp.pool.ntp.org"を名前解決すると、以下の4つのIPアドレスが得られます。これらは全てNTPサーバのIPアドレスです。このような名前をpoolとして設定することになります。
        162.159.200.1
        133.243.238.163
        162.159.200.123
        133.243.238.243

  • serverディレクティブとpoolディレクティブ共通

    • 複数の時刻ソースがある場合、そのうちの1台と同期します(selected source)。
    • 同期していたNTPサーバが使用不可になった場合の動作は後述します。
    • 同期している時刻ソース以外の時刻ソースも同期処理に組み込まれ、同期精度の向上に使用される動作(combining algorithm)については後述します。

マニュアルに設定例が記載されています (リンク先はchrony4.3)。

名前解決時のIPv6アドレス(AAAAレコード)に関する注意

なお、指定したNTPサーバやプールの名前解決の結果、Aレコード(IPv4)以外にAAAAレコード(IPv6)が得られた場合、そのIPv6アドレスも時刻ソースとして扱われます。IPv6通信環境が整っていない場合には注意が必要です。

NTPサーバが使用不可となった場合の動作

NTPサーバのIPアドレス変更

NTPサーバのIPアドレス(DNSレコードに登録されたIPアドレス)は変更されることがあるという前提でchronydは動作します。

  • 時刻ソースは、直近8回のリクエストに対して有効な応答が得られなかった場合、その時刻ソースは名前解決し直したIPアドレスに置き換えられます(参考:chronyc refresh)。
  • 同期していたNTPサーバ(selected source)が使用不可になった場合も、名前解決し直したIPアドレスに置き換えられます。
    使用不可とは、直近8回のリクエストに対して有効な応答が得られなかった(unreachable)、正しくない時刻ソースとみなされた(falseticker)、distanceが大きくなりすぎた等です。この置き換えは、多くても30分に1回程度です。
    この動作は、serverディレクティブに関する説明ですが、poolでも同様と思われます。
  • 名前解決を強制的に再実行するには、chronyc refreshコマンドを実行します。
  • 同期対象としていたNTPサーバのDNSレコードが変更された場合も、変更前のNTPサーバが所定の基準を満たして利用可能なままであれば、chronydはそのNTPサーバを同期対象として使用し続けます。
    • serverディレクティブの場合、chronyc sourcesコマンドでは、変更前のIPアドレスだけがソースとして見えた状態になります。
    • poolディレクティブの場合、chronyc sourcesコマンドでは、変更前と変更後のIPアドレスの両方がソースとして見えた状態になります(定期的に名前の再解決をしているようです)。

NTPサーバの障害等を含む停止時

NTPサーバの障害等を含む停止時の動作は以下の通りです。

  • 前述の通り、NTPサーバのIPアドレス変更を例に挙げましたが、NTPサーバ側の障害等によりそのNTPサーバと通信不可になった場合も同様の動作です。
  • 名前解決の結果に変更が無かったとしても、他に利用可能な時刻ソースがあればそれを使用するよう再選択されます。
  • なお、同期対象のソース(best source)が利用不可になった場合には、次に最善の時刻ソースが選択されます。
    ただし、所定のアルゴリズムに従い、切り替えまで時間がかかる場合があります(3.7. An unreachable source is selected?))。

NTPサーバの移行シナリオ

"名前引継ぎ" 的なNTPサーバ移行を前提に記載します。NTPサーバのDNS上の名前自体は変更せず、そのDNSレコードに登録されたIPアドレスを新しいNTPサーバのものに変更する移行のことです。
新しい名前を用意する場合については省略しますが、NTPクライアント側で設定変更が必須になります。

前述の通り、NTPサーバのIPアドレス(DNSレコードに登録されたIPアドレス)は変更されることがあるという前提でchronydは動作します。 よって、NTPクライアントとして動作するchronyで、NTPサーバの移行に際して特別な対応は不要です。

さらに万全を期す場合

"特別な対応は不要" と言いつつも、その上で、さらに万全を期すよう配慮したいシステムもあるでしょう。そのような場合には、以下のシナリオが考えられます。

  • (1) 新旧NTPサーバの平行稼働
    旧NTPサーバを稼働させたまま(平行稼働)、DNSレコードのIPアドレスを新NTPサーバのものに変更する。
  • (2) NTPクライアント側での手動切り替え手順
    • (2-1) poolディレクティブでNTPサーバを指定するNTPクライアントの手順
      新NTPサーバの稼働後、既存NTPクライアント側でchronyc -n sourcesコマンドを実行して新NTPサーバのIPアドレスが時刻ソースとして表示されていることを確認の上、安全なタイミングでchronyc delete (旧NTPサーバのIPアドレス)を実行し、参照先NTPサーバを切り替える(一律chronydの再起動でも可)。
    • (2-2) serverディレクティブでNTPサーバを指定するNTPクライアントの手順
      新NTPサーバの稼働後、安全なタイミングで既存NTPクライアント側でchronyc refreshコマンドを実行し参照先NTPサーバを切り替える(一律chronydの再起動でも可)。
    • (2-3) 想定外の状況に備えた手順
      NTPクライアントではchronyc reselectコマンドの実行やchronydの再起動を実施可能な手順を用意しておく。
  • (3)旧NTPサーバの停止
    旧NTPサーバを使用するNTPクライアントがいなくなったことを確認後、旧NTPサーバを停止する。NTPサーバの通常のログからは判断が難しいため、旧NTPサーバに対する通信状況の確認としてファイアウォールの通信ログ(123/udp)や、旧NTPサーバ上のポート使用状況を ss -u (システムやネットワークの規模に応じ、一定期間、十分な頻度と回数でサンプリング)で確認するといった方法が考えられる。

詳細は、本記事の詳細や、各種マニュアルを参照願います。

詳細

時刻ソースの選択(source selection)

chronydは、chrony.confのserverpoolで定義された各時刻ソースを名前解決し、その中から同期対象の時刻ソースを選びます。

同期対象として、chrony内部のアルゴリズム従い最も最適な時刻ソースが選ばれます。

各時刻ソースの状態は、以下のように分類されます。※ () 内は chronyc sources 実行時の記号

  • 選択された時刻ソース:selected sources (*、+)

    • the best source (*)
      同期対象として選ばれた最適な時刻ソースです。
    • other sources selected for synchronisation, which are combined with the best source (+)
      最適な時刻ソース以外に同期対象として選ばれた時刻ソースです。
      最適な時刻ソースと共に時刻精度向上のための計算に組み込まれます(combining algorithm)。

  • 選択可能な時刻ソース:selectable sources (-)

    • 直近で通信可能(reachable)であり、かつ、falsetickerではないと判断された時刻ソースです。
    • selectable sourcesの中から選ばれたものが、selected sourcesとなります。
    • distanceの値が大きすぎる時刻ソースは、chronyc sourcesでは"-"と表示されますが、chronyc selectdataでは"D"と表示されます。

  • 選択不可能な時刻ソース:unselectable sources (?)

    • 通信不可(unreachable)、測定値不足等により、selectable sourcesにならなかったものです。

時刻ソース選択には時間がかかる場合があります。chronydの起動後やreselect後、時刻ソース選択が完了し同期対象の時刻ソース(*)決定するまでにかかる時間は、数秒から数分程度のようです。

時刻ソース選択の状況は、chronyc sourceschronyc selectdataにて確認できます(後述)。

なお、最適な時刻ソースが変わった場合でも、頻繁に同期対象時刻ソースが切り替わらないよう、chronydはそれまで同期対象だった時刻ソースを引き続き利用するよう考慮されています。
選択アルゴリズムの調整方法として、chrony.confのreselectdistディレクティブ(デフォルト100ms)、reselectdistディレクティブ(デフォルト0.001s)、maxdistance(デフォルト3s)、maxjitter(デフォルト1s)等があります。

3台以上のNTPサーバを指定すべき

NTPクライアントは、最低3台以上のNTPサーバを指定すべきです。これは正しくない時刻ソースを適切に検出するためです。
例えば2台のNTPサーバを指定した環境において、正しくない時刻ソースが1つあった場合に、どちらが正しくない時刻ソースなのかを判定することは困難です。

開発元のFAQに記載があります。

ちなみに、poolディレクティブで指定可能なmaxsourcesオプションは、1つのpoolから使用可能な時刻ソースの最大数を定義するものですが、このオプションのデフォルトは4(定義可能な最大値は16)です。

4台程度の時刻ソースを指定しておくことが妥当なのでしょう。RedHat社のマニュアルでは、最低4つのNTPサーバの指定が推奨されています。

パブリックNTPサーバの情報を公開しているpool.ntp.orgにおいても、1つのpoolあたりに定義されているNTPサーバの数は4つのようです。

例:jp.pool.ntp.org

$ dig  0.jp.pool.ntp.org
…
;; ANSWER SECTION:
0.jp.pool.ntp.org.      0       IN      A       45.76.211.39
0.jp.pool.ntp.org.      0       IN      A       40.74.139.173
0.jp.pool.ntp.org.      0       IN      A       129.250.35.251
0.jp.pool.ntp.org.      0       IN      A       133.100.9.2

優先するNTPサーバの指定(serverとpoolのオプション)

serverディレクティブとpoolディレクティブにはオプションがたくさんあります(詳細は$ man chrony.conf)。
poolディレクティブでは、serverディレクティブで使用可能な全てオプションに加え、maxsourcesオプションを使用可能です。

ここでは、NTPサーバを複数指定した際の優先設定についてのみ、記載します。

  • prefer
    他の時刻ソースより、このオプションが指定されたソースを優先的に使用します。

  • trust
    指定した時刻ソースが常に正しいものであるとみなします。
    trustオプションが付与された他の時刻ソースと一致しない場合にのみ、falseticker(正しくない時刻ソース)として扱われる場合があります。

  • require
    時刻同期に際し、このオプションが付与された時刻ソースが少なくとも1つは利用可能であることを必要とするオプションです。 利用可能(selectable)とは、直近で通信可能であり、かつfalsetickerとみなされていない(recently reachable and not a falseticker)である状態です。
    trustオプションと一緒に使用することにより、信頼のおける時刻ソースを同期対象に組み込むようにできます。
    requiretrustが付与された時刻ソースがある場合、他の時刻ソースはその時刻ソースと一致するものだけが使用されるようになります。

時刻ソースの選択状況の確認、管理

同期対象のNTPサーバを確認、管理したいときに使えるchronycコマンドのオプションがいくつかあります。
詳細は$ man chronycで確認できます。

また、同期状態を強制的に変更するケースとしては、NTPサーバ移行や、ネットワーク障害後の復旧が挙げられます。
ただ、chronydを再起動すれば済むケースも多いので、実務上はあまり意識しなくて良いでしょう。

時刻ソースの選択状況の表示(sources)

基本的なオプションです。

$ chronyc sources

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#* GPS0                          0   4   377    11   -479ns[ -621ns] +/-  134ns
^? foo.example.net               2   6   377    23   -923us[ -924us] +/-   43ms
^+ bar.example.net               1   6   377    21  -2629us[-2619us] +/-   86ms
The columns are as follows:

前述の通り、選択された時刻ソース(*、-)、最適可能な時刻ソース(-)、選択不可能な時刻ソース(\?)を確認できます。

NTPサーバをIPアドレスで表示(-n sources)

chronyc -n sourcesコマンドを実行すると、Name/IP address列の内容がIPアドレスで表示されます。DNS逆引きされません。
※"-n"は"sources"の前に記載する必要性があります。

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 1.2.3.4                   2   6   377    23   -923us[ -924us] +/-   43ms
^+ 5.6.7.8                   1   6   377    21  -2629us[-2619us] +/-   86ms
※IPアドレスは実際のホストとは関係ありません。

小文字の"-n"でなく、大文字の"-N"の場合は、chrony.confでで定義されたホスト名やIPアドレスが表示されます。

NTPサーバの名前解決を強制実行(refresh)

chronyc refreshコマンドを実行すると、chrony.confで指定したNTPサーバの名前解決を強制的に再実行します。
$ man chronycによると、chronydが動作するホストが一時停止(サスペンド)後、別ネットワークに接続して復旧した場合が想定されています。

本記事の作成時点で試していたところ、名前解決により、それまで同期対象だったIPアドレスとは別のIPアドレスを新たに取得した場合、以下のように新しい方が時刻ソースに加えられます。

  • serverディレクトリで指定した時刻ソースの場合
    別のIPアドレスを新たに取得すると、新しい方が時刻ソースに加えられ、古い方は時刻ソースから消えます。
  • poolディレクトリの場合
    それまで同期対象だった時刻ソースを引き続き利用可能であれば、同期対象の時刻ソースは変更されません。別のIPアドレスを新たに取得すると、新しい方が時刻ソースには加えられます。

なお、手動でchronyc refreshを実行しなくても、同期していたNTPサーバ(selected source)が使用不可になった場合、自動的にそのNTPサーバを名前解決し直したものに置き換えられます。
ただ、使用不可と判断されるのは8回のポーリングの後になるので、即時で置き換えたい場合には、このchronyc refreshコマンドを実行します。

※補足:chrony 4.4のマニュアルでは、アドレス数が16より多いプールや、1回のDNS応答に全てのIPアドレスが含まれていない場合、chronyc refreshコマンドはアドレスを置き換える可能性がある旨の説明が増えています。

同期対象のNTPサーバの再選択を強制実行(reselect)

chronyc reselectコマンドを実行すると、時刻ソースの選択アルゴリズムに従い同期対象とするNTPサーバ選択を強制的に再実行します。

chronydは、時刻ソースの切り替え多発を避けるため、既に同期しているNTPサーバが時間の経過とともに最適な時刻ソース(best source)ではなくなったとしても、そのNTPサーバと同期し続けます。
chronyc reselectコマンドは、最適な時刻ソースを強制的に選び直し、同期するNTPサーバを切り替えるために使用できます。

chronyc reselectにより、"*"や"+"だったソースがいったん"-"になり、その後"*"や"+"*が再決定されます(source selection完了)。

時刻ソースを強制削除、強制再選択(delete)

chronyc delete (時刻ソースのIPアドレス)コマンドを実行すると、それまで登録されていた時刻ソースを削除できます。

chronyc sourcesコマンドの一覧から削除されます。
それまで同期対象だった時刻ソースとの時刻同期を強制的に解除したい場合にも使用できます。

chronyc refreshchronyc reselectchronyc offlineを実行しても、それまで同期対象だった時刻ソースを引き続き利用可能であれば、同期対象の時刻ソースは変更されないようです。chronydのサービスを再起動すれば解決しますが、サービス再起動したくない場合にはdeleteが有用です。

その他(selectdata)

  • chronyc selectdata
    時刻ソースの詳細を表示できます。

時刻ソースをたくさん登録してみた

動作把握のため、パブリックNTPサーバのプールを複数登録してみました。
※これは推奨する設定ではありません。NTPサーバ側の負荷にもなり得るので動作確認後すぐに設定解除済みです。

chrony.confに以下を記載し、chronydを再起動します。

pool  pool.ntp.org iburst
pool  0.pool.ntp.org iburst
pool  1.pool.ntp.org iburst
pool  2.pool.ntp.org iburst
pool  3.pool.ntp.org iburst

プール1つあたり4つのIPアドレスが登録されているので、名前解決により得られるNTPサーバのIPアドレス数は、4 × 5 = 20です。

chronyc -n sourcesで確認

まず$ chronyc -n sourcesで確認してみます。

2,3分で時刻ソースの選択(source selection)が終わったようです(messagesにもログあり)。
表示された時刻ソースは19件です(何らかの理由で1つ表示されていないです)。
S列に"*"や"+"のフラグがつきました。

同期対象の時刻ソース(*,+)については、時刻同期しているためLast sampleの値が小さいです(us:microseconds、ms:milliseconds)。 []の中の値が、前回の計測時点でのシステムクロックと時刻ソースとの間のオフセット(差異)です。

$ chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 133.243.238.243               1   6   377    51    -41us[  -41us] +/- 4313us
^- 162.159.200.1                 3   6   377    56    +51ms[  +51ms] +/-  157ms
^- 162.159.200.123               3   6   377    50    +51ms[  +51ms] +/-  151ms
^* 133.243.238.163               1   6   377    53    +76us[  +73us] +/- 4241us
^- 202.181.103.212               2   6   377     0   +142us[ +142us] +/-   15ms
^- 3.114.30.212                  2   6   377    49   -375us[ -375us] +/-   26ms
^+ 45.32.55.38                   2   6   377    50    -39us[  -39us] +/- 4782us
^- 116.91.118.97                 2   6   377    41  -5230us[-5230us] +/-   15ms
^- 40.74.139.173                 2   6   377    50   +570us[ +570us] +/-   31ms
^- 138.3.216.120                 2   8    41    46   -106us[ -106us] +/- 6147us
^- 122.215.240.52                2   6   377    52    +33ms[  +33ms] +/-   88ms
^- 18.180.64.47                  2   6   377    51    +39us[  +39us] +/-   33ms
^- 129.250.35.251                2   6   377    54  -2481us[-2483us] +/-   67ms
^- 122.215.240.51                2   6   377    55    +34ms[  +34ms] +/-   83ms
^- 129.250.35.250                2   6   377    56  -2483us[-2486us] +/-   75ms
^- 45.76.211.39                  2   6   377    54    +34us[  +31us] +/-   37ms
^- 194.0.5.123                   2   6   377    52    +11us[  +11us] +/-   26ms
^+ 133.130.121.141               2   6   377    53    -51us[  -54us] +/- 5482us
^? 133.100.9.2                   0   8     0     -     +0ns[   +0ns] +/-    0ns
chronyc selectdata -aで確認

次に$ chronyc selectdata -aで確認してみます。Name/IP Address列には、そのIPアドレスを逆引きした際に得られるNTPサーバの名前が表示されます。
selectdataを指定すると、より詳細なステータスを確認できます。

同期対象として選ばれたものは、国内と思われるサーバ(jpドメイン配下)が多いです。chronydにより計算されるdistance値の小さい時刻ソースが同期対象として選ばれますので、このようにネットワーク的に近いNTPサーバが選ばれやすいです。

S列に"D"があるものが多いです。これらは、distance値が大きすぎる時刻ソースです。同期対象としては選ばれません。
(maxdistanceディレクティブのデフォルト値である3秒より大きいということです)

ID#00000000XXは、まだ時刻ソースのIPアドレスが割り当てられていないエントリで、使用されないものです。

Intervalは、前回の測定からのインターバル時間の上下限(時刻ソース選択時点のdistance値を考慮した上でのオフセットを含む値)のようです。

$ chronyc selectdata -a
S Name/IP Address        Auth COpts EOpts Last Score     Interval  Leap
=======================================================================
+ ntp-a2.nict.go.jp         N ----- -----   10   1.0 -4242us +4286us  N
D time.cloudflare.com       N ----- -----   14   1.0  -101ms  +202ms  N
D time.cloudflare.com       N ----- -----   10   1.0  -100ms  +208ms  N
* ntp-b2.nict.go.jp         N ----- -----   11   1.0 -4123us +4301us  N
D sv1.localdomain1.com      N ----- -----   23   1.0   -15ms   +15ms  N
D ec2-3-114-30-212.ap-nort> N ----- -----    9   1.0   -19ms   +19ms  N
+ ipv4.ntp3.rbauman.com     N ----- -----    9   1.0 -5167us +5143us  N
D s97.GchibaFL4.vectant.ne> N ----- -----    0   1.0   -19ms +9531us  N
D 40.74.139.173             N ----- -----    9   1.0   -25ms   +26ms  N
D 138.3.216.120             N ----- -----  498   1.0  -271ms  +274ms  N
D 122x215x240x52.ap122.ftt> N ----- -----   53   1.0   -41ms  +108ms  N
D ap-northeast-1.clearnet.> N ----- -----   51   1.0   -42ms   +42ms  N
D y.ns.gin.ntt.net          N ----- -----   54   1.0   -83ms   +78ms  N
D 122x215x240x51.ap122.ftt> N ----- -----    0   1.0   -36ms  +104ms  N
D x.ns.gin.ntt.net          N ----- -----    1   1.0   -69ms   +64ms  N
D tama.paina.net            N ----- -----    0   1.0   -24ms   +24ms  N
M ID#0000000033             N ----- -----    0   1.0    +0ns    +0ns  ?
D any.time.nl               N ----- -----   63   1.0   -24ms   +24ms  N
M ID#0000000035             N ----- -----    0   1.0    +0ns    +0ns  ?
M ID#0000000036             N ----- -----    0   1.0    +0ns    +0ns  ?
M ID#0000000037             N ----- -----    0   1.0    +0ns    +0ns  ?
M ID#0000000038             N ----- -----    0   1.0    +0ns    +0ns  ?
+ mail1.marinecat.net       N ----- -----    1   1.0 -5305us +5077us  N
M 133.100.9.2               N ----- -----    0   1.0    +0ns    +0ns  ?
chronyc -n selectdata -aで確認

次に$ chronyc -n selectdata -aで確認してみます。Name/IP Address列には、その時刻ソースのIPアドレスが逆引きされずにそのまま表示されます。

$ chronyc -n selectdata -a
S Name/IP Address        Auth COpts EOpts Last Score     Interval  Leap
=======================================================================
+ 133.243.238.243           N ----- -----    1   1.0 -4242us +4285us  N
D 162.159.200.1             N ----- -----    5   1.0  -101ms  +202ms  N
D 162.159.200.123           N ----- -----    0   1.0  -100ms  +208ms  N
* 133.243.238.163           N ----- -----    2   1.0 -4122us +4300us  N
D 202.181.103.212           N ----- -----   14   1.0   -15ms   +15ms  N
D 3.114.30.212              N ----- -----    0   1.0   -19ms   +19ms  N
+ 45.32.55.38               N ----- -----    0   1.0 -5165us +5141us  N
D 116.91.118.97             N ----- -----   55   1.0   -30ms   +33ms  N
(以下略)
chronyc -N selectdata -aで確認

次に$ chronyc -N selectdata -aで確認してみます。"-N"を指定すると、Name/IP Address列には、その時刻ソースに対応するchrony.conf上で指定したNTPサーバの名前が表示されます。
"3.pool.ntp.org"が多いですが、ID#00000000XXのエントリがそのように表示されているだけのようです。

$ chronyc -N selectdata -a
S Name/IP Address        Auth COpts EOpts Last Score     Interval  Leap
=======================================================================
+ pool.ntp.org              N ----- -----    1   1.0 -4242us +4285us  N
D pool.ntp.org              N ----- -----    5   1.0  -101ms  +202ms  N
D pool.ntp.org              N ----- -----    0   1.0  -100ms  +208ms  N
* pool.ntp.org              N ----- -----    2   1.0 -4122us +4300us  N
D 0.pool.ntp.org            N ----- -----   14   1.0   -15ms   +15ms  N
D 0.pool.ntp.org            N ----- -----    0   1.0   -19ms   +19ms  N
+ 0.pool.ntp.org            N ----- -----    0   1.0 -5165us +5141us  N
D 0.pool.ntp.org            N ----- -----   55   1.0   -30ms   +33ms  N
D 1.pool.ntp.org            N ----- -----    0   1.0   -24ms   +26ms  N
D 1.pool.ntp.org            N ----- -----  448   1.0  -244ms  +247ms  N
D 1.pool.ntp.org            N ----- -----    2   1.0   -41ms  +108ms  N
D 1.pool.ntp.org            N ----- -----    0   1.0   -42ms   +42ms  N
D 2.pool.ntp.org            N ----- -----    3   1.0   -83ms   +78ms  N
D 2.pool.ntp.org            N ----- -----    4   1.0   -36ms  +104ms  N
D 2.pool.ntp.org            N ----- -----    5   1.0   -69ms   +64ms  N
D 2.pool.ntp.org            N ----- -----    3   1.0   -24ms   +24ms  N
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
D 3.pool.ntp.org            N ----- -----    1   1.0   -24ms   +24ms  N
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
+ 3.pool.ntp.org            N ----- -----    1   1.0 -5286us +5080us  N
M 3.pool.ntp.org            N ----- -----    0   1.0    +0ns    +0ns  ?
chronyc -n sourcestats -aで確認

最後に$ chronyc -n sourcestats -aで確認してみます。sourcestatsでは、別の情報が表示されます。

同期対象となっていた時刻ソースでは、OffsetStd Devの値が他のものに比べて小さいです(us:microseconds、ms:milliseconds)。

$ chronyc -n sourcestats -a
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset Std Dev
==============================================================================
133.243.238.243            13   9   777     -0.049      0.078    -47us  15us
162.159.200.1              23  12   25m     +0.919      2.576    +53ms 1336us
162.159.200.123            23  12   25m     +0.094      3.309    +52ms 1883us
133.243.238.163            23  11   25m     -0.001      0.038    +85us  19us
202.181.103.212             9   5   518     -0.059      0.130    +87us  14us
3.114.30.212               19  11  1168     +0.031      0.626   -501us 256us
45.32.55.38                22  13   23m     +0.045      0.068  +2388ns  33us
116.91.118.97              15   7   969     +0.169      0.632  -1244us 155us
40.74.139.173              18   8  1168     -1.854      0.166   -755us  63us
138.3.216.120               8   5   24m     -0.270      0.560   -249us 118us
122.215.240.52             23  10   25m     +0.098      0.132    +34ms  82us
18.180.64.47               23  11   25m     +0.217      0.551   +140us 294us
129.250.35.251             23  11   24m     +0.018      0.078  -2429us  43us
122.215.240.51             23  10   24m     -0.000      0.226    +34ms 121us
129.250.35.250             23  10   24m     +0.016      0.069  -2428us  38us
45.76.211.39               23  13   24m     -0.031      0.055    -17us  31us
ID#0000000033               0   0     0     +0.000   2000.000     +0ns 4000ms
194.0.5.123                 7   5   451     -0.100      0.704    -49us  45us
ID#0000000035               0   0     0     +0.000   2000.000     +0ns 4000ms
ID#0000000036               0   0     0     +0.000   2000.000     +0ns 4000ms
118.27.19.72               12   8   524     -0.077      0.280    -57us  35us
ID#0000000038               0   0     0     +0.000   2000.000     +0ns 4000ms
133.130.121.141            23  11   25m     -0.010      0.064    -61us  37us
133.100.9.2                 0   0     0     +0.000   2000.000     +0ns 4000ms

まとめ

本記事では、chronyをNTPクライアントとして使用する際、複数のNTPサーバを指定する場合についてまとめてみました。

基本的な内容は、以下の記事にまとめてあります。
happy-nap.hatenablog.com

備忘用

  • 2.7. How can I improve the accuracy of the system clock with NTP sources?

    • The optimal polling interval depends mainly on two factors, stability of the network latency and stability of the system clock (which mainly depends on the temperature sensitivity of the crystal oscillator and the maximum rate of the temperature change).
    • For best stability, the CPU should be running at a constant frequency (i.e. disabled power saving and performance boosting). Energy-Efficient Ethernet (EEE) should be disabled in the network.
  • maxdistance

    • The distance estimates the maximum error of the source. It includes the root dispersion and half of the root delay (round-trip time) accumulated on the path to the primary source.
  • combinelimit

    • 同期対象ソースのdistanceにcombinelimitの値を乗じたものより小さい時刻ソースが、combine対象となる。
    • If the selected source was specified with the prefer option, it can be combined only with other sources specified with this option.
    • 0にすると1つのソースのみ使用される。combine アルゴリズムが無効となる。

参考

RHEL9のマニュアル

開発プロジェクト (アップストリーム)

chronyの開発プロジェクトは、chrony – Introductionです。

Red Hat (Fedora) 側で改修されている点もある気はしますが、chrony自体の仕様や動作を詳しく理解されたい場合には、こちらのドキュメントを見た方が良いかと思います。

関連記事

happy-nap.hatenablog.com

happy-nap.hatenablog.com

happy-nap.hatenablog.com

happy-nap.hatenablog.com