简介:这是一套面向小型局域网的时间同步工具,包含服务器端与客户端程序,适合需要在无外部NTP条件下自行校准设备时钟的IT运维或开发人员。方案以Visual C++编写客户端,通过自定义协议与指定服务器通信,完成时间请求、响应、校准、周期性同步及错误处理,解决了设备间时间不一致引发的日志混乱、数据一致性等问题。资源包共55个文件,约6.69MB,涵盖C++源码文件(.cpp/.h)、VC工程文件(.dsp/.dsw)、可执行程序(.exe)、配置文件(.ini)及辅助资源,源码与编译产物并存,便于直接运行或二次修改。已有3201人学习/下载,适合希望用简化NTP思路实现局域网时间同步、并需要参考完整客户端实现细节的读者。
1. 项目概述
1.1 核心需求解析
时间同步这件事情,单机环境几乎没人会关注,因为操作系统装完默认就是对的,偏差个几秒也察觉不到。但一旦进入局域网环境、多台设备协同工作时,时间不一致带来的问题就会接踵而至:日志对不上、认证失败、数据库主从复制报错、文件时间戳错乱、定时任务触发时间混乱。尤其是很多企业内部应用中,服务器上跑着数据库集群、消息队列、Web服务,设备之间互相调用接口,时间差哪怕只有几秒钟,都可能引发难以定位的线上故障。
这个项目的核心目标很明确:在一个没有互联网出口、或者说不方便访问外部NTP(Network Time Protocol)服务器(网络时间协议)的内网环境中,搭建一套完整的时间同步体系。整体架构分为两端:一台作为时间服务器,承担标准时间的来源和分发角色;若干台客户端设备,通过局域网主动向服务器请求时间校准。
这套方案适配的场景很多。最常见的是企业内网、校园机房、实验室环境,另外像安防监控系统(NVR、IPC)与平台服务器之间、工业产线控制设备与上位机之间、甚至家里的NAS(Network Attached Storage)(网络附加存储)和各类智能设备之间,都会用到类似的思路。只要局域网内没有统一时钟,就可以用这套方案把时间基准拉齐。
我在这篇文章里会把服务器端的选型、配置、验证,以及Windows和Linux两类客户端的接入方式,全部一步步拆开讲清楚,最后还会整理几个我实际踩过的坑。内容基本覆盖了从零搭建到落地上线的完整过程,运维人员、系统管理员、网络工程师都能直接参照操作。
1.2 为什么局域网内需要独立的时间服务器
很多人第一个疑问是:设备明明有自动同步功能,为什么还要单独搭一台服务器?
这里有个关键点要讲清楚。Windows默认的时间同步目标是time.windows.com,Linux发行版默认指向的通常是ntp.ubuntu.com或ntp.aliyun.com这类公网NTP服务器。如果设备能上网,确实可以靠这些外部服务器校准时间。但问题在于:
第一,很多生产网络是物理隔离或者逻辑隔离的,根本没有到公网的出口。这种情况下默认的时间同步就等于失效状态,设备时间只能靠主板RTC(实时时钟芯片)硬撑着,时间漂移用不了多久就会变得很明显。
第二,就算有公网出口,大批量设备同时去请求外部NTP服务器,中间链路延迟、丢包、限速都会导致同步精度不稳定。而且对于企业环境来说,设备每次开机都往外网发时间请求,既不安全也不可管理。
第三,审计和合规的考虑。金融、政务、医疗这类行业往往要求内部设备使用统一的时间源,这个时间源需要可控、可查、有记录。搭建局域网内的时间服务器,本质上是把时间源和分发机制掌握在自己手里。
所以结论很直接:内网时间同步,最稳妥的方式就是在局域网里选一台稳定的机器作为时间服务器,其他设备统一向它看齐。这台服务器自身的时间源可以是外网NTP、GPS授时模块,也可以退而求其次用本地时钟,具体看项目精度要求来定。
2. 技术方案与选型拆解
2.1 NTP协议的核心原理
在动手搭建之前,建议花两分钟理解一下NTP协议的工作方式,后面排错能省很多事。
NTP(Network Time Protocol)是运行在UDP 123端口上的网络协议。客户端向服务器发送一个包含本地时间戳的数据包,服务器收到后附加上自己的接收时间和发送时间,再返回给客户端。客户端根据这几个时间戳计算出网络传输延迟和本地时钟相对服务器的偏移量,然后调整本地时间。
这个过程不是简单的“服务器几点我就改成几点”,而是包含了一整套时钟偏移计算和滤波算法。NTP会根据多次采样的结果,剔除掉明显异常的网络噪声样本,再逐步校正本地时钟的相位和频率。这也是为什么NTP越跑越准,而手动date命令改时间容易出现来回跳变的原因。
协议分很多层级(Stratum)。第0层是原子钟、GPS授时这类高精度时钟源;第1层是直接连接到第0层的服务器;第2层是从第1层同步的服务器;以此类推。层级越低,权威性越高,但并不意味着第3层就完全不能用。实际上在局域网内部,只要最顶层时间源是准确的,下面的层级通过逐级同步,精度依然足够满足绝大多数业务需求。
2.2 chrony与ntpd怎么选
Linux生态下,时间同步软件主要有两个流派:传统的ntpd和新一代的chrony。
ntpd是历史最悠久的NTP实现,在RHEL 6及之前的时代是绝对的主流。它采用渐进式时间调整策略,如果本地时钟与服务器相差太大,默认策略是缓慢调整频率而不是直接跳变,好处是时间平滑过渡,坏处是让一个偏差很大的时钟收敛到正确值可能需要很长时间。
chrony是近年来被各大发行版默认选用的后起之秀。它同样实现了完整的NTP协议,但在同步速度和稳定性上做了大量优化。最大的区别是:chrony对网络条件不稳定的环境适应能力更强,短时间内就能完成初始同步;而且在网络断开期间,它依然能持续估计时钟漂移率,网络恢复后可以快速重新锁定。
ModernRHEL/CentOS 8+、Ubuntu 20.04+ 这些系统默认预装的就是chrony。就局域网时间服务器这个场景来说,我的建议是直接用chrony。配置简单、命令直观、同步快,而且能同时充当NTP客户端和服务器,一个服务全搞定。
对于Windows Server环境,微软也提供了内置的W32Time服务,它同样基于NTP协议实现。虽然Windows的W32Time没有Linux下那么丰富的参数可调,但它和Active Directory域环境集成得很好,域内客户端的默认时间源就是域控。如果你的环境是Windows为主,用W32Time就够了;如果混合环境,Windows以Linux时间服务器作为上游也完全没有问题。
2.3 服务器端时间源的三种场景
局域网时间服务器自身的时间基准如何获取,是整个方案里最关键的决策点,直接影响最终的时间精度。根据项目预算和精度要求,通常有三种选择。
第一种,也是最常见的:时间服务器接外网,同步公网NTP服务器。这种方式成本最低、架设最简单,但前提是服务器必须能访问外网的UDP 123端口。对于纯粹的内网隔离环境不适用。
第二种:时间服务器接GPS/北斗授时模块。很多机房会买带授时功能的天线或者专用授时服务器,通过串口或者网络把原子钟级别的时间信号引入。精度可以达到毫秒甚至微秒级,适合对时间有严格要求的金融交易、自动化测试、电力监控类场景。
第三种:没有外部时间源,完全靠本地时钟。这种情况下偏差会随时间慢慢累积,但通过合理的同步策略依然可以在局域网内部做到多台设备之间的时间一致性。也就是说大家可能都和“真实时间”有个固定偏移,但互相之间偏差很小。对于日志分析、任务调度这类场景基本够用。
按我个人的经验,中小企业内网环境直接选第一种就行。服务器能访问外网就配置外网源,不能访问就用手动校准的方式定期维护,配合一篇紧急预案就够了。我下面给出的配置方案以最常见的第一种为准,然后补充说明如何切换成另外两种。
2.4 网络拓扑与时间同步方向
搭建时间同步服务之前,先理清楚网络里面谁是源、谁是宿,这是个很容易被忽略但非常关键的问题。
以最典型的企业内网为例,内网交换机划分了多个VLAN(虚拟局域网)(比如办公区、服务器区、测试区),时间服务器通常是单独一台低配服务器或者直接复用某台基础设施机器,放在服务器区。所有需要时间同步的设备,不管在哪个VLAN,只要网络路由可达,都能通过UDP 123端口访问到这台时间服务器。
需要注意的有两点。一是如果网络中启用了防火墙或者交换机ACL(访问控制列表),必须显式放行UDP 123端口的双向通信,因为NTP请求和应答都会用到这个端口。二是如果存在多个子网,建议在核心交换机上做好策略,允许客户端网段访问时间服务器的123端口,而不是图省事直接全放通。
再补充一点:同步的方向一定要明确。正常情况下是客户端主动向服务器发请求,服务器是被动应答方,这叫“拉模式”。很多工业协议或者组播场景下也有“推模式”(服务器主动向客户端广播时间),但在标准NTP场景下不用去深入,保持默认的客户端-服务器模式就足够。
3. 服务器端搭建全流程
3.1 环境准备与基础配置
这个项目我用一台CentOS 7.9的虚拟机作为时间服务器,分配了1核2G的资源,规模不大的内网完全够用。为了验证跨平台的兼容性,客户端分别准备了一台Windows 10和一台Ubuntu 22.04,覆盖两种最常规的接入场景。
建议把服务器的系统盘和数据盘做合理规划。时间同步服务本身不占什么存储空间,日志也相对小,所以不用为这个服务单独挂盘。但如果后续打算做时间源的状态监控和grafana可视化展示,建议预留一点点磁盘空间存历史状态数据。
操作之前先确认两件事:系统时间时区是否正确,以及当前系统时间和真实时间的偏差量级。
# 查看当前系统时间和时区 date -R # 查看硬件时间 hwclock -r如果时区不对,先修正。国内服务器一般设置为Asia/Shanghai:
# 设置时区为上海 timedatectl set-timezone Asia/Shanghai # 确认修改结果 timedatectl如果系统还没有安装chrony,需要先装上。CentOS 7默认可能带的是ntpd,可以用下面的命令统一替换成chrony:
# 安装chrony yum install -y chrony # 如果确认ntpd存在且不需要,先停掉再禁用 systemctl stop ntpd systemctl disable ntpd3.2 chrony核心配置解读
chrony的配置文件在/etc/chrony.conf。这个文件虽然项目默认自带一套能用的配置,但建议还是从头梳理一遍,确保符合我们局域网时间服务器的定位。
先看一个基础但完整的配置样例:
# 使用pool.ntp.org服务器池作为上游时钟源 pool 2.centos.pool.ntp.org iburst # 允许局域网内所有客户端访问本机时间服务 allow all # 本机不向其他NTP服务器提供同步服务(当客户端时的行为) # 实际上这两行配置的含义是告诉chrony不要拒绝任何来源的请求 # 本地时钟作为备用时间源,在无法访问外网时继续提供服务 local stratum 10 # 指定日志文件目录 logdir /var/log/chrony逐行拆解一下。
pool是chrony支持的一种配置语法,意思是针对一个域名解析出来的所有IP地址都建立NTP会话,并在其中挑选最优的时间源。iburst参数非常关键,它允许客户端在启动时快速发送多个请求以加快初次同步速度。如果不加这个参数,初始同步可能要等待几轮轮询周期,用户体验会差不少。
allow all表示允所有IP访问本机时间同步服务。在生产环境中我一般不会直接写all,而是精确到网段。比如只允许192.168.1.0/24网段访问,写法是:
allow 192.168.1.0/24local stratum 10这一行的意思是:即使所有上游时间源都不可用,本机依然以自身本地时钟作为第10层级的时间源,继续向客户端提供时间同步服务。这里的stratum值设得比较大,是为了保证本机作为备用源的优先级低,只有在真正的上游源不可达时才生效。
最后通过systemd启动并验证:
systemctl enable chronyd systemctl start chronyd systemctl status chronyd3.3 防火墙与安全组放行
服务器端的防火墙策略如果不放行UDP 123端口,哪怕chrony配置得再完美,客户端也同步不了。这里我遇到过很多次,配置全套没问题,最后就是防火墙没开,白白排查了一整晚。
CentOS 7默认使用firewalld作为防火墙管理工具,放行端口的方式如下:
# 放行UDP 123端口 firewall-cmd --permanent --add-port=123/udp firewall-cmd --reload # 确认规则已经生效 firewall-cmd --list-ports如果你的环境里使用的是iptables,等价的操作是:
iptables -A INPUT -p udp --dport 123 -j ACCEPT service iptables save这里额外提醒一句:NTP使用的是UDP协议,不是TCP。有些朋友习惯性只放行TCP端口,结果NTP请求永远得不到响应。这个细节虽然看起来基础,但确实是局域网时间同步故障里非常常见的原因。
另外,如果服务器在云上(比如私有云的虚拟机),还要检查安全组规则。很多云平台的安全组默认只放行22、80、443等常用端口,UDP 123不在其中,需要在控制台额外添加一条入站规则。别问我是怎么知道的。
3.4 时间服务器的状态验证
配置完成之后,如何确定服务器已经正常工作?推荐下面几条命令:
# 查看当前同步状态 chronyc tracking # 查看时间源列表和他们的状态 chronyc sources -v # 显示每个时间源的详细统计信息 chronyc sourcestats -vchronyc tracking输出里重点关注几个字段:
Stratum:当前本机的层级。如果显示2,说明成功同步到了第1层服务器,符合预期。Ref time (UTC):最后一次从上游服务器同步到的时间点。System time:本机当前时间与参考源之间的偏差,单位是纳秒。数字越小代表越准。Leap status:必须显示为Normal,如果显示Not synchronized说明上游同步还没成功。
配合chronyc sources -v可以查看具体的时间源主机。输出中标记为^*的表示当前选中的同步源,如果没有^*而是^?状态,说明该源不可用或者还没完成同步。
在局域网里做时间服务器,我把上游的同步结果验证清楚后再发布服务给客户端,是很重要的。因为一旦客户端接入了一个本身时间不准的服务器,下面所有设备都会跟着错,后面排查起来难度翻倍。
4. 客户端配置实操
4.1 Linux客户端接入(以Ubuntu 22.04为例)
Linux客户端的接入方式与服务器端大体相同,差别只是配置上游源的方向反过来了。客户端不向外网NTP请求,而是指向我们刚搭好的局域网时间服务器。
Ubuntu 22.04默认也是用chrony,直接用以下方法修改:
# 编辑chrony配置文件 vim /etc/chrony/chrony.conf把默认的ntp源配置注释掉,替换为局域网时间服务器地址:
# 注释掉默认的公共时间服务器 # pool ntp.ubuntu.com iburst # 添加局域网的NTP服务器 server 192.168.1.100 iburst这里192.168.1.100换成你自己时间服务器的实际IP。iburst同样是为了让客户端启动时快速同步。
保存退出后重启服务:
systemctl restart chrony systemctl enable chrony验证同步效果:
# 查看时间源 chronyc sources -v # 查看跟踪状态 chronyc tracking如果一切正常,chronyc sources中应该能看到^*192.168.1.100,并且chronyc tracking里的Stratum会显示为3(因为服务器是2,客户端顺延一级)。
4.2 Windows客户端接入
Windows客户端接入局域网时间服务器有两种常见方式:图形界面操作和命令行操作。图形界面适合单台设置,命令行适合域环境或批量部署。
先看图形界面方式。右键任务栏时间 -> 调整日期和时间 -> 其他时钟 -> 其他日期和时间 -> 设置时间。在“Internet 时间”标签页点击“更改设置”,将服务器地址填为局域网时间服务器的IP,然后点击“立即更新”。
这种操作虽然直观,但有一个明显的坑:Windows默认的时间同步周期是604800秒,也就是7天才同步一次。这意味着即使配置正确,最坏情况下也要等7天才能完成第一次自动同步。想要立即生效,或者希望缩短同步周期,就得借助命令行。
以管理员身份打开CMD,执行:
# 停止当前的时间同步服务 w32tm /stop # 设置外部时间源 w32tm /config /manualpeerlist:192.168.1.100 /syncfromflags:manual /reliable:yes /update # 立即触发同步 w32tm /resync # 启动时间同步服务 w32tm /start还可以通过注册表调整同步周期。在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters中把NtpServer设置为时间服务器地址,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config中调整Period的值。Period数值以秒为单位,设置成900表示15分钟同步一次。
批量部署的场景下,用组策略(GPO)下发是最标准的做法。在组策略管理编辑器里,进入“计算机配置 -> 管理模板 -> 系统 -> Windows 时间服务 -> 时间提供程序”,启用“配置Windows NTP客户端”,填入域名或IP即可。
4.3 嵌入式设备与存储设备的接入方式
局域网里除了Windows和Linux服务器之外,还有一类非常常见的设备需要时间同步:网络摄像头、NVR、路由器、交换机、NAS等。
这类设备通常没有命令行入口,但基本都提供了Web管理后台。进入后台的时间设置页面,一般都能看到“NTP服务器”或者“时间同步服务器”的配置项。填入局域网时间服务器的IP,保存后设备就会定期向它发起时间校准请求。
需要注意的是,不同厂商的设备在NTP同步周期上的默认设置差异很大。有些设备默认一天才同步一次,有些则支持配置同步间隔。如果项目对时间精度要求比较高,尽量把同步周期设短一些,比如每30分钟或每小时一次。嵌入式设备定位低端的话,NTP实现可能有bug,配置了同步源也不生效,建议实际观察一段时间,确认设备时间确实在向服务器靠拢,而不是配置了就万事大吉。
5. 精度验证与性能分析
5.1 局域网时间同步的精度基准
在局域网环境下,NTP的同步精度主要受两个因素影响:网络延迟和协议栈处理时间。相比公网环境动辄几十毫秒的延迟波动,局域网内的延迟通常只有零点几毫秒到几毫秒,因此理论上可以做到亚毫秒级的同步精度。
当然,这是理论值。实际的同步精度取决于很多细节。比如服务器端的系统负载、网卡的中断处理效率、交换机是否开启了节能以太网(ERP)等。实际局域网NTP同步精度普遍可以稳定在1毫秒到5毫秒之间,对绝大多数业务来说完全够用。
如果项目需要达到微秒级甚至纳秒级的同步精度,就要考虑PTP(精确时间协议)方案了,也就是IEEE 1588协议。PTP的同步原理是硬件打时间戳,直接绕过操作系统的协议栈,在支持PTP的交换机和网卡配合下,可以把同步精度推进到微秒级甚至亚微秒级。自动驾驶、音视频同步、工业自动化这些领域都会有更严格的时间同步方案。
回到本项目的定位:如果你的目标是让局域网内所有设备时间一致,偏差控制在几毫秒以内,标准NTP已经足够。
5.2 如何用日志和工作负载验证效果
配置完成不等于万事大吉,验证是必须做的一步。我一般从三个维度验证时间同步结果。
第一,直接对比时间。在客户端上执行数据时间对比命令,把系统时间与服务器时间直接对比。Linux下可以用下面的命令粗略判断:
# 安装ntpdate工具 yum install -y ntpdate # 查看本机时间和服务器时间的偏差 ntpdate -q 192.168.1.100ntpdate -q的-q参数表示只查询不同步,输出里会显示服务器的应答时间以及和本机的偏移量。注意这个命令主要用于验证,不建议作为定期同步的手段使用。
第二,查看服务质量统计。chrony本身就提供了很好的统计能力:
# 查看详细的到达延迟和偏移统计 chronyc sourcestats -v里面的Delay列代表网络往返延迟,Offset列代表偏移量。稳定状态下,这两项数值应该在一个比较小的范围内波动。如果偏移量突然跳变,很可能是网络有问题,或者服务器时间源本身发生了跳变。
第三,实际业务验证。在有多台服务器的环境里,把时间同步启用后,观察业务日志里的时间戳是否对齐。特别是数据库集群,可以通过查看各节点的提交日志时间戳来判断时间一致性。这个方法最真实,也最能说明问题。
6. 常见问题与排查技巧实录
6.1 客户端同步失败,显示“Server unreachable”
这个是最常见的问题,没有之一。客户端无论怎么操作,状态都显示无法连接服务器。
排查路径按优先级排列:
第一,检查网络连通性。在客户端上ping时间服务器IP,确认基础网络没有问题。注意NTP走的是UDP 123端口,所以ping只能证明网络通,无法证明UDP 123可达。
第二,检查服务器端防火墙。这是最大的嫌疑点。用下面命令在客户端测试UDP端口是否可达:
# 在服务器上监听UDP 123 tcpdump -i any port 123 # 在客户端发起时间同步请求,观察抓包结果 chronyc sources -v或者使用nc命令测试UDP端口:
nc -uvz 192.168.1.100 123如果抓不到任何UDP包,基本可以确定是防火墙拦截了。
第三,检查chrony的allow配置。如果配置文件里没有allow,或者写死的网段和客户端不在同一网段,尽管进程在运行,客户端请求也会被拒绝。
6.2 时间同步后马上又跳回去了
这种情况往往不是网络问题,而是客户端的时区或当前时间偏差太大。
举个例子:客户端的系统时间差了10个小时,通过NTP同步校准之后,系统日志和业务系统的时间立刻就正确了,但是没过多久又变回了错误的时间。这种情况下首先要检查硬件时间(RTC)是否与系统时间不一致。Linux系统里,系统时间和硬件时间是两套体系。NTP同步的是系统时间,如果系统时间每次重启后都会从错误的硬件时间恢复过来,就会看到“同步后马上又跳回去”的诡异现象。
解决办法是把硬件时间也校准过来:
# 将系统时间写入硬件时钟 hwclock -wWindows环境同理,可以通过w32tm /resync强制同步,然后确认是否正确写回BIOS时间。
6.3 服务器时间源偏差大,导致时间大幅跳变
时间服务器自身如果和上游NTP时间源偏差较大,同步到客户端的时候就会产生一次时间跳变。对于依赖连续时间戳的应用程序(数据库、监控系统)来说,跳变可能引发异常告警。
两种解决思路。
第一种:在chrony配置里启用makestep参数。这个参数控制的是当系统时间与参考源偏差超过阈值时,允许一次性调整时间而不是渐进式调整。对于刚部署的环境,第一次同步时直接跳变是合理的,可以让时间快速收敛。
# 如果偏差超过1秒,则在前三次更新中步进调整时间 makestep 1 3第二种:对时间要求非常苛刻的环境,可以考虑引入GPS授时或者更高精度的外部时钟源,确保上游时间源本身稳定精准。
6.4 批量客户端同时请求导致服务拥塞
这个问题的典型场景是:几十台设备同时开机,在同一时间发起NTP同步请求,导致时间服务器瞬间高负载,部分请求超时。
解决思路有两个方向。一是从时间服务器端入手,适当调大chrony的处理能力上限。这个参数在anonmaxclient等配置项中,但大多数场景下默认值已经足够。二是从客户端入手,错峰同步。比如Windows域环境下通过组策略设置不同的轮询间隔,让不同机器分布在不同时间点请求同步。
还有一个比较现实的情况:如果局域网内的设备数量达到几百上千台,单台时间服务器的处理能力可能成为瓶颈。此时可以考虑多级布点,核心时间服务器下面再挂几台二级时钟服务器,客户端就近同步。
6.5 常见问题速查表
| 问题描述 | 可能原因 | 快速排查方法 | 解决办法 |
|---|---|---|---|
| 客户端无法连接服务器 | 防火墙拦截UDP 123 | tcpdump抓包确认 | 放行UDP 123端口 |
| 客户端同步后时间跳变 | 上游时间源本身偏差大 | chronyc tracking查偏移 | 校准服务器上游源 |
| 重启后时间恢复错误 | 硬件时间未同步 | date和hwclock对比 | 执行hwclock -w |
| Windows长时间不同步 | W32Time默认周期过长 | 查询同步周期配置 | 修改注册表Period |
| chrony服务异常退出 | 配置语法错误 | journalctl -u chronyd | 检查配置文件语法 |
| 时间一直不收敛 | 网络延迟异常波动 | 检查交换机链路 | 排查网络质量 |
7. 我的实际操作心得
跟时间同步这个问题打了这么多年的交道,最后分享几个个人体会。
第一条就是:先把服务器端的时间彻底校准,再去处理客户端。很多时候客户端怎么同步都对不上,最后发现是服务器本身的系统时间来源就不准。上游错了,下游全错。这个因果链一定要记住。
第二条:不要在业务高峰时段做首次大规模时间同步。如果局域网内有几百台设备需要统一接入,建议先拿三五台机器做试点,观察同步状况稳定之后,再分批次放开。我见过有人在周五下午直接全量推送时间配置,结果周五晚上生产环境日志时间跳变,告警响了一整夜,最后还是靠回滚才恢复平静。
第三条:时间同步不是一次性工作。它是需要长期维护的基础设施服务。即使配置好之后一切正常,也需要定期检查服务器的上游同步状态是否健康、局域网内的设备是否出现了新的时间漂移。我习惯在监控系统里加上chronyc tracking的关键指标采集,如果System time偏差超过50毫秒就自动告警。
第四条:别把所有设备都绑定在一台时间服务器上。对于要求比较高的环境,可以设置两台时间服务器,一台为主一台为备。客户端配置上可以填两个地址,主服务器挂了自动切换到备用。单点故障的事情,能避免就尽量避免。
最后再分享一个小技巧:在局域网里,如果只是需要快速对齐时间而懒得搭完整服务,可以用ntpdate 192.168.1.100凑合一下,但这只适合临时一次性使用。长期、自动化的环境下一定要走完整的NTP服务,配置好自启动和周期性轮询,不然后面维护成本会很高。
这套方案跑起来之后,局域网内所有设备的时间都向同一台服务器看齐,日志分析的时候再也不用靠着时间戳猜来猜去,任务调度也能按照预想的时间稳稳执行。基础设施的稳定,很多时候就藏在这些不起眼的细节里。
本文还有配套的精品资源,点击获取