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

本文探讨了在分布式系统中部署NTP服务器的数量与配置问题,以确保时钟同步的高可用性和准确性,并讨论了stratum1 NTP服务器的部署方案。

陈硕 (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 块左右),体积跟移动硬盘差不多大。

### 企业网络中多级NTP服务器架构的部署方案 在企业网络环境中,为了确保时间同步的可靠性和稳定性,通常会采用多级 NTP 服务器架构。以下是关于如何设计和部署多级 NTP 服务器架构的详细说明: #### 1. 多级 NTP 架构概述 多级 NTP 架构通过分层的方式实现时间同步,顶层服务器直接连接到高精度时间源(如 Stratum 1),而下层服务器则从上层服务器同步时间[^1]。这种架构可以减少对顶级时间源的压力,并提高系统的容错能力。 #### 2. 架构设计要点 - **Stratum 1 服务器**:作为顶层时间服务器,直接连接到高精度时间源(如 GPS 或原子钟)。这些服务器提供最精确的时间基准。 - **Stratum 2 服务器**:从 Stratum 1 服务器同步时间,并为下层设备提供时间服务。这些服务器通常部署在数据中心的核心区域。 - **Stratum 3 服务器**:从 Stratum 2 服务器同步时间,服务于更广泛的终端设备或分支机构。 - **客户端设备**:包括服务器、路由器、交换机等,从最近的 NTP 服务器同步时间。 #### 3. 配置示例 以下是一个典型的多级 NTP 架构配置示例: ##### (1)Stratum 1 服务器配置 假设 Stratum 1 服务器使用阿里云时间服务器作为上游时间源: ```bash server 203.107.6.88 iburst # 阿里云时间服务器[^1] restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 ``` ##### (2)Stratum 2 服务器配置 Stratum 2 服务器从 Stratum 1 服务器同步时间,并为本地网络提供时间服务: ```bash server 172.16.1.21 iburst # Stratum 1 服务器的 IP 地址 restrict default kod nomodify notrap nopeer noquery restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap ``` ##### (3)Stratum 3 服务器配置 Stratum 3 服务器从 Stratum 2 服务器同步时间,并服务于终端设备: ```bash server 192.168.1.1 iburst # Stratum 2 服务器的 IP 地址 restrict default kod nomodify notrap nopeer noquery restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap ``` #### 4. 网络平面设计 在复杂的网络环境中,需要明确各个网络平面的功能,以确保时间同步的高效性和安全性。例如,在云计算场景中,可以参考以下网络平面设计[^2]: - **Cascading_External_API 平面**:用于 FC 管理网络。 - **Cascading_External_OM 平面**:用于向下对接资源的网络。 - **Cascading_Internal_Base 平面**:用于级联层组件通信。 - **Cascaded_Internal_Base 平面**:用于被级联层组件通信。 - **Cascaded_External_OM 平面**:用于 BMS 裸金属被级联层互通。 #### 5. 安全性与可靠性 为了提高多级 NTP 架构的安全性和可靠性,可以采取以下措施: - **冗余配置**:为每一级服务器配置多个时间源,避免单点故障。 - **访问控制**:通过 `restrict` 命令限制对 NTP 服务器的访问,防止未经授权的修改。 - **监控与日志**:定期检查 NTP 日志,确保时间同步正常运行[^3]。 #### 6. 性能优化 在大规模数据中心中,可以通过以下方法优化 NTP 服务器的性能和可靠性: - **负载均衡**:在每一级部署多个 NTP 服务器,并通过 DNS 轮询实现负载均衡。 - **缓存机制**:启用本地时间缓存,减少对外部时间源的依赖。 - **带宽管理**:确保 NTP 流量不会占用过多的网络带宽,影响其他关键业务。 ```python # 示例:Python 脚本检查 NTP 同步状态 import os os.system("ntpq -p") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值