商城首页欢迎来到中国正版软件门户

您的位置:首页 >Linux服务器如何配置TimeSync 解决集群服务器时间不一致【指南】

Linux服务器如何配置TimeSync 解决集群服务器时间不一致【指南】

  发布于2026-05-20 阅读(0)

扫一扫,手机访问

Linux服务器集群时间不同步,这事儿在分布式环境里可大可小。日志时间戳对不上、证书验证失败、数据库主从复制出问题,追查起来往往都是时间差那几秒钟惹的祸。直接用系统自带的systemd-timesyncd?它本质上只是个轻量级客户端,没法充当时间服务器给其他节点提供同步服务。真想解决集群内的时间一致性问题,还得靠chronyd——让一台机器作为主时间源,其他所有节点都指向它,这才是正解。

Linux服务器如何配置TimeSync 解决集群服务器时间不一致【指南】

为什么不用 ntpdsystemd-timesyncd

先说ntpd,这个老牌服务在主流新系统里已经“退居二线”了。像RHEL 8/CentOS 8、Ubuntu 20.04这些版本,默认都不再安装它。除了配置复杂,它调整时钟的方式也偏“保守”,步进慢,在需要快速对齐的集群环境里不够利索。

systemd-timesyncd呢?它设计初衷就是简单、省资源,所以只实现了客户端功能。这意味着它自己能去同步外部时间,但无法响应来自局域网内其他服务器的同步请求。你想在集群里自建一个时间锚点?它根本做不到。

所以,答案很明确:集群内时间同步,chronyd是当前的首选。它同时支持服务端和客户端模式,收敛速度快,对虚拟化环境的适应性也更好。不过,有几个细节容易踩坑:

  • chronyd服务启动后,默认确实会监听UDP 323端口,但如果不显式配置bindcmdaddressallow指令,它不会理睬来自其他机器的查询。
  • 如果你的服务器前面有防火墙或者处于NAT网络,记住要放行的是UDP 323端口,不是传统的NTP 123端口。
  • 别在systemd-timesyncd的配置文件里白费功夫了。即便你在/etc/systemd/timesyncd.conf里设置了NTP=指向你的chrony服务器,它也认不了。它只认标准的NTP v4服务器,而且不支持服务器池(pool)配置。

服务器:配置 chronyd 为可被访问的时间源

服务器的配置,核心目标是让它成为一个稳定、可信的本地时间源。编辑/etc/chrony.conf文件,确保以下几项配置到位(顺序可以调整,但内容缺一不可):

server 216.239.35.0 iburst minpoll 4 maxpoll 6
keyfile /etc/chrony.keys
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
allow 192.168.10.0/24  # 替换为你的集群网段
local stratum 10

这里有几个关键点:

  • 关于allow指令:务必指定具体的子网,比如192.168.10.0/24。图省事写成allow 0.0.0.0/0会开放给所有IP,安全风险太高,不推荐。
  • 关于local stratum 10:这行配置至关重要。它告诉chronyd,即使没有连接GPS或原子钟这类高精度硬件,也以“第10层”的层级对外宣告自己是权威时间源。没有这个设置,其他客户端可能会因为觉得这个源层级太高(不够精确)而拒绝同步。
  • 关于上游源:作为集群的“时间锚点”,主服务器本身不应该再去同步外部时间源。因此,需要把配置文件中所有以poolserver开头的、指向外部的行都注释掉或删除。

配置完成后,重启并启用服务:sudo systemctl restart chronyd && sudo systemctl enable chronyd

客户端:强制只从集群内主服务器同步

客户端的配置思路正好相反:要让它“心无旁骛”,只认我们指定的主服务器。同样使用chronyd,配置文件需要更严格地约束。

pool 192.168.10.1 iburst minpoll 4 maxpoll 6  # 主服务器 IP
keyfile /etc/chrony.keys
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
rtcsync
makestep 1.0 -1
# 注释或删掉所有其他 server/pool 行

客户端配置的要点如下:

  • 强制快速同步makestep 1.0 -1这个参数是关键。它表示只要检测到系统时间偏差超过1秒,就立即进行“阶跃式”校正,而不是花很长时间慢慢调整。这对于刚启动的服务器,或者从休眠中恢复的虚拟机来说,能迅速将时间拉回正轨。
  • 同步硬件时钟rtcsync指令会让chronyd定期将校正后的系统时间写回硬件时钟(RTC)。这样可以避免服务器重启后,系统时间又回到一个错误的状态。
  • 保持配置纯净:务必注释或删除配置文件中其他所有指向外部NTP服务器serverpool行,确保客户端同步来源的唯一性。

配置好后,如何验证?可以运行chronyc tracking查看同步状态,关注System time是否显示为OK。更详细的可以用chronyc sources -v,确认列表中只有你配置的主服务器IP。

另外,一个常见的冲突点是:不要使用timedatectl set-ntp true这个命令。因为它默认启用的是systemd-timesyncd服务,会和chronyd产生冲突,争夺时间控制权。

最后,真正考验人的往往是验证和排错环节。chronyd默认的日志级别不记录详细的同步过程,如果临时需要调试,可以在配置中加上logchange 0.5来获取更详细的变化日志,同时用chronyc activity检查连接状态。

还有一个虚拟化环境下的特例:如果KVM虚拟机开启了宿主机时间同步(比如libvirt配置了clock=host),这个机制会干扰chronyd的工作。在这种情况下,通常需要在虚拟机内部禁用或调整宿主机提供的时间同步功能,才能让chronyd正常发挥作用。

本文转载于:https://www.php.cn/faq/2468678.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注