Chrony NTP 时间同步服务器部署教程:替代 ntpd,搭建内网 NTP 服务
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(如有)
sudo systemctl stop ntp 2>/dev/null
sudo systemctl disable ntp 2>/dev/null
sudo apt remove -y ntp ntpdate 2>/dev/null
同时禁用 systemd-timesyncd(避免冲突):
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd
安装 Chrony
Ubuntu / Debian:
sudo apt update
sudo apt install -y chrony
CentOS / RHEL / Rocky Linux:
sudo dnf install -y chrony
安装完成后 Chrony 会自动启动:
sudo systemctl enable --now chronyd
sudo systemctl status chronyd
确认时区设置
timedatectl status
# 如需修改时区:
sudo timedatectl set-timezone Asia/Shanghai
详细配置
配置文件位置
- Ubuntu/Debian:
/etc/chrony/chrony.conf - CentOS/RHEL:
/etc/chrony.conf
客户端模式配置
适用于需要从上游 NTP 服务器同步时间的普通节点:
sudo nano /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
重启服务使配置生效:
sudo systemctl 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 端口:
# UFW
sudo ufw allow 123/udp
# firewalld
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
# iptables
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
进阶用法
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
强制立即同步:
sudo chronyc 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.sh
OFFSET=$(chronyc tracking | grep "System time" | awk '{print $4}')
THRESHOLD=0.1 # 100ms
if (( $(echo "$OFFSET > $THRESHOLD" | bc -l) )); then
echo "WARNING: NTP offset ${OFFSET}s exceeds threshold ${THRESHOLD}s"
exit 1
fi
echo "OK: NTP offset is ${OFFSET}s"
exit 0
实战示例
搭建高可用双节点 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 节点执行
sudo chronyc makestep
chronyc tracking | grep "System time"
# 验证偏差
for node in 192.168.1.{1..10}; do
echo -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.conf 中 allow 指令包含了客户端所在网段,并检查服务端防火墙 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-com的 1 核 2GB 机型,注册填优惠码 2026off 即可领取 5 折优惠券,轻松搭建属于自己的时间同步基础设施。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)