4、NTP时间同步:为什么需要时间同步、NTP服务搭建、chrony配置、时间同步验证

4.1 为什么集群必须做时间同步?

说实话,我见过太多集群出问题,最后查来查去,根源就是时间不一致。

你想想看,一个集群里几十台机器,各自的时间差个几秒甚至几分钟。日志分析时,事件顺序全是乱的。更严重的是,像HDFS、Kafka这类分布式系统,对时间戳极度敏感。时间一跳,数据就可能写错位置,甚至直接脑裂。

时间不同步会引发哪些问题?

  • 认证失败:Kerberos票据依赖时间窗口,差个5分钟就失效了
  • 数据不一致:分布式数据库的MVCC版本控制全靠时间戳
  • 日志排查困难:A机器报错在10:00,B机器日志显示09:55,根本对不上
  • 调度任务乱序:Crontab任务在不同节点上执行时间错位

核心原则:集群内所有节点的时间偏差,必须控制在100毫秒以内。这是底线。

4.2 NTP vs Chrony:我选哪个?

传统上大家用NTP服务。但我个人习惯,现在新集群一律上Chrony。

为什么?Chrony是NTP的现代替代品。它有几个明显的优势:

  • 同步更快:启动后几秒内就能完成初步同步,NTP可能要几分钟
  • 抗网络抖动:网络延迟不稳定时,Chrony的算法更聪明
  • 离线也能扛:如果NTP服务器暂时连不上,Chrony能保持相对精准

我在项目中遇到过,机房网络偶尔波动,NTP服务频繁报错,切到Chrony后世界清净了。

我的建议:CentOS 7及以上、Ubuntu 18.04及以上,直接用Chrony。老系统才考虑NTP。

4.3 Chrony服务搭建实战

嗯,这里直接上操作。假设我们有三台机器:

  • 192.168.1.10(作为NTP服务器,连接外部时间源)
  • 192.168.1.11(客户端)
  • 192.168.1.12(客户端)

4.3.1 安装Chrony

所有节点都要装:

# CentOS/RHEL
yum install -y chrony

# Ubuntu/Debian
apt install -y chrony

4.3.2 配置NTP服务器(192.168.1.10)

编辑 /etc/chrony.conf:

# 使用国内NTP服务器
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server cn.pool.ntp.org iburst

# 允许内网客户端同步
allow 192.168.1.0/24

# 本地作为时间源(当外网不可用时)
local stratum 10

# 记录时间漂移
driftfile /var/lib/chrony/drift

注意:local stratum 10 这行很关键。我曾经遇到外网NTP服务器挂了,所有客户端时间全乱套。加上这行,至少内网还能保持相对一致。

4.3.3 配置NTP客户端(192.168.1.11、192.168.1.12)

编辑 /etc/chrony.conf:

# 指向内网NTP服务器
server 192.168.1.10 iburst

# 允许chronyd自动调整系统时钟
makestep 1.0 3

# 记录时间漂移
driftfile /var/lib/chrony/drift

4.3.4 启动并验证服务

# 启动服务
systemctl enable chronyd
systemctl start chronyd

# 查看同步状态
chronyc sources -v

# 查看详细统计
chronyc tracking

4.4 时间同步验证

配置完了,怎么确认真的同步了?我一般三步走:

  1. 检查源状态:chronyc sources -v,看到 ^* 标记表示当前正在使用的源
  2. 检查时间偏差:chronyc tracking,看 System time 那一行,偏差值越小越好
  3. 跨节点对比:在所有节点上执行 date,肉眼对比时间

快速验证脚本:

#!/bin/bash
# 在所有节点上运行,检查时间偏差
for host in 192.168.1.10 192.168.1.11 192.168.1.12; do
    echo "=== $host ==="
    ssh $host "date '+%Y-%m-%d %H:%M:%S.%N'"
done

4.5 知识体系结构图

下面这张图,把时间同步的核心逻辑串起来了:

NTP时间同步核心架构 外部NTP服务器 主NTP节点 (192.168.1.10) chronyd服务 | stratum 10 客户端节点1 192.168.1.11 客户端节点2 192.168.1.12 客户端节点N 更多节点... 所有客户端通过内网同步到主节点,主节点从外部NTP获取标准时间

4.6 避坑指南

做时间同步,有几个坑我踩过,分享给你:

  • 防火墙拦了UDP 123端口:Chrony默认用这个端口,忘了开就同步不了。我曾经排查了半天,最后发现是防火墙规则没放行。
  • 虚拟机时间漂移严重:VMware或KVM虚拟机,如果宿主机负载高,时间漂移会非常快。建议在虚拟机里也跑Chrony,并且缩短同步间隔。
  • 不要同时跑NTP和Chrony:两个服务会打架,导致时间反复跳变。选一个就好。
  • 硬件时钟也要同步:hwclock --systohc 把系统时间写入硬件时钟,否则重启后时间又回去了。

快速检查命令:timedatectl 可以看系统时间、硬件时间、NTP服务状态,一目了然。

好了,时间同步这块就这些。配置不难,但细节决定成败。你按上面的步骤走,基本不会出问题。

可可精品资料库