【CentOS7】chronydで時刻同期

「CentOS7」からNTPのサーバが、「ntpd」から「chronyd」へと変更となりましたので、その設定方法を説明していきます。

ちなみに、NTPクライアントの機能は「chronyc」コマンドとなっています。

chronydの設定

「chronyd」の設定ファイルは「/etc/chrony.conf」となり、初期設定でも時刻同期させる事は可能ですが、とりあえず設定を行っておいたほうがよさそうな項目について説明をしていきます。

ちなみに「CentOS7」での初期設定は下記の通りとなっています。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.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).
rtcsync

# 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

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

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

時刻を同期させるだけであれば初期設定のままでも動作させることはできるのですが、サーバとしてクライアントに時刻を提供したい場合は、下記で説明している「allow」で接続を許可するクライアントのネットワークの設定と「local 」の設定で自サーバの「stratum」の値を設定しておく必要があります。

設定項目

「chronyd」で出来る設定は色々あるのですが、今回は初期設定で設定されている項目について説明していきます。

server(pool)

時刻を問い合わせる(同期)ためのNTPサーバを指定します。

同期させるサーバの不具合に備えて、指定するサーバは可能な限り複数指定(RedHatでは4サーバ以上を推奨)するようにしましょう。

複数のNTPサーバを指定する場合は、複数行に分けて設定します。

server 同期させるNTPサーバ1 ibrust
server 同期させるNTPサーバ2 ibrust
pool 同期させるNTPサーバ ibrust
serverとpoolの違い

ホスト名で同期先サーバを指定する場合、「server」を使用して指定すると一つのサーバを指定する形となり、「pool」を使用して指定すると、ラウンドロビンなどで複数のIPアドレスが設定されている場合、複数のサーバをまとめて指定することができるようになります。

ibrusオプション

「iburst」を指定することで、「chronyd」が起動した際に短い間隔で4回ntpサーバに問合せを行い、時刻同期までの間隔を短くすることが出来ます。

どのNTPサーバを参照させるのがよいの?

プロバイダーやVPSを提供してる会社で提供しているNTPサーバを参照させるのがネットワーク的に近いので、まずはそれらを参照させるのが良いでしょう。

NTPサーバが提供されていない場合や、提供されているサーバの数が少ない場合は下記の公開NTPサーバの中から選んで設定すると良いでしょう。

私は「インターネットマルチフィード」さんや「NTP POOL PROJECT」が提供しているNTPサービスを使用することが多いです。

設定例
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
server 0.jp.pool.ntp.org
server 1.jp.pool.ntp.org
server 2.jp.pool.ntp.org
server 3.jp.pool.ntp.org

「pool」で指定するならば、「ntp.jst.mfeed.ad.jp」「pool jp.pool.ntp.org」と指定します。

pool ntp.jst.mfeed.ad.jp iburst
pool jp.pool.ntp.org iburst

driftfile

時刻の変動を記録するためのファイルを指定します。

特に理由がないのであれば初期設定のままで良いです。

makestep

時刻を同期調整を行う際の挙動として、「slew」(少しづつ調整)と「step」(一気に調整)という2種類の方法があります。

「chronyd」での時刻調整は基本的には「slew」となるのですが、「makestep」の設定で起動直後だけは時刻が大幅ズレていた場合に「step」調整を行わせることができます。

「何秒以上」の部分で設定した以上の秒数ズレていたい場合、「回数」に設定した回数分の同期までは「step」調整で時刻を合わせることが出来るようになります。

makestep 何秒以上 回数

「step」での時刻調整はシステムやアプリケーションに大きな影響を与えやすいのですが、OS起動時の初めの方で「chronyd」が起動されるので、時刻の調整が終わってからアプリケーションが起動されていくという流れになっています。

slew

少しづつ時刻のズレを調整していく方法。

この方法の場合、時刻の調整は少しづつ行われるためにシステムや他のアプリケーションへの影響が少なくすみます。

ただし、少しづつ調整を行っていくために時刻のズレが大きい場合は、正常な時刻に調整されるまでに時間がかかってしまいます。

step

一気に時刻のズレを調整する方法。

この方法は時刻の調整を一気に行うために、システムや他のアプリケーションへの影響が非常に大きくなってしまいます。

step調整で時刻を調整した場合、ログのタイムスタンプがおかしくなってしまったり、アプリケーションによっては不具合が発生することがありますが、正確な時刻に調整されるまでの時間は非常に短いものになります。

step調整を行う場合は、影響のありそうなアプリケーションを停止して行うか、時刻同期を行った後にサーバを再起動するなどを行ったほうが良いでしょう。

rtcsync

同期した時刻を11分毎にリアルタイムクロック(マザーボードなどが記録している時刻)に上書き設定させる設定。

hwtimestamp

NIC(ネットワークインターフェイスカード)にはハードウェアクロックが搭載されている製品もあり、そのハードウェアタイムスタンプを有効化させる設定。

全てのNICで有効化させたい場合は「*」とし、一部のNICのみ有効化させたい場合は、対象となるNIC名を指定します。

hwtimestamp * <--全てのNICを指定
hwtimestamp eth0 <--NICを指定

minsources

時刻同期を行う際に使用するNTPサーバを選択するときに、サーバを選択するアルゴリズムの選定対象とするサーバの最低数を指定。

複数のNTPサーバを選択対象とすることで、時刻の信頼性が向上します。

allow/deny

NTPサーバとして動作させる場合に、問い合わせの許可(allow)や不許可(deny)するネットワーク(ホスト名での設定も可能)のアクセスリストを設定。

allow ネットワークアドレス
deny ネットワークアドレス

例えば「192.168.1.0/24」のネットワークに属するクライアントからの問い合わせを許可する場合は、下記のように指定します。

allow 192.168.1.0/24

allowやdenyだけ記述してネットワークを指定しない場合は、すべてのネットワークが対象となります。

アクセスリストの設定は上から順に適用されます。

NTPサーバとしてクライアントからの時刻同期を受け付ける場合は、allowでアクセスできるように設定しておく必要があります。

local

同期先サーバが何らかの理由で使えない場合に、自分のstratum値を設定する。

これにより、自サーバがNTPサーバとして動作している場合にクライアントからは設定してあるstratum値のサーバと認識されて同期することが出来ます。

NTPサーバとして動作させる場合にこの設定が無いと、上位のNTPサーバと通信できなくなった際に自身「stratum」の値が「stratum 0」となってしまい、クライアントは信頼できるNTPサーバと認識できずに同期が出来なくなってしまいます。

keyfile

NTPの認証で使用する鍵ファイルの場所を指定します。

logdir

ログファイルを保存するディレクトリを指定します。

log

記録したいログの種類を設定します。

measurements

NTPの測定と関連の情報を「measurements.log」ファイルに記録します。

statistics

回帰処理の情報を「statistics.log」ファイルに記録します。

tracking

システムの時刻がズレるレートの予測に対する変更や、発生したslew調整を「tracking.log」ファイルに記録します。

rtc

システムのリアルタイムクロックの情報を「rtc.log」ファイルに記録します。

refclocks

未加工およびフィルター処理された基準クロックの測定を「refclocks.log」ファイルに記録します。

tempcomp

温度測定とシステムのレート補正を「tempcomp.log」ファイルに記録します。

設定の反映

設定を反映させるために「chronyd」を再起動します。

# systemctl restart chronyd

時刻同期の確認

chronyc sources(同期サーバの一覧)

「chronyc sources」コマンドを実行することで、同期先のNTPサーバ接続状態の一覧を表示させることが出来ます。

動作的には「ntpq -p」コマンドと同じですね。

# chronyc sources
210 Number of sources = 3
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.jst.mfeed.ad.jp          2   6   377    38   -218us[ -530us] +/-   99ms
^+ ntp2.jst.mfeed.ad.jp          2   6   377    39  -4362us[-4674us] +/-   96ms
^+ ntp3.jst.mfeed.ad.jp          2   6   337    38   -734us[ -734us] +/-  125ms

表示項目の説明

項目 説明
M 同期先の種類
「^」サーバ
「=」ピア
「#」ローカルハードウェア
S 同期先の状態
「*」同期している
「+」同期することができる
「-」アルゴリズムにより同期対象から除外
Name/IP address ホスト名またはIPアドレス
Stratum NTPサーバの階層
Poll 問い合わせ間隔設定
Reach 直近8回の同期が成功したかどうかを8進数で表示
LastRx 最後に同期した時間
Last sample 最後に同期した際の時刻のズレ

シェアする