ntpdateコマンドによるslewモードでの時刻合わせ

はじめまして、松野です。
今回はLINUXサーバの時刻同期についてです。

サーバ内の時間がずれていると、さまざまな問題が発生します。

ログに書かれた時間が実際の時間と異なってしまったり、大きくずれていると正常に起動しないミドルウェアがあったりします。

時刻同期を行うコマンドのひとつにntpdateコマンドがあります。

ntpdateコマンドによる時刻同期には、一気に合わせるstepモードと、徐々に合わせるslewモードがあります。

一気に合わせたい場合(stepモード)

ntpdate -b [NTPサーバ]

徐々に合わせたい場合(slewモード)

ntpdate -B [NTPサーバ]

一気に合わせても問題ない場合は、stepモードで時刻合わせを実行した後にNTPDを起動すればOKです。

時間が進んでしまっている場合、過去に戻ることになるので注意が必要です。

サーバ内時間が過去に戻ってしまうと困るサーバの場合には、slewモードを利用して徐々に合わせていくことになります。
修正するスピードは「1秒間につき最大で0.0005 秒」とのこと。

今回はslewモードでの時刻合わせを実際に行い、どれくらい時間が掛かるのかを調べました。

slewモードの動作について検証

サーバの時刻を10秒進め、slewモードによる時刻合わせを行います。
1秒間に最大0.0005秒修正されるので、計算上では最短5時間30分で修正完了となります。

まずはサーバの時間を10秒ほど未来に進めます。

# ntpdate -q ntp.jst.mfeed.ad.jp
server 210.173.160.87, stratum 2, offset -9.798881, delay 0.03308
server 210.173.160.27, stratum 2, offset -9.799707, delay 0.03296
server 210.173.160.57, stratum 2, offset -9.799372, delay 0.03308
26 Mar 18:55:34 ntpdate[3774]: step time server 210.173.160.27 offset -9.799707 sec
#

約10秒早い状態になりました。

slewモードによる時刻合わせを開始します。

# ntpdate -B ntp.jst.mfeed.ad.jp
26 Mar 19:06:16 ntpdate[9112]: adjust time server 210.173.160.27 offset -9.790137 sec
#

slewモードでの時刻合わせが開始されました。

実行後、念のため一気に時刻合わせがされていないかを確認。

# ntpdate -q ntp.jst.mfeed.ad.jp
server 210.173.160.87, stratum 2, offset -9.788566, delay 0.03322
server 210.173.160.57, stratum 2, offset -9.787771, delay 0.03302
server 210.173.160.27, stratum 2, offset -9.787805, delay 0.03313
26 Mar 19:06:21 ntpdate[9186]: step time server 210.173.160.57 offset -9.787771 sec
#

10秒早い状態のままです。
この状態でしばらく(一晩)放置します。

一晩たってから、ログを確認します。

server 210.173.160.87, stratum 2, offset -0.090918, delay 0.03300
server 210.173.160.57, stratum 2, offset -0.090577, delay 0.03290
server 210.173.160.27, stratum 2, offset -0.090373, delay 0.03278
27 Mar 00:20:02 ntpdate[19424]: adjust time server 210.173.160.27 offset -0.090373 sec
Fri Mar 27 00:30:01 JST 2015

約5時間30分後、もっとも時刻差異が小さくなりました。
計算上の完了予定時刻と近いですね。

その後のログを追ってみます。

27 Mar 00:20:02 ntpdate[19424]: adjust time server 210.173.160.27 offset -0.090373 sec
27 Mar 00:30:02 ntpdate[19504]: adjust time server 210.173.160.27 offset 0.218787 sec
27 Mar 00:40:01 ntpdate[19582]: adjust time server 210.173.160.27 offset 0.367731 sec
27 Mar 00:50:02 ntpdate[19663]: adjust time server 210.173.160.27 offset 0.376642 sec
27 Mar 01:00:02 ntpdate[19743]: adjust time server 210.173.160.27 offset 0.385301 sec
27 Mar 01:10:01 ntpdate[19837]: adjust time server 210.173.160.57 offset 0.394296 sec

このサーバはNTPDが起動していない状態だと徐々に時間が遅れていくようです。
ただ、00:20~00:30の間に遅れた時間が、その後より明らかに大きいです。
これは、slewモードの時刻合わせが未だ動いていたものと思われます。
slewモードの時刻あわせは、少し行き過ぎてしまうようですね。

結果

slewモードを利用することで、徐々に時刻合わせを行うことができました。
注意点としては

1.時刻の差異がなくなった時点で丁度止まる訳ではなく、若干行き過ぎる
2.時刻合わせが終わったあとは再び時刻がずれ始める

の二点でしょうか。
実際に行う場合には、何度かに分けて時刻合わせをし、差異をなくした上でNTPDを
起動させる必要がありそうです。

投稿者プロフィール

matsuno
基本を大事にしていきたいサーバーエンジニアです。

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.