LoginSignup
11
10

More than 5 years have passed since last update.

VM上のNTPDが正しく同期しない

Last updated at Posted at 2015-12-07

昔別ブログで書いた記事ですが、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トラブル時等に毎回閲覧させて頂いています。


11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10