
单台服务器时间漂移已经够让人头疼,当一组服务器各自时间不一致时,问题会成倍放大。日志无法跨节点串联、数据库主从复制频繁中断、分布式任务重复或漏执行,这些故障的排查成本远高于单机场景。本文教你如何用 chrony 搭建多服务器时间同步集群,通过内网时间源统一整组服务器的时间基准,并配合自动化监控及时发现漂移,帮助你从源头避免时间不一致引发的连锁故障。
为什么多服务器时间一致性比单机同步更重要
单机时间同步解决的是”这台服务器与真实时间对齐”的问题,而多服务器场景还多了一层”服务器之间彼此对齐”的要求。即使每台服务器都各自与外部时间源同步,由于网络延迟、同步频率和硬件晶振差异,它们之间仍可能产生几十毫秒甚至更大的相对偏差。对依赖时间戳判断事件顺序的分布式系统来说,这个相对偏差才是真正的隐患。
以常见的业务场景为例:微服务架构下,多个服务实例通过时间戳判断请求先后,时间不一致会让日志链路追踪错乱;数据库主从复制依赖 binlog 时间戳排序,主从时间偏差过大会导致复制中断或数据错位;定时任务调度器如果部署在多台机器上,时间不一致会让同一任务被重复触发或漏触发。这些问题的共同点,是它们都源于”服务器之间时间基准不统一”。
要解决这个问题,最有效的做法是让整组服务器共享同一个时间基准。NTP(网络时间协议)通过分层的时间服务器把 UTC 标准时间逐级传递,而 chrony 作为 NTP 的现代实现,在集群场景下尤其适合:它支持一台服务器同时作为内网时间源和外部时间源的客户端,还能在同步源短暂不可用时继续维持稳定时间,因此成为主流 Linux 发行版默认的时间同步工具。如果你刚接触服务器基础运维,可以先阅读我们的服务器分类文章,了解集群初始化时还有哪些容易遗漏的配置项。
chrony 集群部署步骤
多服务器时间同步集群的典型架构是”一台主时间源 + 多台从服务器”。主时间源同时连接外部权威时间源和内网,从服务器只指向主时间源,这样既能保证整组时间与真实时间对齐,又能让服务器之间保持高度一致。下面按角色说明配置方法。
配置主时间源
主时间源需要同时承担两个角色:作为客户端从外部同步,作为服务端为内网提供时间。在 /etc/chrony.conf 中,server 指令配置外部时间源,例如 server ntp.aliyun.com iburst;allow 指令则指定允许哪些内网网段访问,例如 allow 192.168.1.0/24,只放行内网地址,避免把时间服务暴露到公网。配置完成后用 systemctl restart chronyd 重启服务。
配置从服务器
从服务器只需要指向主时间源,配置更简单。在 /etc/chrony.conf 中写入 server 192.168.1.10 iburst(替换为主时间源的内网 IP),并注释掉默认的公共时间源,避免从服务器同时连接多个来源导致时间抖动。重启 chronyd 后,从服务器会定期与主时间源对齐。
验证集群同步状态
验证是部署中最容易忽略的一步。在主时间源上执行 chronyc sources -v,^* 前缀表示已同步且可用;在从服务器上执行同样的命令,应看到主时间源被标记为 ^*。chronyc tracking 显示系统时钟与时间源的偏差值,正常情况下应在毫秒级。如果从服务器显示 ^?,说明无法连接主时间源,需要检查防火墙是否放行 UDP 123 端口。

自动化监控与排障
集群部署完成后,时间一致性不会自动保持,需要持续监控。下面给出监控指标、告警配置和常见排障方向。
监控关键指标
最值得监控的指标是每台服务器与时间源的偏差值,以及时间源状态。偏差值可以用 chronyc tracking 的 System time 字段读取,正常应在毫秒级;时间源状态则看 chronyc sources 中是否有 ^* 前缀。建议把这些指标接入现有的监控系统,例如用脚本定时采集并上报,偏差超过阈值时触发告警。
配置自动化告警
一个简单的做法是写一个定时脚本,每 5 分钟执行一次 chronyc tracking,解析偏差值,超过 100 毫秒就通过邮件或即时通讯工具告警。脚本可以放在 cron 里,例如 */5 * * * * /usr/local/bin/check_chrony.sh。这样即使某台服务器时间悄悄漂移,也能在影响业务前被发现。
常见排障方向
时间同步失败的原因通常集中在几个方向。第一步确认 chronyd 服务是否正常运行,systemctl status chronyd 若显示 failed,查看日志 journalctl -u chronyd 定位启动错误。第二步确认网络连通性,从服务器能否访问主时间源的 UDP 123 端口,用 ss -ulnp | grep 123 检查端口监听。第三步检查时区配置,timedatectl 查看当前时区,若与业务预期不符用 timedatectl set-timezone Asia/Shanghai 修正。需要提醒的是,不要在同一台服务器上同时运行 ntpd 与 chronyd,两者并存会互相干扰导致时间反复跳动。如果你运行的是 WordPress 站点,时间不一致还可能影响文章定时发布和缓存刷新,相关排查思路可以参考我们的 WordPress 分类文章。

总结与行动建议
多服务器时间一致性是分布式系统稳定运行的基础。用 chrony 搭建集群只需要配置主时间源、配置从服务器、验证同步三步,再配合自动化监控,就能把时间不一致引发的隐性故障挡在业务之外。建议你在每批新服务器上线时就把时间同步集群纳入初始化清单,并定期检查偏差值,而不是等故障出现后再排查。
如果你正在管理多台服务器,可以考虑把 chrony 配置纳入统一的配置管理流程,用自动化工具批量下发主从配置,避免逐台手工操作带来的遗漏。对于需要更高精度时间的业务,还可以进一步研究 PTP(精确时间协议),但绝大多数场景下,正确配置的 chrony 集群已经足够。
如果你需要一组稳定、易管理的服务器来承载这些运维实践,可以了解 Hostease 的 VPS 主机方案(VPS,即虚拟专用服务器,提供独立 root 权限),它提供完整的 root 权限,方便你自由配置 chrony 等系统服务;也可以参考我们的服务器分类文章,了解更多基础运维技巧。无论选择哪种方案,把时间一致性做好,都是让分布式业务更可靠的第一步。