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の基本的な設定についての記事は以下です。
本記事の目的
- chronyにおいて複数のNTPサーバを指定する。
- 複数のNTPサーバ指定により参照設定を冗長構成とする際のポイントを把握する。
- NTPサーバを移行する際のシナリオを検討する。
基本
参照先NTPサーバの指定(serverとpoolの違い)
chronyでは参照先NTPサーバの指定方法として、server
とpool
の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の再起動を実施可能な手順を用意しておく。
- (2-1)
- (3)旧NTPサーバの停止
旧NTPサーバを使用するNTPクライアントがいなくなったことを確認後、旧NTPサーバを停止する。NTPサーバの通常のログからは判断が難しいため、旧NTPサーバに対する通信状況の確認としてファイアウォールの通信ログ(123/udp)や、旧NTPサーバ上のポート使用状況をss -u
(システムやネットワークの規模に応じ、一定期間、十分な頻度と回数でサンプリング)で確認するといった方法が考えられる。
詳細は、本記事の詳細や、各種マニュアルを参照願います。
詳細
時刻ソースの選択(source selection)
chronydは、chrony.confのserver
やpool
で定義された各時刻ソースを名前解決し、その中から同期対象の時刻ソースを選びます。
同期対象として、chrony内部のアルゴリズム従い最も最適な時刻ソースが選ばれます。
- distanceが最も小さい時刻ソースが選ばれます(it will prefer the one with the shortest synchronisation distance)(chronyc reselectdist)。
- 正確で安定した時刻ソースを同期対象として選択します(*、+)(3.7. An unreachable source is selected?)。
各時刻ソースの状態は、以下のように分類されます。※ () 内は chronyc sources
実行時の記号
-
選択された時刻ソース:selected sources (*、+)
- the best source (*)
同期対象として選ばれた最適な時刻ソースです。 - other sources selected for synchronisation, which are combined with the best source (+)
最適な時刻ソース以外に同期対象として選ばれた時刻ソースです。
最適な時刻ソースと共に時刻精度向上のための計算に組み込まれます(combining algorithm)。
- the best source (*)
-
選択可能な時刻ソース:selectable sources (-)
- 直近で通信可能(reachable)であり、かつ、falsetickerではないと判断された時刻ソースです。
- selectable sourcesの中から選ばれたものが、selected sourcesとなります。
- distanceの値が大きすぎる時刻ソースは、
chronyc sources
では”-“と表示されますが、chronyc selectdata
では”D”と表示されます。
-
選択不可能な時刻ソース:unselectable sources (?)
- 通信不可(unreachable)、測定値不足等により、selectable sourcesにならなかったものです。
時刻ソース選択には時間がかかる場合があります。chronydの起動後やreselect後、時刻ソース選択が完了し同期対象の時刻ソース(*)決定するまでにかかる時間は、数秒から数分程度のようです。
時刻ソース選択の状況は、chronyc sources
やchronyc selectdata
にて確認できます(後述)。
なお、最適な時刻ソースが変わった場合でも、頻繁に同期対象時刻ソースが切り替わらないよう、chronydはそれまで同期対象だった時刻ソースを引き続き利用するよう考慮されています。
選択アルゴリズムの調整方法として、chrony.confのreselectdist
ディレクティブ(デフォルト100ms)、reselectdist
ディレクティブ(デフォルト0.001s)、maxdistance(デフォルト3s)、maxjitter(デフォルト1s)等があります。
3台以上のNTPサーバを指定すべき
NTPクライアントは、最低3台以上のNTPサーバを指定すべきです。これは正しくない時刻ソースを適切に検出するためです。
例えば2台のNTPサーバを指定した環境において、正しくない時刻ソースが1つあった場合に、どちらが正しくない時刻ソースなのかを判定することは困難です。
開発元のFAQに記載があります。
- 2.1. What is the minimum recommended configuration for an NTP client?
- 2.7. How can I improve the accuracy of the system clock with NTP sources?
ちなみに、pool
ディレクティブで指定可能なmaxsources
オプションは、1つのpoolから使用可能な時刻ソースの最大数を定義するものですが、このオプションのデフォルトは4(定義可能な最大値は16)です。
4台程度の時刻ソースを指定しておくことが妥当なのでしょう。RedHat社のマニュアルでは、最低4つのNTPサーバの指定が推奨されています。
パブリックNTPサーバの情報を公開しているpool.ntp.orgにおいても、1つのpoolあたりに定義されているNTPサーバの数は4つのようです。
$ 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
オプションと一緒に使用することにより、信頼のおける時刻ソースを同期対象に組み込むようにできます。
require
とtrust
が付与された時刻ソースがある場合、他の時刻ソースはその時刻ソースと一致するものだけが使用されるようになります。
時刻ソースの選択状況の確認、管理
同期対象の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 refresh
、chronyc reselect
、chronyc 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
では、別の情報が表示されます。
同期対象となっていた時刻ソースでは、Offset
やStd 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サーバを指定する場合についてまとめてみました。
基本的な内容は、以下の記事にまとめてあります。
備忘用
-
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.
-
- 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自体の仕様や動作を詳しく理解されたい場合には、こちらのドキュメントを見た方が良いかと思います。