GNU/Linux >> Linux の 問題 >  >> Linux

ChronyでNTPを管理する

「誰か本当に今何時か知っていますか?誰か本当に気にしていますか?」

–シカゴ、1969年

おそらく、そのロックグループはそれが何時であるかを気にしませんでしたが、私たちのコンピューターは正確な時刻を知る必要があります。計時はコンピュータネットワークにとって非常に重要です。銀行、株式市場、およびその他の金融ビジネスでは、トランザクションを適切な順序で維持する必要があり、そのためには正確な時系列が重要です。システム管理者とDevOpsの専門家にとっては、一連のサーバーを介して電子メールの軌跡をたどったり、問題のコンピューターで正確な時刻が保持されている場合、地理的に分散したホスト上のログファイルを使用してイベントの正確なシーケンスを判断したりする方が簡単です。

私は以前、1日に2,000万通以上の電子メールを受信し、受信する大量の電子メールを受け入れて基本的なフィルターを実行するためだけに4台のサーバーを持っていた組織で働いていました。そこから、より複雑なスパム対策評価を実行するために、他の4つのサーバーの1つに電子メールが送信され、その後、電子メールが正しい受信ボックスに配置されたいくつかの追加サーバーの1つに配信されました。各レイヤーで、電子メールは、ラウンドロビンDNSのランダム性によってのみ選択された次のレベルのサーバーの1つに送信されます。とがった髪のボスによると、「迷子になった」場所を特定できるまで、システム全体で新しいメッセージを追跡しなければならないことがありました。私たちは恐ろしい規則性でこれをしなければなりませんでした。

その電子メールのほとんどはスパムであることが判明しました。一部の人々は実際に、その日の[ジョーク、猫の写真、レシピ、心に強く訴えることわざ、またはその他の奇妙な電子メール]が欠落していると不満を述べ、私たちにそれを見つけるように頼みました。私たちはそれらの機会を拒否しました。

私たちの電子メールやその他のトランザクション検索は、タイムスタンプが付いたログエントリによって支援されました。このタイムスタンプは、現在、最も低速なLinuxコンピューターでもナノ秒まで解決できます。非常に大量のトランザクション環境では、システムクロックの数マイクロ秒の違いでさえ、何千ものトランザクションを並べ替えて正しいトランザクションを見つけることを意味する場合があります。

NTPサーバー階層

世界中のコンピューターは、ネットワークタイムプロトコル(NTP)を使用して、NTPサーバーの階層を介してインターネット標準の基準時計と時刻を同期しています。プライマリサーバーはストラタム1にあり、衛星、ラジオ、または電話回線を介したモデムを介して、ストラタム0のさまざまな国内時間サービスに直接接続されています。層0のタイムサービスは、原子時計、原子時計によって放送される信号に合わせて調整されたラジオ受信機、またはGPS衛星によって放送される高精度の時計信号を使用するGPS受信機の場合があります。

階層の下位(つまり、階層番号が大きい)のタイムサーバーからの時間要求がプライマリ参照サーバーを圧倒するのを防ぐために、オープンで誰でも使用できる数千のパブリックNTP階層2サーバーがあります。 NTPサーバーを必要とする多数のホストを持つ多くの組織は、1つのローカルホストのみがストラタム2タイムサーバーにアクセスするように独自のタイムサーバーを設定し、残りのネットワークホストをローカルタイムサーバーを使用するように構成します。私の場合は、はストラタム3サーバーです。

NTPの選択

元のNTPデーモン、 ntpd 、新しい chronydが加わりました 。どちらも、ローカルホストの時刻をタイムサーバーと同期させます。どちらのサービスも利用できますが、これが間もなく変更されることを示すものは何もありません。

Chronyには、次の理由から、ほとんどの環境に適した機能があります。

  • Chronyは、NTPよりもはるかに高速にタイムサーバーに同期できます。これは、常時稼働しないラップトップやデスクトップに適しています。

  • ホストが休止状態またはスリープモードに入ったとき、または負荷が低いときにクロック速度を遅くする周波数ステッピングによってクロック速度が変化したときなど、変動するクロック周波数を補正できます。

  • 断続的なネットワーク接続と帯域幅の飽和を処理します。

  • ネットワーク遅延と遅延を調整します。

  • 最初の時刻同期後、Chronyは時計を刻みません。これにより、システムサービスとアプリケーションの安定した一貫した時間間隔が保証されます。

  • Chronyは、ネットワーク接続がなくても機能します。この場合、ローカルホストまたはサーバーを手動で更新できます。

NTPおよびChronyRPMパッケージは、標準のFedoraリポジトリーから入手できます。両方をインストールして切り替えることができますが、最新のFedora、CentOS、およびRHELリリースは、デフォルトの時間管理実装としてNTPからChronyに移行しました。 Chronyはうまく機能し、sysadminに優れたインターフェースを提供し、より多くの情報を提供し、制御を強化することがわかりました。

明確にするために、NTPはNTPまたはChronyのいずれかで実装されるプロトコルです。詳細を知りたい場合は、NTPプロトコルの実装としてのNTPとChronyのこの比較をお読みください。

この記事では、FedoraホストでChronyクライアントとサーバーを構成する方法について説明しますが、CentOSとRHELの現在のリリースの構成は同じように機能します。

クロニー構造

Chronyデーモン、 chronyd 、バックグラウンドで実行され、 chrony.confで指定されたタイムサーバーの時間とステータスを監視します ファイル。現地時間を調整する必要がある場合は、chronyd 時計が即座に新しい時間にリセットされた場合に発生するプログラムによるトラウマなしでスムーズに実行されます。

Chronyのchronyc このツールを使用すると、誰かがChronyの現在のステータスを監視し、必要に応じて変更を加えることができます。 chronyc ユーティリティは、サブコマンドを受け入れるコマンドとして使用することも、インタラクティブなテキストモードプログラムとして使用することもできます。この記事では、両方の使用法について説明します。

クライアント構成

NTPクライアントの構成は単純で、介入はほとんどまたはまったく必要ありません。 NTPサーバーは、Linuxのインストール中に定義することも、起動時にDHCPサーバーによって提供することもできます。デフォルトの/etc/chrony.conf ファイル(以下に全体を示します)は、クライアントとして正しく機能するために介入を必要としません。 Fedoraの場合、ChronyはFedora NTPプールを使用し、CentOSとRHELには独自のNTPサーバープールがあります。多くのRedHatベースのディストリビューションと同様に、構成ファイルには十分なコメントが付けられています。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.fedora.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).


# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

テストに使用する仮想マシンでのNTPの現在のステータスを見てみましょう。 chronyc コマンド、追跡とともに使用する場合 サブコマンドは、ローカルシステムが参照サーバーからどれだけ離れているかを報告する統計を提供します。

[root@studentvm1 ~]# chronyc tracking 
Reference ID    : 23ABED4D (ec2-35-171-237-77.compute-1.amazonaws.com)
Stratum         : 3
Ref time (UTC)  : Fri Nov 16 16:21:30 2018
System time     : 0.000645622 seconds slow of NTP time
Last offset     : -0.000308577 seconds
RMS offset      : 0.000786140 seconds
Frequency       : 0.147 ppm slow
Residual freq   : -0.073 ppm
Skew            : 0.062 ppm
Root delay      : 0.041452706 seconds
Root dispersion : 0.022665167 seconds
Update interval : 1044.2 seconds
Leap status     : Normal
[root@studentvm1 ~]#

結果の最初の行の参照IDは、ホストが同期されているサーバーです。この場合、2018年16:21:30にホストから最後に接続されたストラタム3参照サーバーです。他の行については、 chronyc(1)のマニュアルページ。

ソース サブコマンドは、 chrony.confで構成されたタイムソースに関する情報を提供するためにも役立ちます。 。

[root@studentvm1 ~]# chronyc sources
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   6   377     0  -2613us[-2613us] +/-   63ms
^+ dev.smatwebdesign.com         3  10   377   28m  -2961us[-3534us] +/-  113ms
^+ propjet.latt.net              2  10   377   465  -1097us[-1085us] +/-   77ms
^* ec2-35-171-237-77.comput>     2  10   377    83  +2388us[+2395us] +/-   95ms
^+ PBX.cytranet.net              3  10   377   507  -1602us[-1589us] +/-   96ms
[root@studentvm1 ~]#

リストの最初のソースは、パーソナルネットワーク用に設定したタイムサーバーです。その他はプールから提供されました。 NTPサーバーが上記のChrony構成ファイルに表示されていなくても、DHCPサーバーがNTPサーバーのIPアドレスを提供します。 「S」列(ソース状態)は、アスタリスク( * )で示されます )ホストが同期されているサーバー。これは、追跡のデータと一致しています サブコマンド。

-v オプションは、この出力のフィールドの適切な説明を提供します。

[root@studentvm1 ~]# chronyc sources -v
210 Number of sources = 5

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   7   377    28  -2156us[-2156us] +/-   63ms
^+ triton.ellipse.net            2  10   377    24  +5716us[+5716us] +/-   62ms
^+ lithium.constant.com          2  10   377   351   -820us[ -820us] +/-   64ms
^* t2.time.bf1.yahoo.com         2  10   377   453   -992us[ -965us] +/-   46ms
^- ntp.idealab.com               2  10   377   799  +3653us[+3674us] +/-   87ms
[root@studentvm1 ~]#

サーバーをこのホストの優先参照時間ソースにしたい場合は、以下の行を /etc/chrony.confに追加します。 ファイル。

server 192.168.0.51 iburst prefer

私は通常、この行をファイルの先頭近くの最初のプールサーバーステートメントのすぐ上に配置します。サーバーステートメントをまとめるのが好きな場合を除いて、これには特別な理由はありません。それはファイルの一番下でも同様に機能します、そして私はいくつかのホストでそれをしました。この構成ファイルはシーケンスに依存しません。

優先 オプションは、これを優先参照ソースとしてマークします。そのため、このホストは常にこの参照ソースと同期されます(使用可能な場合)。 /etc/resolv.conf ファイル。 DNSが機能していない場合でも、タイムソースにアクセスできるようにするために、IPアドレスを使用します。ほとんどの環境では、サーバーのIPアドレスが変更されてもNTPは引き続き機能するため、サーバー名の方がおそらく適切なオプションです。

同期する特定の参照ソースがない場合は、デフォルトを使用しても問題ありません。

Chronyを使用したNTPサーバーの構成

Chrony構成ファイルの良いところは、この単一のファイルがホストをクライアントとサーバーの両方として構成することです。ホストにサーバー機能を追加するには(常にクライアントであり、参照サーバーから時間を取得します)、Chrony構成にいくつかの変更を加えてから、NTP要求を受け入れるようにホストのファイアウォールを構成する必要があります。

/ etc / chronyを開きます .conf お気に入りのテキストエディタでファイルを作成し、ローカルストラタム10のコメントを解除します ライン。これにより、Chrony NTPサーバーは、インターネット接続に障害が発生した場合でも、リモート参照サーバーに接続されているかのように動作し続けることができます。これにより、ホストはローカルネットワーク上の他のホストに対するNTPサーバーであり続けることができます。

chronydを再起動しましょう サービスがどのように機能しているかを数分間追跡します。ホストをNTPサーバーとして有効にする前に、少しテストしたいと思います。

[root@studentvm1 ~]# systemctl restart chronyd ; watch chronyc tracking

結果は次のようになります。 時計 コマンドはchronycトラッキングを実行します 2秒ごとにコマンドを実行して、時間の経過とともに変化が​​発生するのを監視できるようにします。

Every 2.0s: chronyc tracking                                           studentvm1: Fri Nov 16 20:59:31 2018

Reference ID    : C0A80033 (192.168.0.51)
Stratum         : 4
Ref time (UTC)  : Sat Nov 17 01:58:51 2018
System time     : 0.001598277 seconds fast of NTP time
Last offset     : +0.001791533 seconds
RMS offset      : 0.001791533 seconds
Frequency       : 0.546 ppm slow
Residual freq   : -0.175 ppm
Skew            : 0.168 ppm
Root delay      : 0.094823152 seconds
Root dispersion : 0.021242738 seconds
Update interval : 65.0 seconds
Leap status     : Normal

私のNTPサーバーであるstudentvm1 hostは、ストラタム4で内部ネットワークNTPサーバーである192.168.0.51のホストに同期します。Fedoraプールマシンに直接同期すると、ストラタム3で同期されます。エラーの量は時間の経過とともに減少することにも注意してください。最終的には、かなり小さな範囲の誤差の周りの小さな変動で安定するはずです。エラーのサイズは、階層およびその他のネットワーク要因によって異なります。数分後、Ctrl+Cを使用してウォッチループから抜け出します。

ホストをNTPサーバーに変えるには、ホストがローカルネットワークでリッスンできるようにする必要があります。次の行のコメントを解除して、ローカルネットワーク上のホストがNTPサーバーにアクセスできるようにします。

# Allow NTP client access from local network.
allow 192.168.0.0/16

サーバーは、接続されている任意のローカルネットワークで要求をリッスンできることに注意してください。 「許可」行のIPアドレスは、説明のみを目的としています。その行のIPネットワークとサブネットマスクをローカルネットワークと一致するように変更してください。

chronydを再起動します 。

[root@studentvm1 ~]# systemctl restart chronyd

ネットワーク上の他のホストがこのサーバーにアクセスできるようにするには、ポート123でインバウンドUDPパケットを許可するようにファイアウォールを構成します。その方法については、ファイアウォールのドキュメントを確認してください。

テスト

これで、ホストはNTPサーバーになりました。 NTPサーバーがリッスンしているネットワークにアクセスできる別のホストまたはVMでテストできます。 /etc/chrony.confで優先サーバーとして新しいNTPサーバーを使用するようにクライアントを構成します ファイルを作成し、 chronycを使用してそのクライアントを監視します 上記で使用したツール。

インタラクティブツールとしてのChronyc

先に述べたように、 chronyc インタラクティブなコマンドツールとして使用できます。サブコマンドなしでコマンドを実行するだけで、 chronycが得られます コマンドプロンプト。

[root@studentvm1 ~]# chronyc
chrony version 3.4
Copyright (C) 1997-2003, 2007, 2009-2018 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY.  This is free software, and
you are welcome to redistribute it under certain conditions.  See the
GNU General Public License version 2 for details.

chronyc>

このプロンプトでサブコマンドのみを入力できます。 追跡を使用してみてください 、 ntpdata 、およびソース コマンド。 chronyc コマンドラインを使用すると、 chronycのコマンドの呼び出しと編集が可能になります サブコマンド。 ヘルプを使用できます 可能なコマンドとその構文のリストを取得するためのサブコマンド。

結論

Chronyは、クライアントホストがすべてローカルネットワーク上にあるか、世界中に散在しているかに関係なく、クライアントホストの時刻を同期するための強力なツールです。利用可能なオプションが多数あるにもかかわらず、ほとんどの状況で必要な構成はごくわずかであるため、構成は簡単です。

クライアントコンピューターがNTPサーバーと同期した後、次のコマンドを使用して、システム(OS)時刻からシステムハードウェアクロックを設定したいと思います。

/sbin/hwclock --systohc

このコマンドは、 cron.dailyにcronジョブまたはスクリプトとして追加できます。 ハードウェアクロックをシステム時刻と同期させておくため。

ChronyとNTP(サービス)はどちらも同じ構成を使用し、ファイルの内容は交換可能です。 chronyd、chronyc、およびchrony.confのマニュアルページには、開始したり、難解な構成オプションについて学習したりするのに役立つ驚くべき量の情報が含まれています。

独自のNTPサーバーを実行していますか?コメントでお知らせください。使用している実装(NTPまたはChrony)を必ずお知らせください。


Linux
  1. Linuxでタイムゾーンを設定してサーバー時間をNTPと同期する方法

  2. Linuxサーバー時間をネットワークタイムサーバーと同期する

  3. RackspaceでCloudFlareを使用する

  1. Time Sync Linux

  2. Time Sync Linux

  3. クラウドサーバーを使い始める

  1. タイムゾーンで開始時間を処理しますか?

  2. python-novaclientを使用してクラウドサーバーのSSHキーペアを管理する

  3. CentOS / RHEL 7 :NTP / chrony の問題のトラブルシューティングに関するヒント