exB - extreme B-AREA -

無敵の中年男性!的確な中年男性!難攻不落の中年男性!

サーバ管理 - NTP

鯖はCentOS4/5だから、な! 

初稿:2007-10-05

ntpdate

0時回ってもコンテンツが自動更新されないのでおかしいなと思ったら20分近く狂ってた(遅れてた)。慌ててntpdateコマンドを叩く。

# ntpdate ntp1.jst.mfeed.ad.jp
5 Oct 00:22:01 ntpdate[*]: adjust time server 210.173.160.27
 offset 1034.428 sec

サーバの時刻というのは非常に重要である。大きなズレはログの信憑性を著しく損なうことになる。確か2ヶ月くらい前に調整しているのでどうも1日15秒くらいはズレてるようだ。これではちょっと話にならない。ntpdateをcronでブン回すのもいいが、ntpdで時刻調整させることにした。

ntpd

確認するとすでにパッケージでインストールされてるようなので、サービスレベル2~5あたりをonにするだけで済みそう。

# chkconfig --list | grep ntpd
ntpd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
# chkconfig --level 2345 ntpd on
# service ntpd start

rc.local

OS起動時に時間合わせをする参考設定。まずntpdateで大雑把に修正し、その後はntpdで微調整。

[# vi /etc/rc.d/rc.local
(略)
echo "Starting NTP daemon"
# synchronyzed by ntpdate
/usr/local/bin/ntpdate -s -b ntp1.jst.mfeed.ad.jp
# 5 second later , start ntpd
sleep 5
/usr/local/bin/xntpd
(略)

ntp.conf

デフォルトでいくつか同期(参照)するNTPサーバが登録されているが、設置場所が国内なら同期サーバも国内に変更しておくほうがよかろう。福岡大学は非推奨、MFEEDあたりにしておくのが無難。なおNTPの標準ポートは123/TCP

# vi /etc/ntp.conf
fudge   127.127.1.0 stratum 15	# 控えめなオレ
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

ntpdate+cronと比較してntpdを使うメリットは、複数のNTPサーバを参照できるので耐障害性で有利なこと、またそれぞれのdrifttimeを照らし合わせて遅延などによる誤差を最適化できること。

デーモンの動きを確認してみる。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.jst.mfeed. 210.173.160.86   2 u  479 1024  377  142.330   -2.594   0.310
+ntp2.jst.mfeed. 210.173.160.86   2 u  551 1024  377  142.545   -2.197   5.609
+ntp3.jst.mfeed. 210.173.160.86   2 u  584 1024  377  142.271   -2.496   0.540
 LOCAL(0)        LOCAL(0)        10 l   20   64  377    0.000    0.000   0.004
remote
リモートホスト名
*
sys.peer、同期中であると宣言されたTimeサーバ
+
candidat、接続テストに合格し、いつでも参照可能なTimeサーバ
-
outlyer、クラスタリング検査で捨てられたTimeサーバ
x
falsetick、falseticker検査で捨てられたTimeサーバ
.
excess、参照サーバーが多くて捨てられたTimeサーバ
#
selected、同期距離が遠いが参照可能なTimeサーバ
o
pps.peer、同期中であると宣言されたTimeサーバ
無印
reject、距離が遠くて捨てられたTimeサーバ
refid
参照ID
st
階層レベル
t
階層タイプ、l:local、u:unicast、m:multicast、b:broadcast
when
最後のパケットを受け取ってからの時間(sec)
poll
ポーリング間隔(sec)
reach
到達可能なレジスタ(8進数表現)
delay
ポーリングインターバルの遅延見積もり(ms)
offset
階層のオフセット(ms)
jitter
階層の分散(ms)

BIOSとの同期

Linux(に限らないだろな)はOS起動時の時刻設定を、いい加減にもほどがあるBIOSから引っ張ってくる。ntpd/ntpdateで補正した時刻はそのままだとBIOSには反映されないのでclock -wで同期してやる。

# clock
Fri 5 Oct 2007 10:17:34 PM JST  -0.272105 seconds
# date
Sat Oct 6 05:17:37 JST 2007
# clock -w
# clock
Sat 6 Oct 2007 05:18:06 AM JST  -0.975052 seconds
# date
Sat Oct 6 05:18:07 JST 2007

いちおう起動時にntpdateで大雑把に調整するようにはしているが、念のためBIOSとの同期をcronで行っておくことにする。あるいはshutdownスクリプトに組み込んでもよし。

# crontab -e
0 5 * * *	/sbin/clock -w

クライアントレベルならSNTPでの時刻同期( XPのWindows TimeもSNTPクライアントだ)で構わんだろう。

参考

Windows Timeがデフォルトで参照するNTPサーバ、“time.windows.com”はただでさえ日本からだと遠いしデフォルトゆえにトラフィック過多になりやすい。変更するにはレジストリをいぢらないといけないので、不安ならWindows Timeサービスを無効にして桜時計やtclockで国内のNTPサーバを指定するとよい。

Active Directoryに参加しているWindowsクライアントの場合、同期先を変更するとKerberos認証で用いるタイムスタンプがズレてActive Directoryに参加できなくなる恐れがある。クライアントの時刻にズレがあるとすればドメインコントローラの時刻同期に問題がある可能性が高い、というわけでサーバ管理者にその旨伝えるのがよい。

タイムゾーンの変更

新鯖を借りることになりシコシコとセットアップ。海外鯖の場合、たいていタイムゾーンは日本になってないので変えてやらないといけない。

# date
Thu Oct 11 18:05:03 EDT 2007

うみゅ。EDTは東部アメリカ時間だっけかな。これを日本のJSTに変更。/usr/share/zoneinfoの中にいろんなタイムゾーン設定がいらっしゃるので、JapanもしくはAsia/Tokyoを/etc/localtimeにコピーしてやればよいのだが、念のためオリジナルをバックアップし、シンボリックリンクを張ることにする。

# mv /etc/localtime /etc/localtime.org
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

では確認。

# date
Fri Oct 12 07:07:41 JST 2007

なんか大幅にずれてるので最初に戻る

雑感

次項でも多少触れるが、個々の端末がそれぞれStratum 1や2のホストと同期を取るよりも、サブネット内のノードの同期を保つことのほうが大事ではないかというのが私見。その概念の延長が、ISPレベルでのNTPサーバ運用及び公開である。みんなが同じサーバを参照したら絶対トラフィックが飽和するんだよ、福岡大学みたいにさ。だからISPがStratum2クラスのNTPサーバを複数運用し、ラウンドロビンか何かで参照先を変えてやれば負荷は減るはず。

プロバイダ・機関別 NTPサーバリスト