NTP 时间同步完整指南

NTP 时间同步完整指南

一、基本概念

什么是 NTP 服务器?

NTP(Network Time Protocol,网络时间协议)服务器是提供标准时间参考的服务器,其他设备通过它来校准自己的系统时间。整个时间体系的根源是原子钟(铯原子钟/氢原子钟),精度达到每 3000 万年误差不超过 1 秒。


二、全球 NTP 层级架构

全球 NTP 是一个树状分层结构(Stratum 层),并非由几台服务器包揽全球:

原子钟 / GPS
     │
  Stratum 0   ← 硬件时间源(原子钟、GPS接收器),不直接提供网络服务
     │
  Stratum 1   ← 直接连接原子钟的服务器(全球约数百台)
     │
  Stratum 2   ← 从 Stratum 1 同步(全球数千台,如 pool.ntp.org)
     │
  Stratum 3   ← 从 Stratum 2 同步(企业/机构内部服务器)
     │
  Stratum 4+  ← 普通客户端、内网服务器

常见公共 NTP 服务器

服务地址维护方
NTP Poolpool.ntp.org / cn.pool.ntp.org全球志愿者
Googletime.google.comGoogle
Cloudflaretime.cloudflare.comCloudflare
阿里云ntp.aliyun.com阿里云
腾讯云ntp.tencent.com腾讯云
国家授时中心ntp.ntsc.ac.cn中国科学院

全球共有数万台 NTP 服务器,pool.ntp.org 本身就是由数千台服务器组成的集群。


三、故障排查:NTP 无法 ping 通但 chronyd 正常运行

[root@localhost ~]# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since 五 2026-06-12 14:42:46 CST; 16s ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 9971 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 9968 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 9970 (chronyd)
    Tasks: 1
   CGroup: /system.slice/system-hostos.slice/chronyd.service
           └─9970 /usr/sbin/chronyd

612 14:42:46 localhost.localdomain systemd[1]: Starting NTP client/server...
612 14:42:46 localhost.localdomain chronyd[9970]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
612 14:42:46 localhost.localdomain chronyd[9970]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
612 14:42:46 localhost.localdomain systemd[1]: Started NTP client/server.
[root@localhost ~]# date 此时时间还是对不上。
2026年 06月 12日 星期五 14:43:06 CST 

[root@localhost ~]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.15.140                0   7     0     -     +0ns[   +0ns] +/-    0ns

如果前面是 ^*,表示 当前正在使用这个时间源同步。

[root@localhost ~]# chronyc tracking
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000000 seconds fast of NTP time
Last offset     : +0.000000000 seconds
RMS offset      : 0.000000000 seconds
Frequency       : 0.000 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Not synchronised
[root@localhost ~]# timedatectl
      Local time: 五 2026-06-12 14:46:02 CST
  Universal time: 五 2026-06-12 06:46:02 UTC
        RTC time: 五 2026-06-12 06:46:02
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

NTP服务器ping不通,chronyd 服务正常运行

在服务器没有外网的时候

手动修改时间

timedatectl set-ntp false
systemctl stop chronyd
timedatectl set-time "2026-06-12 15:00:00"
hwclock -w

关键结论

ping 使用 ICMP 协议,而 NTP 使用 UDP 123 端口,两者互相独立:

情况说明
ping 不通,但 NTP 正常防火墙屏蔽 ICMP 但放行 UDP 123,chronyd 可正常工作
ping 不通,NTP 也不通网络完全隔离或 UDP 123 被封,chronyd 无法同步

时间是否会漂移?

  • 若 chronyd 实际在同步:时间不会漂移,会自动校正。
  • 若 chronyd 无法连接 NTP:硬件时钟(RTC)存在固有漂移,普通服务器每天 ±1~30 秒,虚拟机漂移更大,手动修改只是临时方案,时间仍会持续偏移。

排查命令

# 查看同步状态
chronyc tracking

# 查看 NTP 源是否可达(* 表示当前使用)
chronyc sources -v

# 测试 NTP 端口连通性(绕过 ping)
nc -uvz <NTP服务器IP> 123

# 查看 chrony 日志
journalctl -u chronyd --since "1 hour ago"

chronyc tracking 关键字段说明

字段含义
Reference ID显示实际 NTP 服务器 IP 则表示正在同步
System time与参考时间的偏差
Last offset上次校正量
RMS offset长期偏移均值
Leap statusNormal 为正常

四、内网多台服务器时间同步方案

架构设计

内网通常无法访问公网 NTP,正确做法是:指定一台内网服务器作为 NTP Master,其余服务器向它同步。

公网 NTP(如 ntp.aliyun.com)
         │
    ┌────▼──────┐
    │ 内网 NTP  │  ← 一台服务器兼任(Stratum 3)
    │  Master   │     从公网同步 + 向内网提供服务
    └────┬──────┘
         │
    ┌────┴──────────────┐
    ▼                   ▼
内网服务器 A         内网服务器 B    ← 所有节点向 Master 同步
(Stratum 4)          (Stratum 4)

若内网完全与公网隔离,Master 使用 local stratum 本地时钟作为源,精度较低但可保证内网时间一致。


配置步骤(基于 chrony)

第一步:内网 NTP Master 配置
# 编辑 /etc/chrony.conf

# 有公网时,从公网同步
server ntp.aliyun.com iburst
server ntp.tencent.com iburst

# 完全离线时,使用本地时钟作为源
local stratum 3

# 允许内网网段同步(按实际修改)
allow 192.168.1.0/24

makestep 1.0 3
# 重启并设置开机自启
systemctl restart chronyd
systemctl enable chronyd

# 开放防火墙
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
第二步:其他内网服务器配置
# 编辑 /etc/chrony.conf

# 只指向内网 NTP Master
server 192.168.1.100 iburst

makestep 1.0 3
rtcsync
systemctl restart chronyd
第三步:验证同步
# 查看时间源,应看到内网 Master IP,状态为 *
chronyc sources -v

# 查看偏差,正常应在毫秒级
chronyc tracking

五、总结

问题结论
NTP 服务器是什么提供标准时间参考的服务器,根源是原子钟
全球就几台吗不是,全球有数万台,分层级分布
ping 不通时间会漂移吗取决于 UDP 123 是否通,需用 chronyc sources 确认
内网同步方案指定一台做内网 NTP Master,其余向它同步
完全离线怎么办Master 使用 local stratum,保证内网时间一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值