【Linux系列】NTP时间同步服务器搭建完整指南

[复制链接]
发表于 2026-10-4 19:22:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

在分布式系统和高可用环境里,时间同步是一件平时不起眼、一旦出问题就会被放大成事故的事情。日志日志排序、交易时序、证书有效期判定、令牌过期、定时任务调度、数据库主从复制,几乎都建立在“这台机器和那台机器的钟走得一样”这个前提上。本文按服务端配置、客户端配置、验证方法、监控监控告警、排坑清单的顺序,把 Linux 下基于 ntpd 的时间同步完整走一遍。

一、为什么关键业务一定要做时间同步

时间不同步带来的麻烦通常分两类:一类是功能直接错,另一类是排查时抓不到现场。

  • 业务数据错乱:同一笔业务在多节点上产生的时间戳不一致,按时间排序就可能出现乱序,对账、日终结算、审计追溯都会跟着出问题。
  • 认证体系失效:Kerberos、基于票据的认证、带生存期的令牌,都会拿本地时间做有效期判断,时钟偏了几分钟就可能大面积登录失败。
  • 日志日志无法对齐:一个请求打到三台机器上,三份日志日志里的时间各差几秒,就只能靠人工靠猜拼先后。
  • 监控监控误判:监控监控系统本身也是一台机器,它和业务机器的时间对不上,阈值判断就会整体偏移。
  • 定时任务漂移:cron 触发、备份窗口、证书续期,都依赖稳定的系统时钟。

金融、证券、支付类系统对这一点尤其敏感,所以生产环境通常会要求业务机、中间件、数据库、监控机全部纳管到同一套时间源。

二、安装 NTP 服务

CentOS 7 上的 ntp 包提供的是 ntpd 守护进程,用法成熟,配置直观。先装包并看一下版本:

yum install -y ntp

# 查看版本
ntpd --version

Ubuntu / Debian 上对应的是 ntp 包,命令基本通用。需要注意一点:CentOS 7 / RHEL 7 起系统默认还带 chrony,如果 chronyd 也在跑,两个对时进程会同时改系统时间,容易互相打架。生产上建议二选一,本文以 ntpd 为例,实际操作前先确认:

systemctl status chronyd
systemctl stop chronyd
systemctl disable chronyd

三、服务端配置文件逐项讲

主配置文件是 /etc/ntp.conf,下面按块说明每一项在干什么。

1. driftfile:记录时钟漂移

driftfile /var/lib/ntp/drift

晶振受温度、负载、主板批次影响,每天会快一点或慢一点。ntpd 会持续测量这个偏差并写进 drift 文件,重启后用它来提前修正,避免每次启动都从零开始慢慢对。

2. restrict:谁能访问我、我能访问谁

restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1

这行默认值表达的是:对未明确授权的地址,禁止修改配置、禁止 traps、禁止作为时间源同步给我、禁止查询状态。对一台只对外提供时间服务的机器来说,保留这行是最稳妥的。内网里如果希望允许网段来同步,再单独加一行:

restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap nopeer noquery

注意别写成 restrict default 后面什么都不跟,那等于放开所有权限。

3. server:指定上游时间源

server time1.apple.com iburst
server time2.apple.com iburst

server time1.google.com iburst
server time2.google.com iburst

server pool.ntp.org iburst
server cn.pool.ntp.org iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server time1.aliyun.com iburst
server time2.aliyun.com iburst

iburst 的意思是:服务刚启动的前几秒,一次性发几个包把时间快速拉到量级,而不是等下一次轮询。生产环境建议至少配两个来自不同运营商或不同组织的上游,避免单源出问题导致整片机器走偏。

有一点要提醒:并不是所有环境都应该无脑写公共 NTP。云厂商的 VPC 里通常自带内网时间源(华为云、阿里云、腾讯云都有对应的 ntp.xxx 内核时间服务地址),延迟低、链路稳定,优先用内网源,公共源作为补充。

4. include 与 keys:密钥认证相关

includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

这两行用于对称密钥模式的时间源认证,适用于对时间源可信度要求高、且链路经过不可信网络的场景。普通内网环境用不到,知道它是什么即可。

5. disable monitor

disable monitor

monitor 功能默认在部分版本里开着,会让 ntpd 维护一份连接状态记录。不需要监控统计时直接关掉,省一点开销也少一个接口。

四、客户端配置

客户端和服务端用的是同一份配置结构,区别只在 server 指向谁。客户端不需要 restrict 那套限制(它没有对外提供服务),但可以保留:

server ntp1.xxx.com iburst
server ntp2.xxx.com iburst

至少配两个上游节点。只配一个的话,这个节点一旦异常,客户端会一直朝着错的时间慢慢靠,中间没有任何参照可以纠正。

五、启动与开机自启

systemctl restart ntpd
systemctl enable ntpd

# 看运行状态
systemctl status ntpd

六、怎么确认同步真的生效:ntpq -p 字段解读

ntpq -p(必须是 root 或有 sudo)会列出当前正在对齐的远程时间源。输出里每一列的含义如下:

字段含义
remote响应请求的 NTP 服务器名称或 IP,前面带 * 表示当前正在用它对时,带 + 表示备用可用源
refid该远程服务器自己的上游时间源 ID,能反映时间链条走到哪一层
st服务器层级,取值 1 到 16,数字越小层级越高,1 是顶级时间源
t通信方式,u 是单播,b 是广播,l 是本地参考时钟
when距离上次成功请求过去了多少秒
poll本地与该源的同步间隔,单位是秒,会自动调整
reach最近八次查询的响应状态,八进制的 377 表示八次全通
delay网络往返延迟,单位微秒
offset本地时间与源时间的偏差,单位毫秒,绝对值越小越健康
jitter多次往返延迟的抖动,单位微秒,数值稳定说明链路平稳

判断标准上,运维里常用的经验是:看到 * 前缀、reach 接近 377、offset 在个位数毫秒以内,基本就正常了。offset 长期在几百毫秒以上通常意味着链路拥堵或上游本身有问题。

七、监控与告警怎么配

  • 盯时间差:给每台业务机加一个采集项,比较它与监控服务器的时间差,超过 500 毫秒就触发告警。这个阈值不是硬标准,可按自身精度要求放宽或收紧。
  • 盯进程:ntpd 挂掉是最直接的单点故障,用 systemctl is-active ntpd 或进程存活检查兜底。
  • 盯 ntpq 输出:定时执行 ntpq -p,检查是否有 *、reach 是否归零。
  • 监控机自己也要对时:很多团队给业务机配了时间源,却忘了监控机,结果判据本身是偏的。

如果希望把 NTP 指标接入现有监控体系,社区里有 ntp_exporter 之类的导出工具,把 ntpq 的结果暴露给 Prometheus 采集,比写脚本轮询省事。

八、常见的几个坑

  • chronyd 和 ntpd 同时跑:两者都改系统时间,表现为时间来回跳。装之前先查哪些进程在动时间。
  • 防火墙拦了 UDP 123:NTP 走 UDP 123。内网时间服务端若被拦,下游会一直对不上,但服务端自己从公网同步可能还正常,容易被误判成配置问题。
  • 硬件时钟与系统时间不一致:关机期间靠 /etc/sysconfig/clock 与 hwclock 的交互维持时间,配置错了会出现重启后时间回退。
  • 虚拟机漂移大:虚拟化平台的时钟漂移比物理机明显,除了跑 NTP,还建议在宿主机层面开启平台时间同步,两者配合。
  • 只配一个 server:单点时间源,源挂了整片机器跟着漂。

九、总结

时间同步的上手难度不高,难在“长期不被打扰地跑对”。把它当成一项需要监控、有告警、有回归路径的基础设施,而不是装完就不管的一次性配置:服务端做 restrict 收敛,上游至少两个,客户端至少两个源,验证用 ntpq -p,告警盯时间差和进程存活,再顺手确认 chronyd 没在旁边抢活。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表