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

文章目录

  • 前言
    • [一、 核心架构(无公网场景)](#一、 核心架构(无公网场景))
    • [二、 步骤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(容器网卡)的地址。


相关推荐
侠客行03172 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪2 小时前
深入浅出LangChain4J
java·langchain·llm
较劲男子汉4 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
老毛肚4 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
wypywyp4 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎4 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力4 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene4 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛4 小时前
Nginx日志切分
服务器·前端·nginx
Yvonne爱编码4 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python