我有一个(大部分时间)由多台计算机组成的孤立网络。
computer 0 -- external NTP server
/
switch -- computer 1 -- external NTP server
\
computer n -- external NTP server
上图中的连接可能只有一小部分在任何时间点都可用。尤其是与外部 NTP 服务器的连接大多数时间都不可用。
如何使用 chrony 使所有计算机保持同步,而无需明确的客户端/服务器角色?
要求:
- 在任何给定的时间点,只有一部分计算机可以启动并运行。它们应该能够同步并保持同步。如果另一台计算机启动,它也应该同步。绝对时间并不重要(只要误差在几秒/几分钟的范围内)。重要的是网络中的所有计算机都同步。
- 偶尔,任何一台计算机都可能连接到互联网,并且应该能够从外部 NTP 服务器获取正确的绝对时间,并在本地网络中分发该时间。
我考虑过为网络上的每台计算机配置一个外部 NTP 服务器(最初标记为离线),然后将所有计算机列为彼此的对等计算机。这是正确的做法吗?我找不到任何信息,说明如果网络中只有 NTP 对等计算机而没有可访问的 NTP 服务器,会发生什么情况。时钟会收敛到一个合理的时间吗?或者这种配置可能会变得不稳定,以至于整体漂移可能比网络中单个计算机的最坏硬件时钟漂移还要糟糕?
编辑:
为了强调我对适当的 chrony 配置的想法:以下方法是一个好主意吗?
/etc/chrony/chrony.conf
在计算机 0 上:
pool external.ntp.pool offline
peer computer_1
peer computer_2
peer computer_n
local stratum 10
/etc/chrony/chrony.conf
在计算机 1 上:
pool external.ntp.pool offline
peer computer_0
peer computer_2
peer computer_n
local stratum 10
等等 ...
答案1
解决您的问题最简单、最好(但并非最便宜)的方法是在该网络上设置一个小型无线电时钟设备(GPS 或 WWVB/短波)。让设备将其用作 NTP 配置中的服务器,然后在设备发生故障时相互对等以进行回退。
由于广播无线电信号是单向的,这将满足您对网络隔离的安全要求。
充当 NTP 服务器的 GPS 和 WWVB 设备在很多价位上都有广泛应用。
如果网络无法以任何方式接收无线电信号(潜艇、坚固的掩体等),则此 u 解决方案将不起作用。但如果这是您的情况,您可能有钱安装某种类型的本地频率标准。
答案2
- 尽量不要这样做。根据您对 @rmalayter 的回答,NTP 不是分散式协议。准确的时间依赖于“中央”(即更高层)服务器为其客户端提供时间。您最好始终保持一个系统处于开启状态,与外部时间源保持联系。BeagleBone、Raspberry PI 或类似的嵌入式系统是一种简单、便宜的方法。
- 您建议的配置基本可以正常工作。我建议以下几点:
- 不要使用
offline
- 该指令将在启动或恢复网络连接pool
时自动重试。chronyd
- 添加
orphan
到您的local
线路中 - 这是专为补偿您的情况而设计的 NTP 功能。当上游连接不可用时,它将导致其中一个对等点被选为本地主节点。 - 主机在其配置中将其自己的地址作为对等地址是无害的:
chronyd
将自动忽略它。这是一种便利,意味着您可以将相同的配置发送给每个主机。
- 不要使用