为一些服务器进行正确的 NTP 配置

为一些服务器进行正确的 NTP 配置

我在一个小网络中有大约 20 台 Linux 服务器,我需要它们的时钟足够接近(例如在 20 毫秒内)。我已开始将它们全部同步到 europe.pool.ntp.org,任务已完成。

现在我有两个问题:

  1. 我是否对游泳池造成了明显的负担?也就是说,这是否对游泳池造成了任何如果我从 20 台服务器或 2 台服务器进行访问,与池有什么区别?
  2. 如果确实有区别,那么需要什么样的设置/配置才能使我的子网保持同步,并使池处于轻负载状态?对于大型网络,有指导原则(http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm#AEN3101),但是我还没有找到适用于小型网络的解决方案。

答案1

  1. 我是否对矿池造成了明显的负担?也就是说,如果我从 20 台服务器或 2 台服务器发起攻击,对矿池来说是否有明显的区别?

鉴于该池多年来一直需要服务器(参见 [1]),我想说,尽管 2 台或 20 台服务器并没有太大区别,但你应该始终记住你并不孤单。所以你最好考虑 1000 名管理员,在这种情况下我们谈论的是 2000 台或 20000 台服务器,这做出改变。

  1. 如果确实有区别,那么什么样的设置/配置可以使我的子网保持同步并且池处于轻负载下?

您必须将网络中的两个[2]服务器与该池同步(我们称它们为主 NTP 服务器),然后将所有其他服务器同步到这两个服务器。此方法还有一个优点,即所有服务器之间的时间将更加接近匹配(在 1 毫秒以内)。这在符合 IETF 最佳实践

1)主 NTP 服务器的配置

server将你的 ntp[d].conf 中的和行替换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

请注意,此配置还允许来自互联网各地的主机通过 NTP 查询来查询您的主机时间。使用防火墙如果你不想的话。在我的示例中,10.11.12.1 和 10.11.12.2 是主 NTP 服务器的 IP(它们有两个网卡,一个面向公共互联网,一个面向本地 10.11.12.x 子网)。每个主 NTP 服务器都将另一个声明为对等服务器(对等服务器基本上意味着服务器和客户端 - 您使用另一台主机作为时间源,另一台主机也使用您作为时间源)。所以调整第一行的IP以便每个主 NTP 服务器的配置都指向另一个作为同行。请参阅 [4],了解我选择使用 4 个服务器的原因。

2)其他所有服务器的配置

2A)如果你有两个网络接口

您最好使用第二个接口创建本地子网(例如10.11.12.0/24),并将其用于 NTP 查询。在这种情况下,限制行可以更严格。因此,再次用以下内容替换ntp[d].conf 中的serverrestrict行,其余部分保留为发行版默认值[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

2B)如果你没有两个网络接口

您应该使用下面的限制行(并阅读上面关于使用防火墙阻止访问 NTP 服务器的说明)。因此,再次用以下内容替换ntp[d].conf 中的serverrestrict行,其余部分保留为发行版的默认值[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

笔记

[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


更新历史

我已经从本地 NTP 服务器配置中删除了该iburst选项,因为它们对池的友好性值得商榷。(见评论)。删除它们只会增加几分钟的等待时间第一的同步。


致谢

SF 用户 Marki 和 Sven 的评论和回答为这个答案提供了一个很好的起点。感谢他们两人。还要感谢 SF 用户 BACON,经过多年才纠正了一个严重的错误(恩德穆定律:“只要有足够的眼光和无限的时间,所有的错误都是浅显的”)

答案2

通常的做法是使用分层设置 - 将网络中的一台或两台服务器与池同步,然后将其用作本地时间源。这些级别称为地层用 NTP 术语来说。

另外,想一想:如果你按照你描述的那样去做,它不会真正引人注目,但是如果有 1000 个像你这样规模的站点开始这样做,你最终会得到 20k 个大多是不必要的请求,并且在某个时候,它会变得引人注目。

http://en.wikipedia.org/wiki/Network_Time_Protocol

相关内容