taiclockサーバは、自分自身のシステム時刻をtaiclockクライアントに通知 する時刻サーバである。また、taiclockクライアントは、taiclockサーバの サービスを使ってシステム時刻を調整するクライアントである。
taiclockサーバであるtaiclockdデーモンは、自分自身のシステム時刻を正し く保つ機能は持っていない。まずは clockspeed などで正確なシステム時刻を確保した上で使用する。
taiclockサーバ、taiclockクライアントともに、必要なコマンド群は clockspeedパッケージに含まれている。以下の記述はclockspeed-0.62のイン ストール方法である。最新版についての情報は clockspeed本家 を参照されたい。
以下の記述では、インストール先は${prefix}として示してある。例えば /usr/localなど、好みに応じて設定すること。
wgetコマンドなどで clockspeed-0.62.tar.gz を取ってくる。
% tar xvzf clockspeed-0.62.tar.gz % cd clockspeed-0.62
インストール先をconf-homeに、コンパイル方法をconf-ccに、リンク方法 をconf-ldに記述する。
% make
clockspeedの動作条件 を満たさない環境ではclockspeedの構築に失敗する。その場合は touch clockspeed などとして、clockspeed構築を回避すること。
# make setup check
以下のような手順でtaiclockdデーモンを起動する。taiclockdをdaemontools で制御する場合の設定は Tips Collection - daemontools: taiclockd設定例 を参照のこと。
# sh -c 'taiclockd &'
taiclockdは、UDPの4014番ポートからの時刻問い合わせ要求を受け付ける。 もしtaiclockdを起動しているホストでパケットフィルタリングを行っている ならば、taiclockクライアントからのUDPの4014番ポートへの接続を許可する ように設定すること。
taiclockクライアントでの時刻合わせは、root権限で手動でtaiclockコマン ドとclockaddコマンドを呼び出すことによって行う。taiclockコマンドの引 数でtaiclockサーバのIPアドレスを指定する。
# taiclock ${taiclock server's ip address} | clockadd
自動で時刻合わせを行うなら、上記のコマンドをcronなどで自動起動するよ うに設定する。
もしtaiclockクライアントでclockspeedを使用しているなら、clockaddコマ ンドではなく clockspeedのadjustファイル を使って時刻合わせを行う。
% taiclock ${taiclock server's ip address} > ${clockspeed prefix}/adjust &
clockaddコマンドで時刻合わせを行うと、時刻を合わせた瞬間はシステム時 刻が不連続に変化してしまう。これに対してclockspeedを用いた場合は、シ ステム時刻が不連続に変化しないよう配慮しながらclockspeedが時刻合わせ を行ってくれる。可能ならば、taiclockクライアントであってもclockspeed を併用する方が望ましい。
ここでは、LAN内部のホストをtaiclockサーバあるいはtaiclockクライアント として設定し、LAN内の全ホストの時刻合わせを行う方法を紹介する。
LAN内のホストのうち、 clockspeedの動作条件 を満たすホストの中から1台を選択し、taiclockサーバとする。 他のホストはすべて、この1台のtaiclockサーバのクライアントとする。
taiclockサーバの時刻合わせにはclockspeedデーモンを使用する。 clockspeedはNTPサーバのように常時ネットワークを使用するわけではない ので、いわゆる「上流に近いホスト」をtaiclockサーバに選択する必要は ない。
clockspeedを起動することができるならば、クライアントであっても clockspeedを併用することが望ましい。 clockspeedの動作条件 を満たすクライアントでは、時刻合わせにclockspeedを併用する。
まずサーバ自身のシステム時刻を合わせるために clockspeed を起動する。clockspeedの基準時刻にはLAN外部のNTPサーバを使用する。
clockspeedによるシステム時刻は、正確な時刻で安定するまでに少なくと も数日を要する。システム時刻が安定するまではクライアントに時刻情報 を提供してはならない。
サーバのシステム時刻が安定したら、クライアントにシステム時刻を提供 するために taiclockd を起動する。
clockspeedが理想的な働きをするのであれば、以降はLAN外部のNTPサーバ との定期的な通信は不要である。サーバを再起動した時にだけ、起動時刻 をclockspeedに通知すれば良い(参照: clockspeed: 2度目以降の起動方法)。
が、現実的には、適度な間隔でNTPサーバとの時刻のずれを監視するべきだ ろう。手動で監視するのであれば、以下のコマンドを実行する:
% sntpclock ${ntp server's ip address} | clockview
自動化するなら、上記の監視を月に1回cronで実行して結果をメールで管理 者に送信する、などの設定を行うと良いだろう。あるいは、監視ではなく 時刻調整を自動化してしまうこともできる。
まず clockspeed を起動する。基準時刻にはLAN内のtaiclockサーバを指定する。
clockspeedが安定したら、cron等でtaiclockサーバの基準時刻を定期的に 自動受信するように設定する。以下は毎月1日の午前1時に時刻を合わせる ためのcrontabエントリである。${prefix}はclockspeedのインストール先 ディレクトリ名、${taiclock server's ip address}はtaiclockサーバのIP アドレスで置き換えること。
0 1 1 * * ${prefix}/bin/taiclock ${taiclock server's ip address} > ${prefix}/adjust
基準時刻の自動受信間隔は、クライアントの動作安定状況に合わせて選択 する。常時安定して稼働しているならば月1回程度の頻度で十分である。
使用しない時は停止しているなど頻繁に再起動するホストでは、ホスト起 動時にclockspeedに起動時刻を知らせるだけで良く、稼働中に定期的に時 刻補正を行う必要はない。あらかじめ十分な精度の時刻進度補正量が求まっ ていて、起動時に正確な時刻を再設定しているのだから、短い稼働時間内 に時刻がずれることはない。
clockspeedを併用しない場合は、root権限で定期的に時刻調整を行わなけ ればならない。
以下は15分ごとに時刻を合わせるためのcrontabエントリである。
*/15 * * * * ${prefix}/bin/taiclock ${taiclock server's ip address} | ${prefix}/bin/clockadd
時刻調整を行う時間間隔は、システム時刻のずれの速度と要求される時刻 精度によって決まる。システム時刻と基準時刻のずれの速度は、以下のよ うな測定によって求められる。
システム時刻を基準時刻に合わせる。
# taiclock ${taiclock server's ip address} | clockadd
1時間後に、システム時刻と基準時刻のずれを測定する。出力される beforeとafterの値の差分が時刻のずれである。
% taiclock ${taiclock server's ip address} | clockview
before: 2002-08-01 22:47:36.237196000000000000
after: 2002-08-01 22:47:36.163427999920994043
上記の例では、基準時刻とシステム時刻の1時間当たりのずれは +0.0738
秒である。仮に時刻のずれの許容範囲を0.1秒以内とするのであれば、
要求を満たす時刻調整間隔は
0.1 / 0.0738 = 1.35 [hour] = 81 [min]
以内となる。この場合は1時間おきに時刻調整を行えば十分であろう。
clockaddコマンドで時刻調整を行うと、時刻を合わせた瞬間にシステム時 刻が不連続に変化する点が発生する。システム時刻の不連続な変化は時刻 に依存するサービスに悪影響を及ぼすので、時刻のずれの許容範囲はあま り大きく設定するべきではない。
また、多数のクライアントが同時にサーバに問い合わせを行うことは望ま しくない。丁寧に設定するのであれば、問い合わせを行う時刻が分散する よう配慮した方が良いだろう。
ホスト数が多く、1台のtaiclockサーバですべてのクライアントからの要求 を受け付けることが困難な場合は、複数のホストをtaiclockサーバにする ことで対処する。例えば下記のような階層構成が考えられる。
taiclockdで構築する時刻サーバは、その性質上「複数の上位サーバを持つ こと」や「同格のサーバ間でお互いを補完し合うこと」ができない(物理的 に不可能ではないがおそらく意味がない)。これらのことを実現したいので あれば、NTPサーバの使用を検討するべきである。NTPサーバとtaiclockサー バをLAN内で併用する場合は、上位にNTPサーバ群を、下位にtaiclockサー バ群を配置するのが良いだろう。