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 时间同步验证
配置完了,怎么确认真的同步了?我一般三步走:
- 检查源状态:
chronyc sources -v,看到^*标记表示当前正在使用的源 - 检查时间偏差:
chronyc tracking,看System time那一行,偏差值越小越好 - 跨节点对比:在所有节点上执行
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 知识体系结构图
下面这张图,把时间同步的核心逻辑串起来了:
4.6 避坑指南
做时间同步,有几个坑我踩过,分享给你:
- 防火墙拦了UDP 123端口:Chrony默认用这个端口,忘了开就同步不了。我曾经排查了半天,最后发现是防火墙规则没放行。
- 虚拟机时间漂移严重:VMware或KVM虚拟机,如果宿主机负载高,时间漂移会非常快。建议在虚拟机里也跑Chrony,并且缩短同步间隔。
- 不要同时跑NTP和Chrony:两个服务会打架,导致时间反复跳变。选一个就好。
- 硬件时钟也要同步:
hwclock --systohc把系统时间写入硬件时钟,否则重启后时间又回去了。
快速检查命令:timedatectl 可以看系统时间、硬件时间、NTP服务状态,一目了然。
好了,时间同步这块就这些。配置不难,但细节决定成败。你按上面的步骤走,基本不会出问题。