分布式系统中要部署几台 NTP 服务器才够用?

在分布式系统中,时钟同步至关重要。本文探讨了部署NTP服务器的数量以确保高可用性和准确性。至少需要4台NTP服务器以避免时钟阵营分化,其中2台位于同一数据中心,另外2台在临近数据中心,以提高可靠性。同时,介绍了stratum 1 NTP服务器的DIY方法,以及部署GPS模块和原子钟作为更精准的时间源。监控NTP服务器的准确性成为另一个挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

陈硕 (giantchen_AT_gmail)

Blog.youkuaiyun.com/Solstice  t.sina.com.cn/giantchen

陈硕关于分布式系统的系列文章:http://blog.youkuaiyun.com/Solstice/category/802325.aspx

本作品采用“Creative Commons 署名-非商业性使用-禁止演绎 3.0 Unported 许可协议(cc by-nc-nd)”进行许可。
http://creativecommons.org/licenses/by-nc-nd/3.0/

 

分布式系统中各节点的时钟同步是必备的,虽然做不到完全同步(毕竟不是一个时钟域),但是借助 NTP 服务可以把同一个数据中心(同一个 LAN 上)内的机器的时钟同步到相互误差 1 毫秒上下,这通常已经够用了。(这里的机器指的是运行 Linux 或 FreeBSD 的机器,Windows 的时钟精度要差得多,不堪一用。)

那么要部署多少台 NTP 服务器才能达到比较高的可用性(availability)呢?

1 台肯定不够,因为是 single point of failure,它一旦坏了各台机器的时钟就会漂移。

2 台呢?似乎可以满足高可用的需求,坏一台也没关系。但是,一个人戴一块手表的时候知道时间,当他戴两块手表的时候就不知道哪个是准的了。如果数据中心里有两台 NTP 服务器,stratum 数又是一样(它们之间不相互同步,因此有时间差),在两台都正常工作的情况下,各台机器怎么知道应该跟哪台 NTP 服务器同步时钟呢?更糟糕的是,万一有一半的机器跟 NTP1 同步,另外一半跟 NTP2 同步,分属两个时钟阵营,岂不是比不同步好不了多少?(NTP 的算法规定只能和一台服务器同步时钟,不能取两台服务器的平均数来同步。)

3 台呢?似乎能打破僵局 (break the tie),有了三个候选者,但愿机器们能从中选出一台来与之同步时钟。但是,即便有 3 台服务器,仍然不能满足高可用的需求,只要有任何一台坏掉,就会退回到第 2 种情况,机器们又戴上了两个表。

4 台?根据以上分析,似乎要 4 台 NTP 服务器才能满足高可用的需求,您同意吗?在平时,有四个候选时钟,机器们可以自己选一个来同步,如果坏掉一个,仍然有三个以供选择,不会出现平局。在部署 4 台 NTP 的时候,可以考虑放两台在本数据中心,另外两台放在临近的数据中心,两个数据中心的机器可以共享这 4 台 NTP 服务器,以进一步提高可靠性。

更多?根据以上分析,如果容忍坏两台 NTP 服务器,那么要部署 5 台才够用,以此类推。

 

其实,在部署多台 stratum 相同的 NTP 服务器的情况下,似乎没有什么办法能让所有的机器都跟其中一台 NTP 服务器同步时间,各台机器有自己的选择,会造成 systematical 的时钟误差,在设计分布式系统的时候必须要充分考虑机器之间的时钟误差(以及可能的时钟跳变)。

 

NTP 服务器不同于一般的服务器,它有独特的部署要求,见:Brad Knowles 写的 Building scalable NTP server infrastructuresIt's about time ...

 

数据中心应该有自己的 stratum 1 NTP 服务器

Stratum 1 是最高等级的 NTP 服务器,它直接连到参考时钟(refclock),能够独立报时。

受益于 GPS 模块的普及(淘宝上一百块以内),stratum 1 NTP 服务器可以低成本 DIY,只要设法把 GPS 模块的 pulse per second 信号接到 ntpd 就行。传统做法是通过串口的 DCD 信号(不过可能抖动 jitter 比较大),如果主板上有 GPIO ,可以有更精确的手段,见 A home-built NTP appliance。我准备在家装个 stratum 1 NTP 来玩。

另外,为了提高精度与稳定度,可以用 GPS 驯服钟(简单的可以用恒温晶振+锁相环 DIY),这比直接使用廉价 GPS 模块更好(当然,在其他各项条件足够好的情况下才能看出区别)。

数据中心部署 stratum 1 NTP 的难点恐怕不在 NTP 服务器本身,而是找能看见足够的天空的地方装 GPS 天线,再专门为之布线,让 GPS 模块能正常工作。在家玩就简单得多,把 GPS 模块的天线贴到窗台上就行。

 

思考:如何监控 stratum 1 NTP 服务器是否工作正常呢?看一个表准不准,得用比它更准的时钟源,那么如何判断 stratum 1 的 NTP 服务器的时钟是否精确呢?有没有比它更准的时钟?在数据中心放原子钟吗?其实民用原子钟也不贵,几千块钱(二手 FE-5680A 铷钟在淘宝卖 100 块左右),体积跟移动硬盘差不多大。

参考资源链接:[无代码设置Windows NTP时间服务器及客户端教程](https://wenku.youkuaiyun.com/doc/647ae6c8543f8444881ec78d?utm_source=wenku_answer2doc_content) 在Windows系统中配置NTP服务器及客户端,可以通过修改系统注册表和配置W32Time服务来实现。首先,确保你了解了NTP服务器的作用以及如何通过NTP协议进行时间同步。接下来,按照以下步骤进行操作: 1. 配置NTP服务器: - 打开注册表编辑器,定位到 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters`。 - 找到“Type”键,并将其数值数据修改为“NTP”,确保系统通过NTP协议同步时间。 - 在 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer` 中,设置“Enabled”为1,启用NTP服务器功能。 - 在 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config` 中,将“AnnounceFlags”设置为5,使主机作为可靠时间源,或保持默认值使用外部时间服务器。 2. 确保设置生效: - 以管理员权限打开命令提示符,运行命令`net stop w32time`停止服务,然后运行`net start w32time`重新启动服务。 - 重启计算机确保所有更改生效。 3. 配置NTP客户端: - 在 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient` 中,设置“enable”为1以启用客户端同步。 - 设置“SpecialPollInterval”为43200秒,这是客户端更新时间的推荐间隔。 4. 更改客户端默认NTP服务器: - 打开“控制面板” > “日期和时间” > “Internet时间”选项卡。 - 更改服务器地址为你的NTP服务器地址。 这些步骤将帮助你在Windows系统中建立一个NTP服务器,并确保客户端能够准确地从该服务器同步时间。为了更深入地理解和掌握这些操作,推荐阅读《无代码设置Windows NTP时间服务器及客户端教程》,这份资料提供了详细的教程和完整的配置流程,非常适合初学者和希望进一步优化时间同步设置的专业用户。 参考资源链接:[无代码设置Windows NTP时间服务器及客户端教程](https://wenku.youkuaiyun.com/doc/647ae6c8543f8444881ec78d?utm_source=wenku_answer2doc_content)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值