More than 1 year has passed since last update.

まえがき

ネットワークを使った時刻合わせといえばNTPが有名だったが,最近ではCentOSが採用したこともあってChronyが普及してきています.
特徴としては以下の通り.
1.NTPより高精度(らしい)
2.クライアントにもサーバにもなれる
3.従来のNTPサーバを使える
4.いちいちデーモンを止めなくてもntpdateができる

この記事では特に実験や測定試験などで各サーバの時計を積極的に同期させる場合の設定について説明します.

インストール

aptからすんなりインストールできます.

$ sudo aptitude install chrony

設定

ファイルの場所は/etc/chrony/chrony.confになります.

サーバの設定

allow 192.168.0.0/24

実験用のサーバであれば外部のNTPサーバを利用して正確に時刻を同期する必要がないので,実験用ネットワーク内(この例では192.168.0.0/24のネットワーク)に標準となるサーバを設置し,上記のように同一ネットワーク内からのアクセスを許可しておきます.
とはいえ,時刻があまりにも現実世界と異なっていると後々面倒なことになるので,定期的に手動で時刻を合わせるか,外部ネットワークに接続してntp.nict.jp等と時刻同期を行っておくことをお勧めします.

NTPサーバの指定

server 192.168.0.101 iburst minpoll 5 maxpoll 6

ntp.confと同様にNTPサーバを指定し,その後にオプションを追記します.
iburstで起動時に4回ぐらいサーバと時刻同期をし,精度を高めます.
minpoll,maxpollがポーリング間隔の最小値と最大値で2のべき乗秒を表しています.
この設定だと最小で2の5乗=32秒,最大で2の6乗=64秒という割と短い間隔で時計を合わせる設定となっています.

ハードウェアクロックの設定

rtcsync

上記の記述でハードウェアのクロックの補正を自動的に行ってくれます.
ハードウェアクロックの値を確認する場合はhwclock -r, 手動で合わせるならhwclock -wをコマンドから叩いてください.
特に再起動したときに盛大に時間がずれる場合,この1行を追加しておくときっちり合わせてくれるようになります.

ステップ調整の指定

makestep 0.1 10

起動時にDrift(徐々に同期させていく)ではなく,Step(強制的に同期させる)で合わせる場合の条件の指定方法です.
0.1秒以上ずれていたらStepで同期し,0.1秒以下になるまで最大10回まで同期を試みます.
基本的に時計がいきなり大きく変化すると,プログラムによっては予期しない挙動を起こすことがあるので,実際の運用ではDriftさせた方が安全ですが,実験や測定の場合はDriftによってなかなか時間が合わないことの方が問題になる場合があります.

ちなみに手動でStepによる同期を行うには

$ chronyc -a makestep

と叩けば合わせてくれます.

まとめ

以上で実験用のChrony設定は終わりです.
設定が反映されているかどうかはchronyc sourcesコマンドを叩いて確認してください.ヘッダに^*が表示されていれば問題ありません.
こうした設定で有線環境下であればだいたい1msec以下の誤差で時刻同期ができます.

書くかも

もっと精度を上げる方法としてUDPパケットを使った独自プロトコルによる時刻補正プログラムを作成したりしましたが,また後で書くかもしれません.