3、NTP客户端配置:Linux下NTP客户端安装、ntpdate命令使用、ntpd服务配置、chrony替代方案
时间同步这件事,说大不大,说小不小。我见过不少线上故障,最后追根溯源,都是因为服务器时间偏差了几秒钟。日志对不上、证书验证失败、分布式节点数据冲突……嗯,这些坑我都踩过。
这一章,我们就把Linux下的NTP客户端配置彻底讲透。从最基础的安装,到ntpdate手动同步,再到ntpd服务化运行,最后聊聊chrony这个更现代的替代方案。
3.1 安装NTP客户端
不同发行版的包管理工具不一样,但安装过程大同小异。我个人习惯在CentOS上用yum,在Ubuntu上用apt,记住这两个就够了。
# CentOS / RHEL
sudo yum install ntp ntpdate -y
# Ubuntu / Debian
sudo apt update
sudo apt install ntp ntpdate -y
安装完成后,可以用 ntpq -p 检查一下服务是否启动。如果提示“No association ID's returned”,别慌,说明ntpd还没配置好,或者还没开始同步。
3.2 ntpdate命令:手动同步的利器
ntpdate是一个一次性同步工具。说白了,就是“我现在就要把时间调准,不管别的”。
用法很简单:
sudo ntpdate -u ntp.aliyun.com
-u 参数的意思是使用非特权端口(1024以上),这个在防火墙严格的环境下特别有用。我曾经在一家金融公司调试时,发现ntpdate总是超时,折腾了半天才发现是防火墙只放行了非特权端口。
手动同步后,可以用 date 命令确认时间是否更新:
date
Thu Mar 14 10:25:33 CST 2025
3.3 ntpd服务配置
ntpd是长期运行的后台守护进程。它会持续监控系统时间,并通过微调来保持同步,而不是像ntpdate那样“猛调”。
核心配置文件是 /etc/ntp.conf。我一般会这样配置:
# 使用阿里云NTP服务器
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
# 限制访问权限
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# 本地时钟作为备用
server 127.127.1.0
fudge 127.127.1.0 stratum 10
几个关键参数说明:
| 参数 | 含义 | 我的建议 |
|---|---|---|
iburst |
启动时快速发送4个包,加速首次同步 | 必加,否则首次同步可能要等很久 |
restrict |
访问控制,限制谁可以查询或修改 | 默认配置够用,别乱改 |
fudge |
调整本地时钟的层级 | 当所有外部服务器都不可用时,本地时钟作为最后手段 |
配置完成后,启动服务:
sudo systemctl start ntpd
sudo systemctl enable ntpd
sudo systemctl status ntpd
查看同步状态:
ntpq -p
输出示例:
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp.aliyun.com 10.137.38.86 2 u 23 64 377 28.123 -2.345 0.678
看到 * 号了吗?那表示当前同步源。如果显示的是 + 号,表示候选源。如果全是空白,说明还没同步上。
3.4 chrony:更现代的替代方案
chrony是ntpd的现代替代品。说实话,我现在新部署的服务器,基本都用chrony。为什么?
- 同步速度更快:chrony能在几秒内完成首次同步,ntpd可能要几分钟
- 网络波动适应性强:即使网络间歇性中断,chrony也能保持较好的时间精度
- 配置更简洁:配置文件只有几行,不像ntp.conf那么啰嗦
安装chrony:
# CentOS 7+ / RHEL 7+
sudo yum install chrony -y
# Ubuntu 16.04+
sudo apt install chrony -y
配置文件 /etc/chrony.conf 示例:
# 使用阿里云NTP服务器
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
# 允许本地客户端查询
allow 127.0.0.1
# 本地时钟备用
local stratum 10
启动chronyd:
sudo systemctl start chronyd
sudo systemctl enable chronyd
查看同步状态:
chronyc sources -v
输出示例:
.-- 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
===============================================================================
^* ntp.aliyun.com 2 6 377 42 -3.123ms +/- 28ms
^- ntp1.aliyun.com 2 6 377 43 +1.456ms +/- 32ms
^* 表示当前同步源,和ntpq的 * 是一个意思。
3.5 知识体系图
下面这张图,把NTP客户端配置的核心逻辑串起来了:
3.6 避坑指南
最后,分享几个我踩过的坑:
- 防火墙拦截:NTP使用UDP 123端口。我曾经在云服务器上忘了开安全组规则,结果ntpdate一直超时。检查一下防火墙,别在这种小事上浪费时间。
- 时区问题:NTP只同步时间,不同步时区。如果你发现时间对了但显示不对,用
timedatectl set-timezone Asia/Shanghai设置时区。 - 虚拟化环境:VMware或KVM虚拟机中,建议启用主机时间同步,否则虚拟机时钟漂移会很快。我见过一台VM一天漂了30秒。
- ntpd启动失败:检查
/var/log/messages或journalctl -u ntpd。大部分情况是配置文件语法错误,或者端口被占用。