我在一个小型网络中有大约 20 个 Linux 服务器,我需要它们的时钟彼此非常接近(例如在 20 毫秒内)。我已经开始将它们中的每一个都同步到 europe.pool.ntp.org,然后工作就完成了。
现在我有两个问题:
- 我是游泳池的明显负担吗?即,如果我从 20 台服务器或 2 台服务器命中,它对池有什么明显的影响吗?
鉴于该池多年来一直需要服务器(参见 [1]),我想说虽然 2 或 20 台服务器并没有真正产生影响,但您应该始终记住,您并不孤单。所以你最好考虑说 1000 名管理员,在这种情况下,我们谈论的是 2000 或 20000 台服务器,这确实有所不同。
- 如果它确实有所不同,那么什么设置/配置可以使我的子网保持同步并使池处于轻负载状态?
您必须将网络中的两个 [2] 服务器与池同步(我们称它们为主NTP 服务器),然后将所有其他服务器同步到这两个服务器。此方法还有一个优点,即所有服务器之间的时间将更加匹配(小于 1 毫秒)。这是符合 IETF 最佳实践的。
1) 主 NTP 服务器的配置
用以下内容替换ntp[d].conf的server
和restrict
行,并将其余部分保留为您的发行版默认值[3]:
peer 10.11.12.1 iburst
# ^^^^^^^^^^^
# The LAN IP of the _other_ Primary NTP server
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
Run Code Online (Sandbox Code Playgroud)
请注意,此配置还允许来自 Internet 各地的主机通过 NTP 查询来查询您的主机时间。如果您不想,请使用防火墙。在我的示例中,10.11.12.1 和 10.11.12.2 是主 NTP 服务器的 IP(它们有两个网卡,一个面向公共互联网,另一个面向本地 10.11.12.x 子网)。每个主 NTP 服务器都将另一个声明为对等(对等基本上意味着服务器和客户端 - 您将另一台主机用作时间源,另一台主机也将您用作时间源)。所以调整第一行的IP,使每个Primary NTP Server的配置指向另一个作为peer。有关我选择使用 4 个服务器的信息,请参阅 [4]。
2)所有其他服务器的配置
2A) 如果您有两个网络接口
您最好使用第二个接口来创建本地子网(例如10.11.12.0/24
)并将其用于 NTP 查询。在这种情况下,限制线可能会更紧。因此,再次将ntp[d].conf的server
和restrict
行替换为以下内容,并将其余部分保留为您的发行版默认值[3]:
restrict -4 default ignore
restrict -6 default ignore
restrict 10.0.0.0 mask 255.0.0.0 kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
# Only use our Primary NTP Servers
server 10.11.12.1 iburst
server 10.11.12.2 iburst
# ^^^^^^^^^^
# The IPs of your 2 Primary NTP Servers
Run Code Online (Sandbox Code Playgroud)
2B) 如果您没有两个网络接口
您应该使用下面的限制行(并阅读上面有关使用防火墙阻止访问 NTP 服务器的说明)。因此,再次将ntp[d].conf的server
和restrict
行替换为以下内容,并将其余部分保留为您的发行版默认值[3]:
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
# Only use our Primary NTP Servers
server 10.11.12.1 iburst
server 10.11.12.2 iburst
# ^^^^^^^^^^
# The IPs of your 2 Primary NTP Servers
Run Code Online (Sandbox Code Playgroud)
笔记
[1]从 2006 年到 2012 年,他们不断要求加入更多服务器:2006 年的请求、2009年的请求和2012年的请求。查看www.pool.ntp.org了解当前状态的更新。
[2]两个主 NTP 服务器仅被建议作为一种简单的方式来实现冗余,而无需复杂的高可用性安排。您可以出于其他原因选择 3 或 4(再次阅读IETF 最佳实践)
[3]在实践中,无论您的发行版如何,您唯一需要在 ntpd 配置中包含的其他内容是定义放置漂移文件的目录及其名称的行——例如driftfile /var/lib/ntp/ntp.drift
. 我已经在 CentOS、Debian 和 Ubuntu 中测试了我的解决方案。我想它适用于大多数其他发行版。
[4]我已经按照最佳实践配置了 4 个池服务器。配置 4 个以上的服务器在技术上是可以接受的,但您会增加 NTP 池的负载,以获得有问题的可用性,所以不要这样做。在最佳实践中,我看到“从 ntp-4.2.6 开始,‘pool’指令将启动‘足够’的关联以提供强大的时间服务”,因此如果您使用 .pool。地址和 ntp >=4.2.6 服务器线路的确切数量可能无关紧要。
咆哮哦!我讨厌 NTP(除了我喜欢它的工作原理)。官方文档充满了过时的信息,他们有“我如何使用它?” 信息与有关内部结构的科学细节混合在一起。我也讨厌restrict 127.0.0.1
真正的意思allow everything for 127.0.0.1
更新历史
我已经iburst
从本地 NTP 服务器的配置中删除了该选项,因为它们对池的友好性是有争议的。(看评论)。删除它们只会为第一次同步增加几分钟的等待时间。
学分
SF 用户 Marki 和 Sven 的评论和回答为这个回答提供了一个很好的起点。感谢他们俩。也感谢SF用户BACON多年后纠正了一个严重错误(ndemou定律:“给足够的眼球和无限的时间,所有错误都是浅薄的”)
通常的方法是使用分层设置 - 您将网络中的一两个服务器与池同步,然后将它们用作本地时间源。这个级别在 NTP 术语中称为层。
另外,想想看:如果你像你描述的那样做,它不会很明显,但是如果你的规模有 1000 个站点,你最终会收到 20k 大部分不必要的请求,并且在某些时候,它会变得明显。
阅读http://en.wikipedia.org/wiki/Network_Time_Protocol
归档时间: |
|
查看次数: |
4730 次 |
最近记录: |