昔別ブログで書いた記事ですが、Qiitaでも転載します。
VMでNTPDが正しく同期してくれない
以前、OVA形式として出力したVMwareのVMを、新たなホスト上に展開した時、
NTPDの時刻同期が正しく実行されないことがありました。
"正しく実行されない"という曖昧な言い方をしたのは、
ntpq -p
コマンドで同期状態を確認すると、
正しく同期できているように見えるのですが、時刻がとんでもなくずれている状態だったためです。
※以下イメージです。
remote refid st t when poll reach delay offset jitter
==============================================================================
* XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX 3 u 408 512 377 2.056 123456.789 101.351
他の何かの時刻同期サービスと競合しているのか?と疑いましたが、
vmware toolsの時刻同期くらいしかそもそも競合ソフトがなく、そちらはOFFになっていました。
frequency error 5xx PPM exceeds tolerance 500 PPM
情報を求めてsyslogを眺めていると、下記のようなntpdプロセスのログが大量に出ていました。
frequency error 512 PPM exceeds tolerance 500 PPM
PPMとは"Parts-per-Million"の略で、時刻の進み方の誤差を表しています。
ntpdは「自身のサーバの腹時計がどれくらいずれやすいか」を正しい時計と見比べて認識しており、
この情報を/var/lib/ntpd/drift
というファイルに定期的に出力しています。
この機能は、親ntpdサーバとの同期頻度を抑えるための機構です。
16秒に1回、32秒に1回、64秒に1回・・・と徐々に同期回数を減らすことで、ntpdプロセスが使うリソースを抑えることができます。
同期頻度を下げた場合においても、時刻ズレが発生しないようにしているんですね。
NTPDは、このPPMが一定のしきい値に達すると「なんかおかしいぞ」とエラーをあげます。
PPMが大幅に大きくなってしまうと、同期周期の間に(正しいかは別として)大きく補正をかけてしまうためです。
その場合は、下記のようにdirftファイルを削除して再起動することで、一旦リセットすることができます。
# /etc/init.d/ntpd stop
# rm /var/lib/ntpd/drift
# /etc/init.d/ntpd start
これで正しく同期されるようになりました。
一件落着ですね。
なぜPPMの値が大幅にずれてしまったのか
サーバの腹時計のズレ具合は、サーバのCPUクロック周波数などの主にハードウェア周りに依存します。
ここで肝なのが、VMの場合はハードウェアがホストによって変わってしまうことにあります。
今回のケースでは、一定時間稼働していたVMをOVAとして出力し、それを別ホストに配備して起動しました。
以前のホスト上でもntpdプロセスは稼働しており、そちらの環境で/var/lib/ntpd/drift
ファイルは作成済でした。
この状態で新たなホスト上でntpdプロセスを稼働させると、別環境上で作成したdrift
ファイルを参照してしまいます。
違う腹で動いていた時計の傾向など、なんの参考になりません。
これを参考にして稼働させていると、徐々に時刻が狂いだすのではないかと僕は考えています。
VMコピーしたらdriftファイルを削除する
この事象を受けて、個人的におまじないとして「VMコピーしたらdrift削除」をいつもやるようになりました。
特に引っ越しに引っ越しを重ねてきたVMは、多くの場合、offsetが思っていた以上に落ち着きません。
誤差といえば誤差ですが、チリツモですね。
この事象に出会ったのは2,3年前ですので、
最近ではVMのエミュレート能力向上に伴い、大幅なズレは発生しないかもしれません。
それでもなんとなくいつもdriftファイルは消してます。
【余談】Chronydについて
先日、CentOS7を初めて触る機会があったのですが、
長く親しんだntpdが不採用になったと聞いて少し悲しい気持ちになりました。
Chronydでもdriftファイルってあるのかなと思い設定ファイルを見てみましたが、
/var/lib/chrony/drift
という場所にありました。
おまじないはソフトが変わっても健在しそうです。
余談中の余談
ntpdについて調査していた時に、下記サイトをよく見ていました。
とてつもなく詳しく、わかりやすくntpdの仕組みが書かれています。
参考:NTP設定
作者さまには陰ながら心より感謝しています。
ブックマークにいれて、ntpdトラブル時等に毎回閲覧させて頂いています。