时间同步体系:NTP、Chrony与PTP实战

时间同步看似基础,却直接影响证书、Kerberos、数据库事务、日志关联、集群选举、备份、审计和故障复盘。服务器显示的时间“差不多正确”并不够,生产系统需要知道时间来源、偏差、稳定性、故障时的保持能力,以及哪些业务需要毫秒或微秒级精度。

本文介绍NTP、Chrony、NTS和PTP的设计与排障。示例以Linux为主,网络设备、Windows域和虚拟化平台应结合各自官方文档。修改生产时间前必须评估时间跳变对数据库、集群和业务程序的影响。

一、先区分时间概念

概念 含义 常见误区
UTC 全球统一时间基准 与本地时区混淆
时区 UTC到本地显示时间的转换规则 改时区当成校时
系统时钟 内核运行时使用的时间 只看硬件时钟
RTC 主板硬件时钟 多系统环境设置不一致
单调时钟 只向前推进,用于持续时间计算 用墙上时钟计算超时
偏差Offset 本机与参考时间的差值 只看是否已连接
频率误差Drift 本机时钟走快或走慢的速度 忽略长期稳定性

系统日志最好统一记录UTC并附带时区信息,展示层再转换为本地时间。跨系统排障时必须确认时间戳格式、时区和精度。

二、时间错误会造成什么

  • TLS证书被判断为尚未生效或已经过期;
  • Kerberos因时钟偏差拒绝认证;
  • 分布式数据库和消息系统出现排序或租约异常;
  • 日志时间线颠倒,无法判断因果;
  • 备份、定时任务和计费窗口提前或延后;
  • 监控数据落入错误时间桶;
  • JWT、Cookie和临时凭据过早失效;
  • 集群节点因租约和心跳判断错误产生故障。

时间同步应视为基础服务,而不是安装系统后一次性配置。

三、设计企业NTP层级

推荐避免所有终端直接访问公网时间源:

外部可信时间源 / GNSS / 上级时间中心
              ↓
      企业一级时间服务器(至少2台)
              ↓
      园区或数据中心二级服务器
              ↓
  Linux、Windows、网络设备、虚拟化与业务系统

设计原则:

  • 每层至少配置多个独立来源;
  • 时间服务器分布在不同主机和故障域;
  • 防火墙只开放需要的UDP 123及管理路径;
  • 客户端配置多个来源,但避免全部来源实际指向同一上游;
  • 内外网隔离环境有明确的保持与恢复策略;
  • 监控每个来源,而不只是进程存活。

Stratum表示距离参考时钟的层级,不等于质量评分。一个网络稳定的Stratum 3来源可能比高延迟、频繁抖动的Stratum 1来源更适合当前客户端。

四、Chrony基础配置

Ubuntu常见配置文件为/etc/chrony/chrony.conf,RHEL系通常为/etc/chrony.conf。示例:

server ntp1.example.net iburst
server ntp2.example.net iburst
server ntp3.example.net iburst

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
log tracking measurements statistics

关键项:

  • iburst:启动时快速采样;
  • driftfile:保存本机频率误差估计;
  • makestep 1.0 3:仅在启动初期且偏差超过阈值时允许跳变;
  • rtcsync:让内核周期性同步RTC;
  • log:记录跟踪与测量数据,注意日志轮转。

不要在运行中的数据库服务器上随意执行强制时间跳变。默认的渐进校正通常更安全,是否允许Step应按业务特性决定。

五、把Chrony作为内网时间服务器

server upstream1.example.net iburst
server upstream2.example.net iburst

allow 10.20.0.0/16
allow 10.30.0.0/16
local stratum 10 orphan

allow应限制到内部网段,不要把服务器暴露为公网NTP服务。local模式适合隔离网络在失去上游时维持内部一致,但此时它不代表绝对时间仍然准确,监控必须标记上游失联状态。

生产配置还应考虑:

  • 管理命令只允许本地或管理网;
  • 上游与客户端接口分离;
  • 防火墙、QoS和网络路径稳定;
  • 日志、指标和配置由自动化统一管理;
  • 多台服务器的上游组合不完全相同,避免共同故障。

六、常用验证命令

timedatectl
chronyc tracking
chronyc sources -v
chronyc sourcestats -v
chronyc activity

chronyc sources -v常见标记:

标记 含义
^* 当前选中的NTP源
^+ 可接受并参与组合的源
^- 可接受但当前未用于组合
^? 不可达或尚无足够测量
^x 被判断为错误时间源
^~ 抖动过大

Reach通常以八进制位图显示最近探测是否成功,长期为0意味着没有有效响应;377表示最近多个探测都成功,但仍需结合偏差和误差范围。

chronyc tracking重点观察:参考源、Stratum、System time、Last offset、RMS offset、Frequency、Root delay、Root dispersion和Leap status。

七、时间校正:Step与Slew

  • Step:直接跳到正确时间,收敛快,但时间可能向前或向后跳;
  • Slew:轻微调整时钟频率逐步追赶,业务更平滑,但大偏差恢复较慢。

强制校正示例:

sudo chronyc makestep

该操作可能影响依赖时间单调性的程序,只应在确认业务允许、完成摘流或启动初期执行。对大偏差主机,更安全的流程通常是:隔离业务、保存日志、确认时间源、停止敏感服务、校时、验证、再恢复服务。

八、虚拟机和容器

虚拟机可能同时受到宿主机工具和NTP客户端校时,两个控制源互相竞争会产生抖动。应按虚拟化平台建议明确:

  • 客户机由Chrony同步,还是由宿主机注入时间;
  • 暂停、快照恢复和热迁移后的时间恢复方式;
  • 宿主机自身的时间源与监控;
  • 是否支持硬件时间戳或虚拟PTP设备。

容器通常共享宿主机内核时钟,不应在普通容器中单独运行NTP并授予修改系统时间的能力。应监控节点时间,并确保日志中记录节点和容器时区。

九、Windows域时间

Active Directory依赖Kerberos,对时间偏差敏感。域内通常遵循层级:

可靠外部时间源
  ↓
林根域PDC Emulator
  ↓
其他域控制器
  ↓
域成员服务器与终端

不要让所有域成员各自直接同步不同公网源。应检查PDC角色、上游配置、Windows Time服务状态、偏差和事件日志。虚拟域控制器还要避免宿主机时间同步与域层级冲突。

十、网络设备与其他基础设施

交换机、防火墙、存储、UPS、虚拟化管理平台和带外管理设备也应同步时间,否则网络日志、认证和安全事件无法关联。配置时记录:

  • 支持NTP还是SNTP;
  • 最多可配置多少来源;
  • 使用管理VRF还是业务网络;
  • 时区和夏令时规则;
  • 是否支持NTP认证或NTS;
  • 日志是否使用UTC、是否含年份和时区。

设备只能配置单一时间源时,应通过高可用地址或本地冗余设计降低单点风险。

十一、NTS保护NTP

传统NTP本身缺乏现代加密身份验证。Network Time Security(NTS)通过TLS建立密钥,再保护NTP报文。使用NTS时应考虑:

  • Chrony版本和编译功能是否支持;
  • 时间服务器证书和私钥生命周期;
  • NTS-KE使用的TCP端口与NTP UDP端口;
  • 初始时间严重错误时TLS验证是否失败;
  • 内部CA信任和证书续期;
  • NTS不可用时是否允许退回未认证来源。

NTS能降低伪造时间源风险,但不能解决上游本身错误、网络拥塞和客户端配置错误。

十二、PTP适用场景

Precision Time Protocol适合电信、金融、工业控制、音视频、测量或需要亚毫秒甚至微秒精度的场景。PTP通常依赖:

  • Grandmaster时钟;
  • 支持PTP的网卡与PHC硬件时钟;
  • Boundary Clock或Transparent Clock交换网络;
  • ptp4l同步PHC;
  • phc2sys在PHC与系统时钟之间同步;
  • 正确的Profile、Domain、优先级和时间戳模式。

软件时间戳无法达到硬件时间戳的稳定精度。部署前要确认网卡、驱动、交换机和内核均支持所需模式。

十三、PTP基础检查

查看网卡时间戳能力:

ethtool -T eth0
ls -l /dev/ptp*

典型进程关系:

Grandmaster
    ↓ PTP报文
网卡PHC ← ptp4l
    ↓
系统时钟 ← phc2sys

不要在同一个系统时钟上让Chrony和phc2sys同时以互不协调的方式主动校正。应明确谁是系统时钟的主控制器,并设计失去PTP时是否切换到NTP保持。

十四、监控与告警

建议监控:

  • 当前参考源和来源数量;
  • 系统偏差、最后偏差、RMS偏差;
  • Root delay、Root dispersion和Skew;
  • Reach、最近接收时间和来源状态;
  • Leap status是否正常;
  • Chrony/PTP进程和UDP 123可达性;
  • 上游全部失联时长;
  • PTP Master变化、offset、path delay和端口状态;
  • 证书、Kerberos或集群异常是否与时间偏差相关。

阈值按业务设定。普通Web服务器可能允许几十毫秒,数据库、认证、音视频或交易系统可能要求更严格。不要对所有资产使用同一偏差阈值。

十五、常见故障排查

所有来源显示^?

检查DNS、路由、防火墙UDP 123、服务器ACL、NAT、上游服务和系统日志。可用抓包确认请求和响应:

sudo tcpdump -ni any udp port 123

有来源但偏差长期很大

检查本机负载、虚拟机暂停、频率误差、来源抖动、双重校时程序和makestep策略。不要只反复重启Chrony。

重启后时间错误

检查RTC、时区、rtcsync、电池状态、启动时网络和NTP服务启动顺序。

内网所有主机时间一致但都不正确

可能是本地时间服务器失去上游后进入Local模式。检查一级服务器真实来源、Leap status和外部对时结果。

PTP偏差不稳定

检查是否使用硬件时间戳、交换网络是否支持PTP、Grandmaster切换、Domain/Profile、非对称路径、网卡队列和CPU调度延迟。

十六、时间故障处置流程

  1. 记录当前时间、来源、偏差、时区和最近变更;
  2. 判断是单机、同一网段、同一虚拟化平台还是全局问题;
  3. 检查业务是否已受证书、认证、数据库或日志影响;
  4. 对大偏差节点先摘流或隔离;
  5. 恢复可信时间源和网络路径;
  6. 根据业务选择Slew或受控Step;
  7. 验证进程、证书、认证、集群和日志时间线;
  8. 检查修复期间产生的数据与审计记录;
  9. 更新监控、冗余和变更流程。

事故期间手工改时间前,应先保存Chrony状态和日志证据,否则会丢失根因线索。

十七、上线检查清单

  • [ ] UTC、时区、系统时钟和RTC策略明确;
  • [ ] 客户端至少有多个独立时间源;
  • [ ] 企业时间服务器跨主机和故障域部署;
  • [ ] NTP服务只对授权网段开放;
  • [ ] Chrony来源、偏差、Reach和Leap状态纳入监控;
  • [ ] 虚拟机不存在宿主与客户机双重校时冲突;
  • [ ] Windows域、网络设备和带外设备纳入统一时间体系;
  • [ ] 隔离网络失去上游时的行为和告警已验证;
  • [ ] 时间跳变前有业务评估、摘流与恢复步骤;
  • [ ] PTP场景已确认网卡、驱动、交换机和时间戳能力;
  • [ ] 时间故障Runbook包含证据保留和业务验证。

十八、参考资料

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-20 19:20:14

results matching ""

    No results matching ""