Linux 服务器时间同步实战:chrony 配置、NTP 原理与时间漂移排错


<!DOCTYPE html>

Linux 服务器时间同步实战:chrony 配置、NTP 原理与时间漂移排错

Linux 服务器时间同步实战:chrony 配置、NTP 原理与时间漂移排错

日志时间对不上排错半天、数据库事务时间戳错乱、SSL 证书突然"未生效"、crontab 任务提前一小时执行……这些诡异问题的元凶往往只有一个:服务器时间不准。现代 Linux 发行版(RHEL 8+ / CentOS 8+ / Ubuntu 18.04+ / Debian 10+)默认用 chrony 取代了老牌的 ntpd 做时间同步。本文从 NTP 原理讲起,带你完成 chrony 的安装、配置、验证,并给出时间漂移的完整排错方案。

一、为什么服务器需要精确时间

时间一旦漂移,破坏是连锁性的:

  • 日志错乱:多台机器日志时间不一致,故障定位无从下手。
  • HTTPS 证书:证书有效期校验依赖本地时间,时间超前/滞后会导致"证书尚未生效/已过期"。
  • 数据库一致性:MySQL/PostgreSQL 的时间戳、主从复制的 binlog 位置判断都依赖时钟。
  • 分布式系统:Redis 过期键、消息队列延时、分布式锁的租约全部依赖时间。
  • 任务调度:crontab、systemd timer 按本地时间触发,时区或时钟错误会整体错位。

因此,保证服务器时间同步是运维的基本功,也是所有排错的起点。

二、NTP 原理与 chrony 的优势

NTP(Network Time Protocol)通过分层体系同步时间:Stratum 0 是原子钟/GPS 等基准源,Stratum 1 直连基准源,Stratum 2 从 Stratum 1 同步……层级越高精度越低。客户端向多个服务器发起请求,采用时钟过滤算法剔除异常样本,并持续微调本地时钟。

相比 ntpd,chrony 有两个显著优势:

  • 同步更快:启动后几十秒内即可完成初次同步,ntpd 可能需要几分钟甚至更久。
  • 适应不稳定网络:使用状态机平滑调整频率,即使网络抖动、机器频繁休眠也能保持精度,特别适合 VPS 和笔记本。

三、安装与初始配置

CentOS / RHEL / Rocky 系:

yum install -y chrony
systemctl enable --now chronyd
systemctl status chronyd

Debian / Ubuntu 系(多数已预装):

apt update
apt install -y chrony
systemctl enable --now chrony
systemctl status chrony

验证是否已在同步:

chronyc tracking
Reference ID    : 3D74A97A (ntp.aliyun.com)
Stratum         : 2
Ref time (UTC)  : Sun Oct 19 03:12:45 2026
System time     : 0.000123 seconds slow of NTP time
Last offset     : +0.000456 seconds
RMS offset      : 0.003192 seconds
Frequency       : 2.114 ppm slow
...

看到 System time 偏移在毫秒级,说明同步正常。

四、chrony.conf 配置详解

主配置文件为 /etc/chrony.conf(Debian/Ubuntu 为 /etc/chrony/chrony.conf)。核心配置项:

# 时间服务器:国内 VPS 建议用阿里云 / 腾讯云 NTP,或官方 NTP Pool
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp.tencent.com iburst
# pool 指令可一次指定多个服务器,系统自动选优
# pool 2.ntp.pool.org iburst

# 允许本机作为时间服务器,为内网其他机器提供同步(可选项)
allow 192.168.1.0/24

# 本地时钟作为最后备选(所有服务器都不可达时兜底)
local stratum 10

# 让系统时间自动跟随硬件时钟
rtcsync

# 日志与统计数据
logdir /var/log/chrony
makestep 1 3

关键参数说明:

  • iburst:首次启动时快速连续发送多个请求,加速初次同步。
  • makestep 1 3:如果时钟偏移超过 1 秒,且前 3 次同步都未收敛,直接大步调整(step)而不是缓慢微调,避免时间长期不准。
  • rtcsync:把系统时间写回硬件时钟,防止重启后时间回退。

五、时区与时区数据库

同步只解决"准",时区决定"显示成几点"。查看与设置时区:

# 查看当前时区
timedatectl
# 列出可用时区
timedatectl list-timezones | grep -i shanghai
# 设置为上海时区
timedatectl set-timezone Asia/Shanghai
# 确认 NTP 同步开关
timedatectl set-ntp true
# 设置后验证
date
# Sun Oct 19 11:12:45 CST 2026   (CST = 中国标准时间)

注意:如果程序使用 UTC 存储、本地时间展示(数据库和日志常如此),时区设置不当时很容易出现"差 8 小时"的经典问题,排查时先分清是"时间不准"还是"时区不对"。

六、同步状态验证与监控

chrony 提供了功能强大的客户端命令 chronyc:

# 查看所有时间源的状态
chronyc sources -v
#   .-- Number of sample points in measurement set.
#   /    .-- Number of time sources with valid data.
#  (S)  (?)  (S)  (?)  ...
#  ^* ntp.aliyun.com       2/2  5   1   4  +197us[ +235us] +/-  8.9ms

# 查看更详细的追踪信息
chronyc sourcestats

# 手动触发一次强制同步
chronyc makestep

# 查看是否使用了本地时钟(异常信号)
chronyc tracking | grep -i stratum

sources 输出中每行首字符含义:^* 表示当前选中的同步源(正常),^- 表示可用但未被选中,^? 表示不可达(异常)。如果所有源都是 ^?,说明网络到 NTP 服务器不通。

七、常见排错手册

7.1 所有时间源不可达(sources 全是 ^?)

# 测试 NTP 端口(123/UDP)连通性
nc -uvz ntp.aliyun.com 123
# 抓包看是否有响应
tcpdump -i eth0 udp port 123 -n -c 10
  • 云安全组 / 防火墙需放行 UDP 123 出方向(阿里云默认放行,某些厂商默认禁止 UDP)。
  • VPS 时间偏差过大(超过 10 分钟)时,NTP 客户端会拒绝直接同步,先手动校正:date -s "2026-10-19 11:00:00" 或 chronyc makestep。
  • 检查 DNS 解析:dig ntp.aliyun.com。

7.2 时间同步了但每次重启都回退

这是硬件时钟(RTC)漂移或与系统时间冲突。确认 rtcsync 已开启,并检查:

# 手动把系统时间写入硬件时钟
hwclock --systohc
# 查看硬件时钟时间
hwclock --show

7.3 偏移一直降不下来(几百毫秒抖动)

常见原因是时间源太差或网络抖动大。换用就近的优质 NTP 源(阿里云/腾讯云/华为云),或增加服务器数量让算法取优。也可以把 pollinterval 调大减少频繁采样带来的噪声。

7.4 时间准了但业务日志还是"差8小时"

这是时区问题不是同步问题。确认 timedatectl 时区、php.ini 的 date.timezone、JVM 的 -Duser.timezone、容器 TZ 环境变量是否一致。容器场景别忘了挂载 /etc/localtime 或设置 TZ 环境变量。

八、内网 NTP 服务器:多台机器统一时钟

内网有多台机器时,最好的实践是让一台机器作为内网 NTP 服务器,其余机器从它同步,避免全部直连公网:

# 服务端 /etc/chrony.conf
server ntp.aliyun.com iburst
allow 192.168.0.0/16     # 允许内网段访问
local stratum 10
# 客户端 /etc/chrony.conf 只需指向内网服务器
server 192.168.1.10 iburst
makestep 1 3
# 两端都重启 chrony 并验证
systemctl restart chronyd && chronyc sources -v

总结

时间同步是运维排错的"第一性原理"——时间不对,所有日志、证书、任务、分布式组件都会给你错误信号。掌握 chrony 的核心配置(server/iburst/makestep/rtcsync)、熟练使用 chronyc sources -v 判断同步状态、分清"时间不准"与"时区不对",就能在 90% 的时间类故障中一击命中。建议把 chronyc tracking 的偏移量加入监控告警,偏移超过 500ms 即告警。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

rclone 云备份实战:对象存储挂载、增量同步与自动化定时备份

frp 内网穿透实战:服务端配置、客户端连接与 HTTPS 域名穿透全指南

评 论
更换验证码