【CentOS7】chrony.confの見方とLinuxの時刻に関する仕様

Linuxのクロックの取り扱い

LinuxはWindowsとは異なり、システムクロックとハードウェアクロックを分離して管理しています。

ハードウェアクロックは『マザーボードに存在する、電源OFFにしても動き続けるもの』、システムクロックは『OS等が起動時にハードウェアクロックからコピーし、その後はOS上で独自に動き続けるもの』です。ciscoも同様に動作しています。

もう少し細かく分類すると、Linuxでは以下3種類の時刻を管理しています。

1. Local Time(Location情報に紐づいた時間。JSTなど)
2. Universal Time(UTC)
3. RTC Time(ハードウェアクロック)

ハードウェアクロック自体にLocation情報はありませんが、OS(Linux)からは管理が可能です。コマンドとしては hwclock があります。また、管理ファイルとしては

/etc/adjtime に { UTC or LOCAL }

/etc/sysconfig/clock に UTC= { True or False }

というパラメータがセットされています。UTC = False にすると、ハードウェアクロックをLocal Timeとして解釈します。

一方、システムクロックはUTCでの管理が前提となります。

/etc/localtime というbinary ファイルでローカル情報を持っており、 /usr/share/zoneinfo/ 配下にあるファイルと置き換えることで変更が可能です。

Chronyの仕様・設定について

CentOS7やRHEL7以降ではNTPクライアント・サーバは Chrony(読み方:クローニー)がデフォルトとなっています。NTPクライアントの機能をchronyc , NTPサーバの機能を chronyd と呼びますが、設定ファイルは/etc/chrony.conf の1つのみです。

Chronyはntpdに代わるもので、機能的に大きな変更はありませんが、chronyではconfファイルにrtcsyncという設定で、ハードウェアクロックとの同期が可能となっています。

/etc/chrony.conf はデフォルトで以下のようになっています。

[root@localhost ~]# cat /etc/chrony.conf
# 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
[root@localhost ~]#

server 0.centos.pool.ntp.org iburst

chronyc における 同期NTPサーバを指定します。iburstオプションは Initial Burst の意味です。『NTPプロトコルの概要・仕組み』で記載している通り、NTPは統計情報を扱うため、1回だけ時刻同期のやり取りをしても精度の高い時刻を測れません。そのため、起動時は短い時間に4回連続NTPサーバへ問い合わせに行き、統計情報のためのサンプルを少しでも多く集めるように動作します。

iburst 以外にも、優先的に時刻同期ソースにする prefer や、絶対的に信頼する trust といったオプションも利用可能です。(絶対的に信頼する、というのは多数決アルゴリズム Selection Algorithm を無視して少数派でも時刻同期ソースとして信頼する、という意味です。)

stratumweight 0

一般にNTPクライアントはNTPサーバからのNTPパケットにある[ Root Delay および Root Dispersion ]から、NTPサーバとの距離=Distanceを計算しています。

また、NTPクライアントは複数あるNTPサーバから、Distance値の小さいNTPサーバ3台を選定して同期しますが、この設定ではその選定基準としてDistance値だけでなくStratumも考慮する設定をすることができます。

例えば『stratumweight 2』 と設定した場合chronyc は Stratum が1上がる毎に、Distance値に2を加える操作をし、Distanceの近い3台を選定します。

driftfile /var/lib/chrony/drift

driftファイルを配置するファイルのフルパスを指定します。

drift とは、ハードウェアクロックが本来的にどのくらいズレる傾向にあるかを測り、それを自動で補正するものです。例えばハードウェアクロックが1日に0.001秒速く進むのであればその情報をこのファイルに保管しておき、例えNTPサーバに通信できない場合であってもこのファイルを元に自動で補正する動きをします。

このハードウェアクロックのズレは、CPUやシステムのクロック周波数と関連があり、その特性に応じて生じるものです。

makestep 1.0 3

chronycが起動し、最初の3回のNTPパケットの往復の中で、1秒以上ズレている場合はSTEPモードで一気に時刻を修正します。それ以外の場合はSLEWモードで緩やかに時刻修正を行います。

rtcsync

前述の通り、同期した時刻をハードウェアクロックに上書きします。なお、VMware の仮想マシンにはハードウェアクロックを保存する領域があるようですが、KVMの仮想マシンにはそれが無く、毎回ホストのハードウェアクロックから初期時刻を引っ張ってきますので、KVM上のVMはこの設定は意味を為しません。

#hwtimestamp *

NIC 内部にハードウェアクロックを持っているものがあり、そのハードウェアクロックをNTPパケットのタイムスタンプとして使う設定ができます。*は全てのインタフェースを示しますが、eth0 等の特定インタフェースのみに指定することも可能です。

#minsources 2

これはRFC5905 にあるパラメータ "CMIN" のことを言っています。Selection Algorithmによって、複数ある同期先NTPサーバの中から明らかに偏って時刻がずれていると思われるものを除外するのですが、除外した後、最低いくつのNTPサーバを残すかを設定します。デフォルトは1です。

#allow 192.168.0.0/16

NTPクライアントからのアクセスを受け付ける範囲を限定します。デフォルトでは全て拒否されるため、NTPサーバとして動作させるためには設定変更が必要です。

#local stratum 10

デフォルト設定の場合、上位NTPサーバから時刻同期できていない場合はStratum 16 となり、下位NTPクライアントに時刻提供ができません。

ですが例えば『local stratum 10』と設定した場合、上記NTPサーバから時刻同期できていない場合であっても自身を『Stratum 10』と定義し、下位NTPクライアントへの時刻提供が可能となります。

keyfile /etc/chrony.keys

NTP version 3以降で利用可能である、NTPの認証で使う鍵ファイルを指定します。

NTPの認証は、クライアントからサーバに対して行うものです。

logdir /var/log/chrony

ログを配置するディレクトリを指定する設定です。

#log measurements statistics

どの項目についてログを取るか指定します。ログにはいくつか種類がありますが、代表的なものを示します。

measurements

ntpパケットの情報を記録します。

statistics

最新のNTPパケットを受信したタイミングで、それまでに受信したNTPパケットを元に推定された各パラメータ(jitter等)を記録します。

tracking

周波数のゲインやロス(ハードウェアに起因する時刻のずれ)の推定値がどの程度変化したか、slewがどの程度為されたかを記録します。

NTPの詳しい動作については下記ページもご参照下さい。

NTPプロトコルの概要・仕組み(時間補正の計算・仕様・シーケンス)
NTPプロトコルの概要・仕組み(時間補正の計算・仕様・シーケンス)
NTPとは NTPとは、Network Time Protocol の略で、I...

シェアする

  • このエントリーをはてなブックマークに追加

フォローする