如何跨多个节点在云(AWS,heroku等)中建立时钟同步?

时间:2012-01-05 13:07:11

标签: cloud clock ntp clock-synchronization

我想在云中运行一个庞大的节点集群(AWS,Heroku,或者可能是自我管理的VMS),其时钟必须与预定义的容差同步。我正在寻找可能200毫秒的容差。这意味着如果我有250个节点,250个节点中任何一个节点之间的最大时钟差异不应超过200毫秒。我真的不关心世界的实际日期/时间。解决方案必须是容错的,并且不需要依赖任何一个系统的时钟精度 - 实际上,很可能没有一个时钟会非常准确。

要求足够强大,如果由于任何原因确定时钟同步对于任何特定节点不可靠,我宁愿由于时钟失步而从群集中删除节点 - 所以在任何可疑的故障时,我希望能够对该节点执行某种类型的受控关闭。

我喜欢使用像NTP这样的东西,但根据NTP known issues twiki

  

NTP并非设计为在虚拟机内运行。   它需要高分辨率系统时钟,响应时钟中断   以高精度提供服务。没有已知的虚拟机   能够满足这些要求。

虽然同样的twiki然后描述了解决这种情况的各种方法(例如在主机操作系统上运行ntp),但我不相信我能够使用AWS或者horoku来修改环境。遵守解决方法。

即使我没有在VM中运行,一位拥有多年运行ntp经验的值得信赖的运营经理告诉我,ntp可以并且会因为本地时钟漂移不良而导致同步失败(或者说时间错误)而。它不会经常发生,但确实会发生,并且随着您增加机器,您会增加发生这种情况的机会。 AFAIK,检测你的距离需要停止ntpd,运行查询模式命令,然后重新启动它,并且可能需要很长时间才能得到答案。

总结一下 - 我需要一个时钟同步,其主要目标如下:

  • 在运营控制有限的VM中运行良好(即:“云服务提供商”)
  • 群集中的时间容差在所有参与者之间约200ms
  • 能够检测到错误的节点并以积极的方式对其做出反应
  • 容错(无单点故障)
  • 可扩展(当你添加更多节点时,事情不会失败 - 绝对避免n ^ 2)
  • 可以支持数百个节点
  • 任何节点都不应被视为具有优于任何其他节点的时间概念
  • 整个群集可以漂移(在合理范围内) - 只要它齐声漂移

从描述来看,似乎Berkeley Algorithm可能是正确的选择,但是它已经实现了吗?

很高兴:

  • 最小配置(节点自动注册参与) - 对于启动新节点很重要
  • HTML仪表板或(REST?)API,用于报告参与时钟同步的节点以及相对时间偏移量
  • 漂亮的图表?

2 个答案:

答案 0 :(得分:1)

由于the FAQ for NTP明确说明了为什么NTP时间同步在虚拟机下无法正常工作,这可能是一个不可逾越的问题。

大多数机器都有一个RTC(实时时钟),在PC上你可以如何存储时间,以便在系统加载后对ntp不可用的时间进行“粗略”猜测有一个'滴答'时钟,分辨率更高 - 这就是NTP设置的。

该刻度时钟受虚拟机的漂移影响,因为滴答可能会或可能不会以正确的间隔发生 - 您尝试使用的任何时间机制都将受到这种漂移的影响。

尝试在虚拟机上强制执行ntp同步可能是次优设计,如果机器A和B的增量为200ms,而机器B和C的增量为200ms,C可能距离A为400ms。你不能控制那个。

你最好使用像zeromq这样的集中式消息传递系统让每个人都与作业队列保持同步,这会带来更多的开销,但依靠系统滴答时间充其量只是一种狡猾的事情。有许多聚类解决方案可以解决群集参与问题,使用各种可靠的机制来确保每个人都同步,看看corosync或传播 - 他们已经为两阶段提交解决了这个问题。

顺便说一下,当漂移过高时,ntp'放弃'可以通过指示它将时间“猛击”到新值而不是“回转”来规避。默认情况下,ntp将逐步更新系统时间,以说明其从“实时”漂移。我忘记了如何在ntpd中配置它,但如果使用ntpdate,则标志为-B

-B      Force the time to always be slewed using the adjtime(2) system call, even if the measured 
offset is greater than +-128 ms.  The default is to step the time using settimeofday(2) if the offset 
is greater than +-128 ms.  Note that, if the offset is much greater than +-128 ms in this case, it
can take a long time (hours) to slew the clock to the correct value.  During this time, the host 
should not be used to synchronize clients.

答案 1 :(得分:0)

在VM上使用NTP苦苦挣扎了几个月之后,我们使用了https://chrony.tuxfamily.org来切换时间。我发现它在很多方面(配置,控制,文档,处理虚拟机时钟经常且剧烈漂移的问题)都比ntpd优越。

使用chrony,不要回头:)