AWS – ELB – NTP – 无法转发 UDP 流量?

AWS – ELB – NTP – 无法转发 UDP 流量?

我正在尝试在内部 ELB 后面设置两个微实例,用于处理诸如中央日志记录和 NTP 查询等日常任务,但后来意识到 ELB 不支持 UDP 转发。经过一番搜索,我找到了这个文章,并对其进行了调查,但根据AWS 文档,您无法在私有区域内的节点上设置健康检查。

所以我的问题是,如何启用具有容错能力的单个 NTP 服务器(ELB 或 Route-53,或?)以便本地节点可以引用它,而不是用请求污染互联网渠道?我是否需要通过 VIP 和 keepalived 管理自己的容错机制?

答案1

不要尝试对时间服务器进行负载平衡或以其他方式“HA”。这违背了 NTP 的工作方式——通过相互比较服务器。基于 DNS 的故障转移也是行不通的。对 ntpd 进行简单的健康检查也是没有意义的,因为守护进程可以正常运行,尽管它已经失去理智并发出了无效的时间信号。

请注意,ntpd 在启动时会将指定时间服务器的名称解析为 IP 地址,并且在运行时不会尝试重新解析该信息(除非/直到您告诉它重新读取/重新加载配置文件)。

这意味着,如果您认为通过仅使用一个服务器名称但使用多个 IP 地址(可能指向多台机器)可以获得更高的可靠性,那么您应该再考虑一下。当您管理一组非常大的 NTP 服务器(例如,pool.ntp.org)时,这样做有优势,但对于任何较小的服务器,您几乎肯定不会获得您可能正在考虑的行为。

此外,不要尝试为多台机器提供相同的 IP 地址,或将它们隐藏在负载平衡设备后面 - 这会使 ntpd 感到困惑并使情况变得更糟。

更好的方法是指定一组服务器,每台服务器都有自己独特的 IP 地址,并配置客户端连接到该组中的多个服务器,然后让客户端处理当一台或多台服务器无法访问或不可靠时会发生什么的问题。

http://support.ntp.org/bin/view/Support/SelectingOffsiteNTPServers#Section_5.3.6

单独配置服务器,并设置客户端使用所有服务器……全部 4 个,因为 4 被认为是适当服务器数量的下限,这样即使其中一个服务器失去理智,您仍能从三个服务器获得高质量的时间信号。三个服务器中有一个坏了,无法有效地忽略坏的服务器。

http://support.ntp.org/bin/view/Support/SelectingOffsiteNTPServers#Section_5.3.3

从我的角度来看,VPC 中使用的 NAT 实例是运行时间服务器的合适候选者。

或者......考虑一下一旦 ntpd 稳定下来,它就会产生越来越少的流量,并且不要太担心相对微不足道的互联网流量(但当然不要将所有服务器配置为直接连接到第 1 层源)。

相关内容