chrony vs. systemd-timesyncd – NTPクライアントとしての違いとユースケースは何ですか?


18

どういうわけか、「ntpd vs. systemd-timesyncd-信頼性の高いNTP同期を実現する方法」という古い質問に基づいているわけではありません、NTP クライアントに関してchronyとsystemd-timesyncdの違いについてお聞きしたいと思います

systemd-timesyncdは多かれ少なかれ最小のntpクライアント実装であり、chronyはたまたまNTPクライアントを含む完全なNTPデーモンソリューションであることを知っています。

ubuntu Bionic Beaverリリースノートには次のように記載されています。

単純な時間同期のニーズのために、ベースシステムにはsystemd-timesyncdがすでに付属しています。Chronyは、タイムサーバーとして機能する場合、または広告をより正確かつ効率的に同期する場合にのみ必要です。

私は最小限のプリインストールされたツールを使用して仕事をするというアイデアが好きで、systemd-timesyncdが私のユースケースのために仕事をすることはかなり確信していますが、それでも私は興味があります:

  • 精度の点で2つの現実の違いは何ですか?
  • 効率の違いは何ですか?
  • 「単純ではない」時刻同期には、NTPクライアントとしてのchronyの別名であるユースケースが必要ですか?

回答:


13

systemd NEWSファイルでのsystemd-timesyncd発表は、Chronyやそのようなツールと比較してこのツールの違いを説明するのに役立ちます。(エンファシス鉱山):

ネットワーク全体でシステムクロックを同期するための新しい「systemd-timesyncd」デーモンが追加されました。SNTPクライアントを実装します。以下のようなNTPの実装とは対照的にchronyまたはNTP参照サーバこれはクライアント側だけを実装し、そして、完全なNTPの複雑さを気にしない1つのリモートサーバーからの時間を照会し、それにローカルクロックを同期のみに着目します。ネットワーク接続されたクライアントにNTPを提供する予定がない場合、またはローカルハードウェアクロックに接続する場合を除き、この単純なNTPクライアントはほとんどのインストールに適しています。[...]

このセットアップは、サーバー群のほとんどのホストの一般的なユースケースです。通常、ローカルNTPサーバーから同期されます。ローカルNTPサーバー自体は、ハードウェアを含む複数のソースから同期されます。systemd-timesyncdは、その一般的なユースケースに使いやすいソリューションを提供しようとします。


特定の質問に対処しようとしています:

精度の点で2つの現実の違いは何ですか?

複数のソースから同期データを取得することでより高い精度を得ることができると思いますが、これは特にsystemd-timesyncdのサポートされているユースケースではありません。しかし、信頼できる内部ネットワークに接続された中央のNTPサーバーから同期データを取得するためにそれを使用している場合、複数のソースを使用することはそれほど重要ではなく、単一のソースから十分な精度が得られます。

ローカルネットワークと同じデータセンターある信頼できるサーバーからサーバーを同期する場合、NTPとSNTPの精度の違いは事実上存在しません。NTPはRTTを考慮してタイムミアリングを行うことができますが、RTTが非常に小さい場合(高速ローカルネットワークと近くのマシンの場合)はそれほど有益ではありません。また、使用しているソースを信頼できる場合、複数のソースは必要ありません。

効率の違いは何ですか?

単一のソースから同期を取得する方が、複数のソースから同期を取得するよりもはるかに簡単です。どのソースが他のソースよりも優れているかを判断したり、複数のソースからの情報を組み合わせたりする必要がないためです。アルゴリズムははるかに単純であり、単純な場合にはCPUの負荷が少なくて済みます。

「単純ではない」時刻同期には、NTPクライアントとしてのchronyの別名であるユースケースが必要ですか?

それは上記の引用で対処されていますが、いずれにしても、これらはsystemd-timesyncdによってカバーされないChronyのユースケースです:

  • NTPサーバーの実行(他のホストがこのホストを同期のソースとして使用できるようにするため);
  • 複数のソースからNTP同期情報を取得します(ホストがインターネット上の公開サーバーからその情報を取得するために重要です)。そして
  • ローカルクロックから同期情報を取得します。これには通常、衛星から正確な時間情報を取得できるGPSデバイスなどの専用ハードウェアが含まれます。

これらのユースケースには、Chronyまたはntpdなどが必要です。


1
あなたの精巧な答えに感謝し、私の質問に具体的に答えてくれてありがとう。それについて詳しく説明するには、次の手順を実行します。– – 1.精度デルタの大きさは何桁ですか。これを知ることは、意思決定に何らかの実質を確実に追加します。私たちは10 ^ -9または10 ^ -1秒について話しているのですか?– – 2.効率性に関するあなたの答えは、私をさらに興味深くさせました。
ウェディ

3
@wedi:timesyncdの精度は、主にサーバーとネットワークに依存します。単一のサーバーでは、サーバーが偽のデータを返しているかどうかを判断する方法がないため、完全に信頼する必要があります。(これによる最大エラーは制限されていません)。達成できる最大精度は、ユーザーとサーバー間のネットワークジッタによって決まります(数ミリ秒以上になる可能性があります)。
-TooTea

1
ありがとう、@ TooTea!OK。そうですか。そのため、複数のソースを使用することで精度が向上します。また、1つのソースで特殊な魔法を使用している場合は無視できます。私の理解:– 1. GCEインスタンスで単一のタイムサーバーmetadata.google.internalを使用する=>測定可能な精度の違いはありません(timesearing et.alを除外しましょう)– – 2. vmで評判の良い3つのタイムサーバーを使用する落ち着いたホスティング会社で=>違いはあるが、「あまり」ではない(これが何であれ)– – 3. ISPを介して接続されたraspiでpool.ntp.orgを使用する=>ラリーと同じくらい満足している。
ウェディ

3つすべての@wediで正しいと思います。特に(1)、マシンと同じ「ローカルネットワーク」で、本質的に同じデータセンター(非常に低いrttおよび非常に低いジッター)でタイムサーバーを使用している場合、NTPに関する精度とタイムミアリングとSNTPの利点は、非常に低くなります。そのため、これらのユースケースでNTPを実行する(SNTPではない)理由はほとんどありません!
フィルブランデン

@wediは、ローカルネットワークで信頼できるサーバーを使用することを明示的に言及するように回答を更新しました。
フィルブランデン

14

他の答えが正しく述べているように、chronyNTPとsystemd-timesyncdSNTPを実装します。

タイムサービスクライアントの観点から:

SNTPは、実装がはるかに簡単なプロトコルです。
NTPは、段階的な増分/時間どおりの修正を可能にします。NTPの主な利点の1つは、回答のRTTも考慮して、より正確な時間を取得できることです。

https://www.meinbergglobal.com/english/faq/faq_37.htmから

フル機能のNTPサーバーまたはクライアントは非常に高いレベルの精度に達し、さまざまな数学的および統計的手法とスムーズなクロック速度調整を使用することで、可能な限り急激な時間ステップを回避しますが、SNTPは、精度と信頼性はそれほど厳しくありません。ドリフト値を無視し、システムクロック調整方法の単純化された方法(多くの場合、単純な時間ステップ)を使用することにより、SNTPは完全なNTP実装と比較した場合、低品質の時間同期のみを実現します。

SNTPは、はるかに単純なアプローチを採用しています。NTPアルゴリズムの複雑さの多くが削除されました。多くのSNTPクライアントは、時間を歪めるのではなく、時間をステップします。これは、単純なタイムスタンプが必要な多くのアプリケーションに適しています。また、SNTPには、複数のNTPサーバーを監視およびフィルタリングする機能がありません。多くの場合、単純なラウンドロビン方式が使用されます。1つのサーバーに障害が発生すると、リスト内の次のサーバーが使用されます。

https://www.masterclock.com/company/masterclock-inc-blog/ntp-vs-sntpから

NTPはSNTPよりもはるかに正確で正確であるため、ほとんどのエンタープライズアプリケーションで事実上の勝者になっています。一方、SNTPのシンプルさにより、IPカメラ、DVR、および一部のネットワークスイッチなどに適しています。これらのタイプのハードウェアには、より複雑なプロトコルを処理するための処理リソースがありませんが、接続されたデバイスがますます強力になるにつれて、それは変化する可能性があります。

SNTPの主な弱点の1つは、Network Time Protocolがデフォルトで行うように、複数のソースから時間を取得することでより正確にできないことです。

SNTP実装がNTPよりも多くの問題を引き起こしていることがわかるもう1つの大きなポイントは、ハイパーバイザーとNTPデーモンの両方がVM時間を変更しようとしている場合の仮想化です。特に、いくつかの設定ミスに時間的に同意しないと、両方がアクティブになり、大きな問題が発生する可能性があります。(有能なシステム管理者は、時間と同期するためのアクティブな方法を1つだけ保持しますが、構成エラーによって両方がアクティブになる場合があります)。

PS systemd-timesyncdはを使用しないときに助言された代替ではありませんsystemd


1
それは完全に明らかではありません。理論的には、systemd-timesyncd別のサービスマネージャーでプログラムを実行できます。service-manager2018年以来、noshツールキットで実行するためのサービスバンドルを提供しています。見逃しているのは、systemdの人々(Debianバグ#812522による)がVirtualBoxゲストサービスなどをsystemd-timesyncd使用して、その使用を防ぐために明示的にサービスと競合することを奨励していることです仮想マシンで。
JdeBP

@JdeBPおもしろいコメント:systemd... なしでDebianを使用していますが、vmtools timesyncは無効にできるため、NTPサービスを実行しているサーバー(NTPサーバーVMなど)では無効にする必要があり、一部のシステム管理者はvmtoolsによって同期を維持します。他のユーザーは、vmtools timesyncの無効化に関するVmWareの論文に従います(これは、何をしているのかを知っている場合にのみ使用する必要があります)。このバグは線形に解決されるものではなく、vmtoolsのtimesyncを使用しないというVmWareの推奨事項に従っている人にとっては、簡単に見逃してしまう余分な構成ポイントになります。
ルイFリベイロ

(自分の発言の光に編集私の答えは、(S)NTP対vmtoolsの管理について、そのテキスト上の1つのミスがあったが、それがより明確にする)
ルイFリベイロ

1
@wedi VmWareの場合、ハイパーバイザーとのtimesyncは、Vcenter、VMイメージ構成、またはLinux側の両方で無効にできます。関連するunix.stackexchange.com/questions/492487/を参照してくださいvmware-toolbox-cmd timesync disable。VmWareのメンバーがこれらのVMのtimesyncを無効にしているかどうかに関係なく、私は常にNTPサーバーで行います。(私は通常、NTPクライアントとしてchronyを使用することを好みます)
ルイFリベイロ

1
タイムシンクレースの可能性を指摘してくれてうれしいです!これを念頭に置いておくと良いでしょう!
ウェディ

0

chronyフォーク形式ではありませんが、ntpdゼロから実装されています。完全なNTPv4プロトコル(RFC5905)のクライアントモードとサーバーモードの両方を実装します。エンタープライズクラスのユーザーには、我々は伝統的に切り替える傾向見ているのはRed Hat(以降RHEL 7)およびSuSE(SLES 15から)などが挙げられます。ntpdchrony

systemd-timesyncdSNTPプロトコル(RFC4330クライアントモードのみを実装します。したがって、複雑なユースケースはでカバーされませんsystemd-timesyncd。たとえば、SNTPは、デフォルトでNTPが行うように、複数のソースから時間を取得することで、より正確にすることはできません。その結果systemd-timesyncd、ほど高い精度の時間を提供できませんchrony


1
うーん chronyを意図している人がフォークであることに気づいていないので、systemd-timesyncdはクライアントのみであるのに対し、chronyはサーバーとクライアントを実装するという質問に言及しました。関連するRFCに言及してくれてありがとう。
-wedi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.