搭建局域网时间同步服务器

文章目录

  • 前言
    • [一、 核心架构(无公网场景)](#一、 核心架构(无公网场景))
    • [二、 步骤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  # 所有节点输出应完全相同

四、 关键注意事项(无互联网场景)

  1. 基准服务器时间初始化:首次搭建时,手动将基准服务器时间设为一个合理值(即使不准确,集群统一即可):
typescript 复制代码
date -s "2025-12-23 10:00:00"  # 格式:年-月-日 时:分:秒
hwclock -w  # 将系统时间同步到硬件时钟,双重保障
  1. 防止基准服务器时间漂移
    配置rtcsync参数后,系统时间会自动同步到硬件时钟;长期运行的集群,建议每月手动校准一次基准服务器时间。
  2. 禁止从节点访问公网
    确保从节点防火墙禁止访问外部 UDP 123 端口,避免从节点私自同步公网时间,导致集群时间不一致。
  3. 集群一致性验证
    可在所有节点执行 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(容器网卡)的地址。


相关推荐
有谁看见我的剑了?2 小时前
ESXI 虚拟机文件组成学习
运维·学习·云计算
代码笔耕2 小时前
我们这样设计消息中心,解决了业务反复折腾的顽疾
java·后端·架构
chenyuhao20242 小时前
Linux系统编程:多线程同步与单例模式
linux·服务器·c++·后端·单例模式
代码游侠2 小时前
应用——UDP 网络编程
linux·运维·开发语言·学习·算法
曼巴UE52 小时前
UE C++ FName, FText 测试
服务器·c++·ue5
忍冬行者2 小时前
通过ansible分发免密公钥、清理不再使用的公钥及验证公钥状态
linux·服务器·ansible
没有bug.的程序员2 小时前
负载均衡的真正含义:从算法到架构的深度解析
java·jvm·算法·微服务·架构·负载均衡
yc_xym2 小时前
[项目实践]言聚论坛(后端)
java·项目开发
多仔ヾ2 小时前
Solon + EasyQuery + ElementPlus 实现后台管理系统之 08-权限认证优化
java