凌峰创科服务平台

linux 服务器间时间同步

在Linux服务器集群环境中,时间同步是确保系统日志、任务调度、安全认证等核心功能正常运行的基石,由于服务器时钟存在硬件偏差和网络延迟,若未进行统一时间同步,可能导致日志时间戳混乱、定时任务执行异常、证书验证失败等问题,本文将详细介绍Linux服务器间时间同步的实现原理、常用工具、配置步骤及最佳实践。

linux 服务器间时间同步-图1
(图片来源网络,侵删)

时间同步的基本原理

Linux系统的时间管理依赖两个核心时钟:硬件时钟(RTC,即BIOS时钟)和系统时钟(由内核维护),硬件时钟在服务器关机时仍能运行,而系统时钟在开机时通过硬件时钟初始化,并在运行过程中由内核持续更新,时间同步的本质是通过网络协议将服务器的时间与权威时间源(NTP服务器)对齐,或通过集群内服务器间的时间协商,确保所有节点的系统时钟保持一致。

时间同步的核心协议是网络时间协议(NTP)及其简化版本简单网络时间协议(SNTP),NTP通过层级结构(stratum)组织时间服务器,Stratum 0为原子钟、GPS等权威时间源,Stratum 1直接连接Stratum 0,Stratum 2从Stratum 1同步,以此类推,普通服务器通常作为Stratum 3或更低层级客户端,从上层NTP服务器获取时间。

常用时间同步工具及选择

Linux环境下支持多种时间同步工具,可根据需求场景选择:

工具名称 协议支持 特点 适用场景
chrony NTP/SNTP 轻量级,支持高频率时间调整,适应网络不稳定环境,配置简单 大规模集群、虚拟化环境
ntpd NTP 功能全面,支持时间服务器层级,但同步频率较低,初始同步耗时较长 传统物理服务器集群
systemd-timesyncd NTP 与systemd集成,轻量级,适合桌面端和轻量级服务器,功能相对简单 单机或小型服务器
timedatectl 系统时间管理 主要用于管理系统时区和时间同步服务状态,依赖底层NTP工具(如chrony) 系统时间基础配置

推荐选择:对于生产环境服务器集群,推荐使用chrony,其优势在于对网络延迟和时钟频率偏差的补偿能力更强,且在虚拟化环境中能更好地处理时间跳跃问题。

linux 服务器间时间同步-图2
(图片来源网络,侵删)

使用chrony实现服务器间时间同步

安装chrony

以CentOS/RHEL为例,通过包管理器安装:

sudo yum install chrony -y

Ubuntu/Debian系统可使用:

sudo apt update && sudo apt install chrony -y

配置chrony服务器模式

若需将某台服务器作为集群内的时间同步源(NTP服务器),需修改/etc/chrony/chrony.conf配置文件:

# 允许其他服务器同步时间(替换为内网IP段)
allow 192.168.1.0/24
# 使用本地时钟作为时间源(若服务器连接外网NTP,可注释此行)
local stratum 10
# 指定上游NTP服务器(可选,建议配置)
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

参数说明:

linux 服务器间时间同步-图3
(图片来源网络,侵删)
  • allow:定义允许同步的客户端IP段,需根据实际网络环境配置。
  • local stratum 10:当无法连接上游NTP服务器时,以本地时钟作为时间源,层级设为10(避免成为权威源)。
  • iburst:在初始同步时发送多个包以加快同步速度。

配置chrony客户端模式

普通客户端只需配置上游NTP服务器(可以是内网NTP服务器或公网NTP源):

# 使用内网NTP服务器(推荐)
server 192.168.1.100 iburst
# 备选公网NTP服务器
server time1.cloud.tencent.com iburst
server pool.ntp.org iburst

启动并启用chrony服务

sudo systemctl start chronyd
sudo systemctl enable chronyd

验证同步状态

使用chronyc tracking查看同步状态:

$ chronyc tracking
Reference ID    : C0A80164 (192.168.1.100)
Stratum         : 3
Ref time (UTC)  : Tue Nov 15 08:30:00 2025
System time     : 0.000000000 seconds fast of NTP time
Last offset     : +0.000123456 sec
RMS offset      : 0.000050000 sec
Frequency       : 10.123 ppm slow
Residual freq   : -0.001 ppm
Skew            : 0.001 ppm
Root delay      : 0.050000 sec
Root dispersion : 0.020000 sec
Update interval : 64.0 sec
Leap status     : Normal

关键指标说明:

  • Stratum:层级数,应小于4(客户端通常为3或4)。
  • Last offset:与NTP服务器的时间偏差,单位秒,理想值应接近0。
  • System time:系统时间与NTP时间的偏差。

使用chronyc sources查看时间源列表:

$ chronyc sources
210 Number of sources = 1
MS Name/IP Address         Stratum Poll Reach LastRx Last sample
^* 192.168.1.100              2   6   377     7   +0.000123456 [ +0.000150000] +/- 0.000050000

^*表示当前正在使用的时间源。

时间同步的最佳实践

  1. 层级化配置:在大型集群中,建议设置层级化时间同步架构——核心节点作为Stratum 2服务器,普通节点作为客户端从核心节点同步,避免所有节点直接依赖公网NTP服务器。
  2. 网络隔离:确保时间同步流量走内网,避免公网延迟影响同步精度,可在防火墙中开放NTP端口(UDP 123)并限制访问源IP。
  3. 监控与告警:通过chronyc命令或Prometheus+Grafana监控时间偏差,当偏差超过阈值(如100ms)时触发告警。
  4. 虚拟化环境优化:在虚拟机中禁用硬件时钟同步(如VMware的tools.syncTime=FALSE),避免与宿主机时间同步冲突,完全依赖chrony管理时间。
  5. 初始同步时间:新部署的服务器首次同步可能需要较长时间(约10分钟),期间避免执行依赖精确时间的任务。

相关问答FAQs

Q1: 服务器时间同步失败,如何排查?
A: 可按以下步骤排查:

  1. 检查网络连通性:telnet <NTP服务器IP> 123,确认NTP端口可达。
  2. 查看chrony服务日志:journalctl -u chronyd -f,检查是否有“no suitable source”等错误。
  3. 验证防火墙规则:sudo firewall-cmd --list-ports,确保UDP 123端口已开放。
  4. 检查时间源配置:chronyc sources确认是否有可用时间源,若显示xxx表示被拒绝,需检查allow配置。
  5. 强制同步:chronyc -a makestep,若时间偏差过大,可手动强制同步。

Q2: 如何调整chrony的同步精度和频率?
A: 通过修改/etc/chrony/chrony.conf参数优化:

  • maxdistance:设置最大时间偏差阈值(默认16秒),超过该值将拒绝同步,可根据网络环境调整为1s2s
  • minpoll/maxpoll:控制同步请求的最小和最大间隔(默认6-10,即64s-1024s),若需更高精度,可调整为4 6(即16s-64s)。
  • smoothtime:启用时间平滑调整,避免时钟突变,在虚拟机中建议开启。
    修改后需重启chrony服务:sudo systemctl restart chronyd
分享:
扫描分享到社交APP
上一篇
下一篇