全マシンがNTPサーバになってるのって
意味あるんだろうか?
某所で運用されている数十台のサーバー群のすべてで、ntpdが常駐してた。そういう設計になってるのをまったく他のところでも見かけたことがあるので、なんだろう、定石みたいになっているのだろうか。
一部の人には釈迦に説法だろうが一応説明すると、ntpはクライアント/サーバなソフトである。 クライアント(例:ntpdateコマンド)は、指定したサーバに「いま何時?」と聞く。 サーバー(例:ntpdデーモン)は、「いま○○時だよ」と答える。
ちなみに筆者はサーバの時刻あわせ設定はいつも
$ cat /etc/cron.daily/ntpdate #!/bin/bash /usr/sbin/ntpdate -s ntp.jst.mfeed.ad.jp /sbin/hwclock --systohc exit 0こんな感じでntpdateコマンドをcronでたたくだけ。マシンのハードの時計の精度が悪くてすぐ狂っちゃう(いわゆるハズレを引いた)というときはcron.dailyじゃなくてcron.hourlyにしている。 -sオプションによって動作ログはsyslog(linuxならデフォルト/var/logmessages)で記録される。
ほとんどのケースでは、他のマシンに時刻情報を提供したい、という要求ではなくて、マシンの時計を合わせておきたいというだけの要求だろう。だとすればntpクライアントを定期的に実行するだけでいいはずなのに、なんでかしらんけどntpデーモンが常駐してntpサーバとして稼動させるケースが多いみたい。確かにそれでサーバの時刻は一定時間ごとに自動補正されるけどさ。 (注:NTPサーバの時刻が狂っていたらお話にならないので、ntpdデーモンはクライアントの問い合わせに答えるだけでなく、一定時間ごとに基準とするほかのNTPサーバに問い合わせて自らの時刻を補正する機能を併せもつ。)
常駐している必要の無いプロセスが常駐している状態は気持ち悪いかつリソースの無駄と感じる俺の頭は古いのだろうか。 ntpdなんて小さなプロセスが食うリソースなんて知れてるからいいんだ!という、富豪プログラミングならぬ富豪的サーバー運用なのか? いまさらNTPデーモンにセキュリティホールが!なんてこともなさそうだしなあ。
あ、そうか、デーモンで動かしておけば「そのサーバの時刻が合ってるか」っていうのを外部からのntp問い合わせで確認/監視できるというメリットがあるな。 でもサーバー/NW監視対象項目にそんなのあったかどうかまでは覚えてない。 そもそもntpd通さなくともマシンの時刻くらいならsnmpで取得できそうな気もする。
なお、「なんでもかんでも /usr/sbin/ntpdate -s ntp.jst.mfeed.ad.jp とかやっちゃだめだろちゃんと自分のプロバイダが提供しているやつとか、とにかく近くのNTPサーバを指定するようにしないと!」という話は近代日本では昔話だと思う。 マルチフィード社の回線は主要プロバイダ直結で十分太いし、そもそもいまどきみんな回線速いし、mfeedも普通のPCでも使ってね的な説明をしている。NICTのほうも毎秒100万リクエストでもOKだからドンと来いと言ってる。 福岡大のNTPサーバがアクセス集中で悲鳴をあげてた話なんてのも今となっては古きよき時代の伝説である。
もちろん、0.1秒未満の誤差で全てのマシンの時刻を合わせたい!とかいうシビアな要求であればここまでの話とはまたちがうと思います。。
追記:
ntpdにslewモードってのがあるのを実はいま初めて知った(汗) 7へぇ。時刻ズレで苦しんだ経験がほとんど無いせいか知らなかったです。 デーモン常駐でやるメリットはそこかなるほど。 解説は→時刻の後戻りを発生させずにシステム全体の時刻を確実に同期させたい:ITpro

コメント
ntpdateコマンドは現在の時刻を無視して一気にntpサーバの時刻にあわせてしまいますよね。
時刻が進む分にはあまり問題にならないのですが、時刻が戻ってしまうといろいろな不整合が発生します。それを避けるために、ntpdで(slew modeで徐々に)時刻同期するようにしています。
Posted by ほんのしおり at 2008年9月26日
マニュアルに解説があったと思うのですが,すぐに見つからなかったので私の記憶だけで。
ntpdateは,瞬時に時刻合わせを行うため,アクセスログなど時刻を記録しているファイルで,時の流れに矛盾が生じることがあります。
# 時計が10秒進んでいた状態でログを記録していたら,
# 時刻合わせの瞬間,ログの上では10秒昔にタイムスリップします。
ntpdは,このログの問題が生じないように,時刻合わせを徐々に行います。
システム時計の「1秒」を,現実の「101/100秒」に変化させるというふうに,ほんの少しだけ変化させて,たとえば20分ぐらいかけて10秒の時計のズレを直します。
サーバーの電源オン時には「ntpdate」ですぐに合わせて,あとは「ntpd」で時計を合わせ続けるのが,定番のやり方です。
ログを気にしないクライアント機ならば,cronでntpdateを動かすやり方で問題ないと思います。
Posted by yasiyasi at 2008年9月26日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)