web-dev-qa-db-ja.com

NTPを使用してLinuxサーバーのグループを共通のタイムソースに同期する

20台ほどのLinuxサーバーがあり、すべてのクロックを単一のNTPサーバーに同期します。これはサーバーと同じラックとスイッチにあります。何も仮想化されていません。

私たちの管理者は、さまざまなマシンのクロックを約500ミリ秒未満で同期させるのに問題があります。私は推測したと思います、そして この投稿 は、ソースから2ミリ秒以内にLinuxボックスを同期させることができるはずであることを意味します。

NTP=への私の期待は無理ですか?管理者が何をすべきか/チェックすべきかについてのヒントはありますか?

7
Ted Graham

私はホスティング会社を所有しており、まさにこれを行っています。これを実現する方法を次に示します。

最初に、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など)です。

12
Kilo

正しく構成されたNTPは数ミリ秒以内に同期を達成します。私は常に各NTPクライアントが少なくとも3つと通信することを確認しますNTPサーバー。

使用する ntpq -pステータスを監視する-同期がうまくいかない理由を示します。

3
RedGrittyBrick

同期にかかる時間を大幅に短縮できるかどうかはわかりませんが、ntpサーバーを正しく構成すると、サーバーで行った同期とほぼ同じ10〜20ミリ秒になります。ドリフト時間を最小限に抑えます。それを取得することは不可能ではありませんが、NTPサーバーをセットアップし、すべてのサーバーをそのNTPサーバーにポイントして、最初に手動で時刻を同期しますb/wサーバーの時間差を減らします。

0
Ramesh Kumar