一、计时方式的发展
1.古代计时方式
- 公元前约 2000 年:古埃及人利用光线留下的影子计时,他们修建高耸的大型方尖碑,通过追踪方尖碑影子的移动判断时间,这是早期利用自然现象计时的典型方式 。
- 商朝时期:人们开发并使用泄水型水钟 —— 漏壶。通过水从壶中缓慢流出,依据水位下降的刻度来记录时间,开启了利用流体计时的新阶段。
- 北宋元祐元年(1086 年):天文学家苏颂将浑仪、浑象和报时装置结合,建造出 “水运仪象台”。它不仅能观测天象,还能准确计时与报时,是古代机械计时技术的集大成者。
- 14 世纪:机械钟在西方国家广泛使用,推动计时工具向机械化发展。
- 16世纪:奥斯曼帝国的科学家达兹・艾 - 丁(Taqi al - Din)发明机械闹钟,为计时工具增添新功能。
- 1583 年:伽利略提出著名的等时性理论,指出不论摆动幅度大小,摆完成一次摆动的时间相同,为钟表计时精度提升奠定理论基础。
- 1656 年:荷兰科学家克里斯蒂安・惠更斯(Christiaan Huygens)应用伽利略的理论,设计出世界第一只钟摆,大幅提升了机械钟表的计时精度。
- 1868 年:百达翡丽(Patek Philippe)发明手表,使计时工具更加便于携带,适应人们日常使用需求。
2.现代计时方式
- 1967 年:瑞士发布世界上首款石英表。石英晶体在电池电力作用下产生规律振动(每秒振动 32768 次),通过电路计算振动次数确定时间,石英钟表因精准、成本低迅速普及。
- 拉比提出原子钟构想后逐步发展 :拉比依据原子从高 “能量态” 迁至低 “能量态” 时释放电磁波并产生共振频率的原理,构想出原子钟(Atomic clock )。如今,铯原子(Caesium133)钟被很多国家(包括我国和美国 NIST)的标准局用作时间精度标准,GPS 系统也依赖其精确计时。
- 2008 年:锶(Strontium87)原子钟诞生,固有频率约合 430 万亿赫兹,将精度提升到 10 的 17 次方。
- 2013 年:由镱元素(ytterbium)制成的原子钟问世,固有频率约合 518 万亿赫兹,精度高达 10 的 18 次方,若从 138 亿年前宇宙诞生时开始计时,至今误差不超过 1 秒。此外,网络时间授时服务出现,用户可借此获取统一、标准的时间信号,极大简化时间同步过程。
二、时间同步服务
多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(Network Time Protocol )协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一。
Linux 时间同步服务的工具主要有 NTP 和 Chrony :
- ntp:将系统时钟和世界协调时 UTC 同步。局域网内,其精度可达 0.1ms,可满足企业关键业务系统等对时间精度要求高的场景。互联网上绝大多数地方,精度课达到 1 - 50ms,能满足普通网站服务器等应用的时间同步需求。ntp 项目官网是 http://www.ntp.org,在官网可获取软件、文档和社区支持等资源。
- chrony:作为实现 NTP 协议的自由软件,功能强大灵活。不仅能与 NTP 服务器同步,还支持 GPS 接收器等参考时钟,也可手动输入时间。chrony 能作为 NTPv4 服务器和对等体,为网络计算机提供时间服务。它适应多种复杂环境,在间歇性、拥挤网络,以及系统运行不连续或虚拟机场景下都能稳定工作。通过 Internet 同步时精度在几毫秒内,LAN 环境下精度为几十微秒,借助硬件时间戳或参考时钟可实现亚微秒级精度,常用于金融交易系统、航空航天控制等对时间精度要求极高的领域。
三、时间同步服务的使用
1.系统时间及时区管理
timedatectl 命令总结:
timedatectl | 查看系统时间 |
timedatectl set-time "2026-11-11 11:11:11" | 设定系统时间 |
timedatectl list-timezones | 显示系统的所有时区 |
timedatectl set-timezone "Asia/Shanghai" | 设定系统时区 |
timedatectl set-local-rtc 0|1 | 设定系统时间计算方式 (0表示 utc 时间计算方式,1表示 cst 时间计算方式) |
①timedatectl:查看系统时间
Local time | 当前系统时间 |
Universal time | 伦敦时间 |
RTC time | 硬件时间 |
Time zone | 时区 |
System clock synchronized | 系统时间同步开启 |
NTP service | NTP 协议开启 |
RTC in local TZ | 硬件时间是否使用本地时间 |
修改时间需要关掉 chronyd.service, NTP service 从 active 变为 inactive。
②timedatectl set-time "2026-11-11 11:11:11":设定系统时间为 2026-11-11 11:11:11
③timedatectl list-timezones:列出系统中所有可用的时区
④timedatectl set-timezone "Asia/Amman":将时区改为 Asia/Amman ,位于东三区(+0300),后面再改回 Asia/Shanghai。
⑤timedatectl set-local-rtc 1:RTC time 使用 Local time,(硬件时间同步本地时间),警告提示:跨区进行数据传输时会出现问题
⑥timedatectl set-local-rtc 0:RTC time 使用 Universal time(硬件时间同步伦敦时间)
2.客户端使用公共 ntp 地址同步网络时间
pool:指定时间源为 ntp.ntsc.ac.cn
iburst:当服务重启时,立即向 ntp.ntsc.ac.cn 主机发送同步时间的请求(选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包,包间隔通常为2秒,可加快初始同步速度)
chronyc sources –v:显示时间同步信息,图中可知时间与 114.118.7.163 主机的时间同步
*:表示同步当前最优主机时间 ?:表示不可达
- M:时间源模式 ^表示服务器,=表示对等方,#表示本地连接的参考时钟
- S:指源的状态
* 表示 chronyd 当前已经同步到的源。
+ 表示可接受的信号源,与选定的信号源组合在一起。
- 表示被合并算法排除的可接受源
? 指已失去连接性或者其数据包未通过所有测试的源。
x 表示chronyd认为时虚假行情的时钟,即标记该时间与其他多数时间不一致
~ 表示时间似乎具有太多可变性
- Name/IP address:显示源的名称或IP地址
- Stratum:显示时间来源的层
- Poll:显示轮询源的速率
- Reach:显示源的可达性寄存器以八进制数字打印
- LastRx:显示多长时间前从来源接收到了最后一个好的样本
- Last sample:此列显示上次测量时本地时钟与源之间的偏移
3.时间同步服务器的搭建
两台主机,192.168.10.200 作为服务器,增加 192.168.10.20 作为客户端,目的使客户端(192.168.10.20)同步服务器(192.168.10.200)的时间。以下是客户端主机的配置:
1)服务器(192.168.10.200)的命令配置
allow 0.0.0.0/0:允许所有人看服务器的时间,0表示没有,也表示全部
local stratum 10:设定时间层为第10层,即使 server 指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端
重启服务器中的时间同步服务,并查看时间同步情况
netstat -antlupe | prep chronyd:检测系统当中的端口(开了哪些端口)
-antlupe 的解释说明:
a:显示所有连接和监听端口
n:解析,以数字形式显示地址和端口号
t:显示 TCP 连接和监听端口。
l:显示处于监听状态的套接字
u:显示 UDP 连接和监听端口
p:显示进程的 PID(进程 ID)和名称
e:显示扩展信息
在服务器端还需关闭火墙,才能同步时间。
2)客户端(192.168.10.20)测试同步服务器时间
先修改客户端的时间,便于观察后续是否同步服务器时间。date 命令只能改系统时间,不能改硬件时间(RTC time)。
date 命令解释:
11 11 11 11 2026 . 11
月 日 时 分 年 秒
然后指定 ip 为服务器的 ip(192.168.10.200)
重启 chronyd 服务,然后查看可知已同步 192.168.10.200 的时间。