20台ほどのLinuxサーバーがあり、すべてのクロックを単一のNTPサーバーに同期します。これはサーバーと同じラックとスイッチにあります。何も仮想化されていません。
私たちの管理者は、さまざまなマシンのクロックを約500ミリ秒未満で同期させるのに問題があります。私は推測したと思います、そして この投稿 は、ソースから2ミリ秒以内にLinuxボックスを同期させることができるはずであることを意味します。
NTP=への私の期待は無理ですか?管理者が何をすべきか/チェックすべきかについてのヒントはありますか?
私はホスティング会社を所有しており、まさにこれを行っています。これを実現する方法を次に示します。
最初に、NTPマスターソースが必要です。そのため、Linuxサーバーの1つがマスターになります。time.example.comというDNS Aレコードを作成します(example.comがこの方法では、マスターが移動した場合、他の19台のサーバーを更新する必要はありません。
マスターサーバーでは、適切に構成されたntp.confファイルが必要です。
以下は、マスターの/etc/ntp.confファイルの1つです。これは、172.17.x.xを使用するプライベートアドレススペース(RFC1918)を備えたデータセンターであるため、それに応じて調整する必要があることに注意してください。複数のマスターが必要な場合は、それぞれ異なるIPを持つ複数のDNS Aレコードを作成して、必要に応じて少しのフォールトトレランスを実現します。
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
server 0.north-america.pool.ntp.org
server 1.north-america.pool.ntp.org
server 2.north-america.pool.ntp.org
server 3.north-america.pool.ntp.org
# Logging & Stats
statistics loopstats
statsdir /var/log/ntp/
filegen peerstats file peers type day link enable
filegen loopstats file loops type day link enable
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
broadcastdelay 0.008
restrict default noquery nomodify
restrict 0.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 3.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
# Allow LAN to query us
restrict 172.17.0.0 mask 255.255.0.0 nomodify notrap
# Trust ourselves. :-)
restrict 127.0.0.1
これで、各クライアントに、次のような/etc/ntp.confファイルがあります。
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
server time.example.com
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /etc/ntp/drift
multicastclient # listen on default 224.0.1.1
broadcastdelay 0.008
# Don't serve time or stats to anyone else by default (more secure)
restrict default noquery nomodify
restrict time.example.com mask 255.255.255.255 nomodify notrap noquery
# Allow LAN to query us
restrict 172.17.0.0 mask 255.255.0.0 nomodify notrap
# Trust ourselves. :-)
restrict 127.0.0.1
Ntpqコマンドを使用して、同期しているサーバーを確認します。これにより、構成済みのタイムサーバーと、サーバーで発生している遅延、オフセット、ジッターのリストが提供されます。正しく同期するには、遅延とオフセットの値がゼロ以外で、ジッター値が100未満である必要があります。
また、クライアントノードには、NTPDデーモンを起動する前にクロックを同期するrcスクリプト(/etc/rc.d/rc.local)があります。ここに重要な部品があります...それらは順序に依存しています。
クライアントのクロックをマスタータイムソース/ usr/sbin/ntpdate -b time.example.comと同期します。
NTPDデーモンを起動して、起動時の大きな時間調整を可能にします。/usr/sbin/ntpd -g -x
最後に、設定に応じて、ファイアウォールルールをパンチして、time.example.comマスターがUDPポート経由でパブリックインターネットに到達できるようにする必要があります。これは、典型的で適切に配置されたIPTablesルールです
iptables -t nat -A POSTROUTING -o $ PUB_IF -p udp --dport 123 -j MASQUERADE
PUB_IFはパブリックインターフェイス(eth0、eth1など)です。
正しく構成されたNTPは数ミリ秒以内に同期を達成します。私は常に各NTPクライアントが少なくとも3つと通信することを確認しますNTPサーバー。
使用する ntpq -p
ステータスを監視する-同期がうまくいかない理由を示します。
同期にかかる時間を大幅に短縮できるかどうかはわかりませんが、ntpサーバーを正しく構成すると、サーバーで行った同期とほぼ同じ10〜20ミリ秒になります。ドリフト時間を最小限に抑えます。それを取得することは不可能ではありませんが、NTPサーバーをセットアップし、すべてのサーバーをそのNTPサーバーにポイントして、最初に手動で時刻を同期しますb/wサーバーの時間差を減らします。