Chrony NTP 时间同步服务器部署教程:替代 ntpd,搭建内网 NTP 服务
2026/6/13 22:16:41 网站建设 项目流程

Chrony NTP 时间同步服务器部署教程:替代 ntpd,搭建内网 NTP 服务

准确的系统时间是分布式系统、日志审计、SSL 证书验证、数据库事务等众多场景的基础。传统的 ntpd 已有数十年历史,而 Chrony 是其现代替代品,由 Red Hat 主导开发,在精度、稳定性和资源消耗方面均有显著优势。Chrony 能够更好地处理网络延迟抖动,在间歇性网络连接下也能维持良好的时钟精度,是 RHEL 7+、Ubuntu 20.04+ 等主流发行版的默认 NTP 实现。

对于拥有多台服务器的内网环境,搭建私有 NTP 服务器是最佳实践。内网 NTP 服务器从上游公共 NTP 服务器同步时间,再为局域网内所有节点提供时间服务,既减少了对外部网络的依赖,也能将所有内网节点的时钟偏差控制在微秒级别。这对于分布式数据库(如 CockroachDB、TiDB)、Kafka 集群和 Kubernetes 等对时间敏感的系统尤为重要。

本教程将详细介绍 Chrony 的安装配置流程,包括作为 NTP 客户端使用、搭建内网 NTP 服务端,以及使用 chronyc 命令进行时钟精度监控和故障排查。


环境要求

Chrony 对硬件要求极低,任何一台 Linux 服务器都可以胜任 NTP 服务端角色。

推荐使用雨云服务器 rainyun-com,注册填优惠码2026off领 5 折优惠券。1 核 2GB 机型完全满足 Chrony NTP 服务的运行需求,Chrony 进程的内存占用通常不超过 10MB,CPU 使用率接近 0%。搭配稳定的网络环境,可为数十台内网服务器提供高精度时间同步服务。操作系统推荐 Ubuntu 22.04 LTS 或 CentOS Stream 9。


安装准备工作

停止并禁用旧版 ntpd(如有)

sudosystemctl stop ntp2>/dev/nullsudosystemctl disable ntp2>/dev/nullsudoaptremove-yntp ntpdate2>/dev/null

同时禁用 systemd-timesyncd(避免冲突):

sudosystemctl stop systemd-timesyncdsudosystemctl disable systemd-timesyncd

安装 Chrony

Ubuntu / Debian:

sudoaptupdatesudoaptinstall-ychrony

CentOS / RHEL / Rocky Linux:

sudodnfinstall-ychrony

安装完成后 Chrony 会自动启动:

sudosystemctlenable--nowchronydsudosystemctl status chronyd

确认时区设置

timedatectl status# 如需修改时区:sudotimedatectl set-timezone Asia/Shanghai

详细配置

配置文件位置

  • Ubuntu/Debian:/etc/chrony/chrony.conf
  • CentOS/RHEL:/etc/chrony.conf

客户端模式配置

适用于需要从上游 NTP 服务器同步时间的普通节点:

sudonano/etc/chrony/chrony.conf
# 上游 NTP 服务器(使用 iburst 加速初始同步) server ntp.aliyun.com iburst prefer server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server cn.pool.ntp.org iburst # 允许的时钟偏差(秒),超出时强制步进同步 makestep 1.0 3 # 硬件时钟(RTC)同步 rtcsync # 记录时钟漂移 driftfile /var/lib/chrony/drift # 日志目录 logdir /var/log/chrony # 记录测量统计、追踪和 rtc 信息 log measurements statistics tracking

搭建内网 NTP 服务端

将以下配置部署在专用 NTP 服务器上,同时向上游同步并对内网提供服务:

# 上游时间源(至少配置 3 个以提高可靠性) server ntp.aliyun.com iburst prefer server ntp1.aliyun.com iburst server time1.cloud.tencent.com iburst server cn.pool.ntp.org iburst # 本地时钟作为后备(stratum 10,仅在无法连接上游时使用) local stratum 10 # 允许内网网段访问(按实际网段修改) allow 192.168.0.0/16 allow 10.0.0.0/8 allow 172.16.0.0/12 # 其他配置 makestep 1.0 3 rtcsync driftfile /var/lib/chrony/drift logdir /var/log/chrony log measurements statistics tracking rtc # 硬件时间戳(如网卡支持,可大幅提升精度) # hwtimestamp eth0

重启服务使配置生效:

sudosystemctl restart chronyd

内网客户端配置

将内网其他服务器的 NTP 源指向内网 NTP 服务器(假设其 IP 为 192.168.1.10):

# 优先使用内网 NTP 服务器 server 192.168.1.10 iburst prefer # 保留外部时间源作为后备 server ntp.aliyun.com iburst makestep 1.0 3 rtcsync driftfile /var/lib/chrony/drift logdir /var/log/chrony

防火墙配置

NTP 使用 UDP 123 端口:

# UFWsudoufw allow123/udp# firewalldsudofirewall-cmd--permanent--add-service=ntpsudofirewall-cmd--reload# iptablessudoiptables-AINPUT-pudp--dport123-jACCEPT

进阶用法

chronyc 命令行工具

chronyc 是 Chrony 的交互式管理工具,用于实时监控和管理时间同步状态。

查看时间源状态:

chronyc sources-v

输出示例:

.-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current best, '+' = combined, '-' = not used. |/ .- Log2(Polling interval) :: Reach :: Last Rx || / \ / \ MS Name/IP Refid St Poll Reach LastRx Last sample ============================================================================= ^* ntp.aliyun.com .ACTL. 1 6 377 22 -82us[ -88us] +/- 1848us ^+ ntp1.aliyun.com .ACTL. 1 7 377 21 +234us[ +231us] +/- 3412us

*表示当前使用的最佳时间源,+表示参与组合计算的源。

查看时钟跟踪信息:

chronyc tracking

输出示例:

Reference ID : 6BD7... (ntp.aliyun.com) Stratum : 2 Ref time (UTC) : Mon Jun 01 10:00:00 2026 System time : 0.000082341 seconds fast of NTP time Last offset : +0.000019234 seconds RMS offset : 0.000043210 seconds Frequency : 12.345 ppm slow Residual freq : +0.003 ppm Skew : 0.127 ppm Root delay : 0.001834 seconds Root dispersion : 0.000891 seconds Update interval : 64.2 seconds Leap status : Normal

强制立即同步:

sudochronyc makestep

查看 NTP 统计信息:

chronyc sourcestats-v

精度调优

调整轮询间隔:

# 最小和最大轮询间隔(单位:2^n 秒) server ntp.aliyun.com iburst minpoll 4 maxpoll 6 # 2^4=16秒 到 2^6=64秒 之间动态调整

提高精度的额外配置:

# 增加测量样本数,提高时钟校正精度 minsources 2 # 允许的最大时钟倾斜(ppm) maxdistance 1.5 # 拒绝 stratum 过高的时间源 maxdistance 0.1

监控脚本

编写一个简单的时钟偏差监控脚本:

#!/bin/bash# /usr/local/bin/check_chrony.shOFFSET=$(chronyc tracking|grep"System time"|awk'{print $4}')THRESHOLD=0.1# 100msif(($(echo "$OFFSET>$THRESHOLD"|bc-l)));thenecho"WARNING: NTP offset${OFFSET}s exceeds threshold${THRESHOLD}s"exit1fiecho"OK: NTP offset is${OFFSET}s"exit0

实战示例

搭建高可用双节点 NTP 集群

在两台服务器(192.168.1.10 和 192.168.1.11)上配置互为 peer:

# 两台服务器均添加以下配置 peer 192.168.1.10 iburst # 在 .11 上添加 peer 192.168.1.11 iburst # 在 .10 上添加 # 上游时间源 server ntp.aliyun.com iburst prefer server cn.pool.ntp.org iburst allow 192.168.0.0/16 local stratum 10

Kubernetes 集群时间同步最佳实践

在 K8s 环境中,确保所有节点时钟误差小于 1 秒(etcd 要求):

# 在所有 K8s 节点执行sudochronyc makestep chronyc tracking|grep"System time"# 验证偏差fornodein192.168.1.{1..10};doecho-n"$node: "ssh$node"chronyc tracking | grep 'System time'"done

常见问题

Q:chronyc sources 显示 “?” 状态,时间源无法连接

A:检查防火墙是否放开了 UDP 123 出站端口,以及 NTP 服务器域名能否正常解析。可用ntpdate -q ntp.aliyun.com测试连通性。

Q:系统时间突然跳变

A:这是makestep配置触发的强制步进同步,属于正常行为。若不希望时钟跳变,可将 makestep 中的允许次数改为 0(仅开机时允许跳步):makestep 1.0 -1(仅在偏差超过1秒时才允许步进)。

Q:内网客户端无法连接内网 NTP 服务器

A:确认服务端chrony.confallow指令包含了客户端所在网段,并检查服务端防火墙 UDP 123 端口是否开放。

Q:stratum 值为什么这么大?

A:stratum 表示距参考时钟的层数。公共 NTP 服务器通常是 stratum 1-2,内网 NTP 服务器将是 stratum 2-3,内网客户端则是 stratum 3-4。stratum 越小精度越高,但 stratum 16 以内均为有效同步状态。

Q:如何查看历史时钟偏差?

A:如果开启了 log 选项,日志文件保存在/var/log/chrony/目录下:

cat/var/log/chrony/statistics.log|tail-20

Chrony 以极低的资源占用提供了远超 ntpd 的时钟精度,是现代 Linux 环境时间同步的首选方案。无论是单台服务器的简单同步需求,还是数百节点集群的内网 NTP 基础设施,Chrony 都能胜任。如果你正在寻找一台稳定、低成本的服务器来部署内网 NTP 服务,推荐雨云服务器 rainyun-com1 核 2GB 机型,注册填优惠码2026off即可领取 5 折优惠券,轻松搭建属于自己的时间同步基础设施。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询