信頼できるタイムスタンプがログに残っていることが障害調査の重要な手がかりとなります。
正確な時刻の確保はサーバ管理の根本ですので、時刻同期の設定はOSをインストール後に最優先で行う作業と位置づけられるものです。
基礎知識として
- 時刻は ハードウェアクロック とOS上の ソフトウェアクロック がともに刻んでいます。
稼働中はソフトウェアクロックだけが参照されますが、ハードウェアクロックはマシン停止時にも動き続けているので
起動時にはハードウェアクロックがソフトウェアクロックへ読み込まれます。 - ネットワークから現在時刻を提供するサービス(NTP)により時刻合わせをします。
このとき、特に時刻を遅らす場合、急に遅らせる操作はしません。時刻が後ろへ飛ぶことによりログの時刻の前後関係がひっくり返る可能性があるからです。
(ログ以外のソフトウェア動作も異常を来すかも知れません)
ソフトウェアクロックのテンポを微妙に落とすことでゆっくりと時計を遅らす操作を SLEWモード の時刻設定と呼びます。
稼働中には
- 定期的にNTPサーバを参照してソフトウェアクロックをSLEWモードで正確に保つ
- 定期的にソフトウェアクロックをハードウェアクロックへ反映する
ことにより稼働中・再起動後とも正確な時刻を保てます。
設定
- ntpd(NTPクライアント・サーバ)のインストール
# chkconfig
インストールはRedhat系のLinuxなら
# yum install ntp
# apt-get install ntp
chkconfigの結果でntpがランレベル3,4,5でonになっていなければ
# chkconfig ntpd on
-
ntpdの設定
純粋にクライアントとして動作するように設定します。
参照先として、日本国内のサーバならNICTの設置するntp.nict.jpを指定します。社内サーバなら社内NTPが指示されているかも知れません。
ntpdの設定ファイルはOSにもよりますが /etc/ntp.conf などです。以下はNICT接続の設定例です。# 時刻の狂いがどんなに大きくても動作停止はしないが、300秒以上狂っていたらSLEWせず一気にあわせる。 tinker panic 0 step 300 # 時刻の狂う傾向を統計して以下のファイルに記録する driftfile /var/lib/ntp/drift # サーバとしての動作は全面禁止 restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery # ただしローカルホストからのアクセスは許可 restrict 127.0.0.1 restrict -6 ::1 # NICTからのアクセス(返答パケット)を許可する restrict 133.243.238.163 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.164 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.243 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.244 mask 255.255.255.255 nomodify notrap noquery # 同期先はNICT server ntp.nict.jp
-
ntpdを再起動
# service ntpd restart
-
時刻同期ができていることを確認
ntpd起動後しばらくしてからを実行して同期状況を表示させます。結果のサーバ名の左端に'*'が出ていれば同期中であることがわかります。# ntpq -p
-
ハードウェアクロックへの定期反映の設定
/etc/crontab ファイルに次の行を追加します。これにより、毎朝5時にソフトウェアクロックがハードウェアクロックに反映されます。0 5 * * 0 root /sbin/hwclock -w > /dev/null 2>&1
ntpdを起動した時点で時刻が5分以上狂っていた場合、上記の設定ではSLEWでなく一気に合わさりますのでご注意ください。