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 Pool | pool.ntp.org / cn.pool.ntp.org | 全球志愿者 |
time.google.com | ||
| Cloudflare | time.cloudflare.com | Cloudflare |
| 阿里云 | 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
6月 12 14:42:46 localhost.localdomain systemd[1]: Starting NTP client/server...
6月 12 14:42:46 localhost.localdomain chronyd[9970]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
6月 12 14:42:46 localhost.localdomain chronyd[9970]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
6月 12 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 status | Normal 为正常 |
四、内网多台服务器时间同步方案
架构设计
内网通常无法访问公网 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,保证内网时间一致 |
6072

被折叠的 条评论
为什么被折叠?



