文章目录
- 前言
-
- [一、 核心架构(无公网场景)](#一、 核心架构(无公网场景))
- [二、 步骤1:配置本地基准时间服务器(Chrony服务端)](#二、 步骤1:配置本地基准时间服务器(Chrony服务端))
-
- [1. 安装 Chrony(默认镜像已安装)](#1. 安装 Chrony(默认镜像已安装))
- [2. 修改配置文件 `/etc/chrony.conf`(关键:禁用公网同步)](#2. 修改配置文件
/etc/chrony.conf(关键:禁用公网同步)) - [3. 启动服务并设置开机自启](#3. 启动服务并设置开机自启)
- [4. 开放防火墙 UDP 123 端口(NTP协议端口,关闭防火墙可忽略此步骤)](#4. 开放防火墙 UDP 123 端口(NTP协议端口,关闭防火墙可忽略此步骤))
- [5. 验证基准服务器状态](#5. 验证基准服务器状态)
- [三、 步骤2:配置所有从服务器(同步基准服务器时间)](#三、 步骤2:配置所有从服务器(同步基准服务器时间))
-
- [1. 安装 Chrony(同上)](#1. 安装 Chrony(同上))
- [2. 修改配置文件 `/etc/chrony.conf`(核心:仅同步本地基准)](#2. 修改配置文件
/etc/chrony.conf(核心:仅同步本地基准)) - [3. 重启 Chrony 并设置开机自启](#3. 重启 Chrony 并设置开机自启)
- [4. 验证从节点同步状态](#4. 验证从节点同步状态)
- [四、 关键注意事项(无互联网场景)](#四、 关键注意事项(无互联网场景))
- [五、 故障排查](#五、 故障排查)
- 踩坑
前言
开发环境中申请的服务器往往存在时间错误问题,且多数无法连接互联网。对于服务器集群而言,保证所有节点时间完全一致是保障日志溯源、任务调度、数据同步等核心功能正常运行的关键前提。
在无互联网的局域网环境下,无需对接公网 NTP 服务器,只需选择一台稳定的服务器作为本地基准时间服务器,配置其他服务器强制同步该节点时间即可。本文推荐使用 Chrony 工具实现这一需求 ------ 相比传统 NTP 服务,Chrony 配置更简单、断网稳定性更强、时间同步效率更高,非常适合局域网集群场景。
一、 核心架构(无公网场景)
| 节点角色 | 核心配置 | 关键说明 |
|---|---|---|
本地基准服务器 (任选1台集群节点,如 192.168.1.10) |
禁用公网时间同步,以自身系统时间为基准 | 无需联网,时间准确性由自身决定(你不需要校准,只需集群统一) |
| 从服务器(其他所有节点) | 仅同步基准服务器时间,禁止其他时间源 | 确保集群所有节点时间和基准服务器完全一致 |
二、 步骤1:配置本地基准时间服务器(Chrony服务端)
1. 安装 Chrony(默认镜像已安装)
2. 修改配置文件 /etc/chrony.conf(关键:禁用公网同步)
conf
# 1. 注释/删除所有 公网server 配置(如 ntp.aliyun.com 等)
# 确保没有任何外部时间源,完全以本地时间为准
# 2. 启用本地基准模式(断网/无公网时,强制以自身时间为标准)
local stratum 10 # stratum值越小优先级越高,局域网设10足够
# 3. 允许集群网段设备同步(替换为你的局域网网段)
allow 192.168.1.0/24
# 4. 核心优化参数
driftfile /var/lib/chrony/drift # 记录时钟漂移,提高同步精度
makestep 10.0 3 # 若时间偏差>10秒,强制同步(适合集群首次校准)
rtcsync # 同步系统时间到硬件时钟(服务器重启后时间不丢失)
扩展:若需同步公网 NTP 服务器(可选)
若基准服务器可访问公网,需校准到标准时间,可添加以下配置(替换上述第 1 步):
typescript
# 1. 配置上游公网 NTP 服务器(优先国内节点,同步更快)
server ntp.aliyun.com iburst # iburst:启动时快速同步
server time1.aliyun.com iburst
server time2.aliyun.com iburst
3. 启动服务并设置开机自启
bash
# CentOS/RHEL 7+
systemctl start chronyd
systemctl enable chronyd
# Ubuntu/Debian
systemctl start chrony
systemctl enable chrony
4. 开放防火墙 UDP 123 端口(NTP协议端口,关闭防火墙可忽略此步骤)
bash
# CentOS/RHEL 防火墙
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
# Ubuntu UFW 防火墙
ufw allow 123/udp
ufw reload
5. 验证基准服务器状态
bash
# 查看时间源(应显示 "Local clock",代表以本地时间为基准)
chronyc sources -v
# 查看是否允许集群网段访问(返回 208 Access allowed 正常)
chronyc accheck 192.168.1.0/24

三、 步骤2:配置所有从服务器(同步基准服务器时间)
所有从节点执行完全相同的操作,确保只同步基准服务器。
1. 安装 Chrony(同上)
2. 修改配置文件 /etc/chrony.conf(核心:仅同步本地基准)
conf
# 1. 注释所有公网server,只添加基准服务器IP
server 192.168.1.10 iburst # 替换为你的基准服务器IP,麒麟x86系统是pool形式
# 2. 禁止从节点被其他设备同步(增强安全性,可选)
# allow 0.0.0.0/0 # 注释这行
# 3. 优化参数(和基准服务器一致)
driftfile /var/lib/chrony/drift
makestep 10.0 3
rtcsync
3. 重启 Chrony 并设置开机自启
bash
systemctl restart chronyd
systemctl enable chronyd
4. 验证从节点同步状态
bash
# 查看同步源(应显示基准服务器IP,状态为 "*" 代表已同步)
chronyc sources -v
# 查看时间偏移量(offset值趋近于0最好,单位毫秒)
chronyc tracking
# 对比和基准服务器的时间是否一致
date # 所有节点输出应完全相同
四、 关键注意事项(无互联网场景)
- 基准服务器时间初始化:首次搭建时,手动将基准服务器时间设为一个合理值(即使不准确,集群统一即可):
typescript
date -s "2025-12-23 10:00:00" # 格式:年-月-日 时:分:秒
hwclock -w # 将系统时间同步到硬件时钟,双重保障
- 防止基准服务器时间漂移
配置rtcsync参数后,系统时间会自动同步到硬件时钟;长期运行的集群,建议每月手动校准一次基准服务器时间。 - 禁止从节点访问公网
确保从节点防火墙禁止访问外部 UDP 123 端口,避免从节点私自同步公网时间,导致集群时间不一致。 - 集群一致性验证
可在所有节点执行date +%Y-%m-%d\ %H:%M:%S,输出应完全一致。
五、 故障排查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 从节点同步源显示 "?" | 主从节点网络不通;基准服务器防火墙未开123端口 | 测试 ping 192.168.1.10;检查基准服务器防火墙 |
| 时间偏差大但不同步 | 未配置 makestep 参数 |
在配置文件添加 makestep 10.0 3,重启chronyd |
| 重启后时间错乱 | 未开启 rtcsync |
启用 rtcsync 参数,执行 hwclock -w 手动同步系统时间到硬件时钟 |
踩坑
如何计算我的局域网网段
typescript
# 自动提取并计算当前接口的网段(无需手动算)
ip -4 addr show dev ens192 | awk '/inet / {print $2}'
如果不好使,ip addr后交给AI
如果你的网卡不是eth0 需要换成你的网卡名字。务必确认网卡名称,避免误取 lo(回环网卡)或 docker0(容器网卡)的地址。
