在Linux服务器的日常运维中,时间同步是一个容易被忽视、但一旦出问题就会引发"灾难"的基础配置。最近在项目中,两次遇到由于服务器集群之间,时间没有保持同步,导致产品功能出现bug。
时间不同步可能导致的问题:
- 证书失效:SSL/TLS证书验证失败,导致HTTPS不可用
- 集群脑裂:数据库集群、Redis集群因时间偏差导致脑裂
- 定时任务错乱:crontab在不同服务器执行时间不一致
- 认证失败:Kerberos、OTP等基于时间的认证失败
- 数据一致性:分布式事务依赖时间戳,时间偏差导致数据错乱
02 查看当前时间状态
# 查看系统时间 date # 查看时区 timedatectl # 查看硬件时钟 hwclock --show # 查看时间同步状态 timedatectl status
03 配置时间同步
早期的linux常用NTP作为时间同步工具,但近年来chrony逐渐成为主流,Chrony是NTP的替代方案,比NTP更精确、更快速,CentOS 8开始默认使用Chrony。
Chrony的优势
安装Chrony
# CentOS/RHEL 8+ yum install -y chrony # Ubuntu/Debian apt-get install -y chrony
配置Chrony
配置文件位于 /etc/chrony.conf:
如服务器192.168.1.100(具备公网访问权限),作为服务端:
# 指定NTP服务器(可添加多个提高可靠性)server ntp.aliyun.com iburst server time1.cloud.tencent.com iburst # 允许哪些客户端同步(作为NTP服务器时) allow 192.168.1.0/24 # 即使未与外部服务器同步,也以本地时间为权威源 local stratum 10 # 记录漂移 driftfile /var/lib/chrony/drift # 日志 logdir /var/log/chrony
内网同网段机器 192.168.1.200 作为客户端,配置如下:
# 指定NTP服务器(可添加多个提高可靠性)server 192.168.1.100 iburst # 即使未与外部服务器同步,也以本地时间为权威源 local stratum 10 # 记录漂移 driftfile /var/lib/chrony/drift # 日志 logdir /var/log/chrony
启动Chrony
# 启动并设置开机自启 systemctl start chronyd # 开机自启systemctl enable chronyd # 查看状态 systemctl status chronyd # 设置时区为东八区 timedatectl set-timezone Asia/Shanghai
04 验证时间同步效果
Chrony提供了chronyc命令行工具,用于监控和管理时间同步状态。
1. 查看NTP服务器连接状态
2. 查看同步统计信息
System time:系统时间与NTP时间的偏差(理想值接近0)
RMS offset:平均偏移量(反映同步稳定性)
Leap status:闰秒状态(正常为Normal)
3. 强制立即同步
如果刚启动服务想快速同步,可执行:
chronyc makestep # 强制调整时间
客户端同步服务端时间时,如果同步失败,确认客户端到服务端的udp 123端口需要保持开放
firewall-cmd --zone=public --add-port=123/udp --permanentfirewall-cmd --reload
如果本文对你有帮助,欢迎“点赞”、“分享”、“推荐”,也欢迎在留言区互动,感谢!
点关注,一起成长!