「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 | 最後に同期した際の時刻のズレ |
コメント