Linux时间同步:从原子钟到Chrony配置

一、时间计量:从日晷到量子跃迁
        1. 人类计时革命简史(技术演进时间轴)
公元前2000年 → 日晷/漏壶 → 1583年钟摆理论 → 1967年石英表 → 1967原子钟 → 现代镱原子钟
  • 量子计时突破:镱原子钟以518万亿次/秒的振动频率(10⁻¹⁸精度),138亿年误差不超过1秒

  • 计算机计时依赖:CPU时钟晶体振荡器(32768Hz)→ RTC实时时钟 → 网络时间同步

     2. 时间标准体系
    标准类型实现方式典型应用场景
    本地时钟主板晶振+CMOS电池单机基础计时
    NTP同步网络时间协议服务器集群/日志审计
    PTP同步硬件时间戳(微秒级精度)金融交易/5G基站
    原子钟直接同步GPS/北斗卫星信号科研/军事设施

    作为维系现代IT基础设施秩序的基石,NTP协议(Network Time Protocol)通过分层校时机制,将全球服务器的时间误差控制在毫秒级。而新一代Chrony凭借对虚拟化、弱网络的深度优化,甚至能在局域网实现微秒级同步,成为云原生时代的“时间魔术师”。

    为何你的系统需要精准时钟?
    传统NTPd:稳定如机械钟摆,适合物理服务器长期运行
    现代Chrony:敏捷如量子计时,专为云环境、物联网设备而生

       ntp:将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在互联网上绝大多数的地方精度可以达到1-50ms,项目官网:http://www.ntp.org

       chrony : 实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。通过Internet同步的两台机器之间的典型精度在几毫秒之内,在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度

  • Stratum 0 → 原子钟/GPS
      ↓
    Stratum 1 → 直接连接Stratum 0的服务器
      ↓
    Stratum 2 → 从Stratum 1同步的节点
      ↓
    ...
    (最多16层)

    公共NTP资源池

  • # 亚洲区NTP池
    server 0.asia.pool.ntp.org iburst
    server 1.asia.pool.ntp.org iburst
    
    # 阿里云NTP
    server ntp.aliyun.com iburst
    
    # 国家授时中心
    server ntp.ntsc.ac.cn iburst
    2. Chrony vs NTPd对比
    特性ChronyNTPd
    同步速度分钟级小时级
    网络适应性支持间歇性网络需持续连接
    虚拟化支持优化时钟漂移补偿传统算法
    配置文件/etc/chrony.conf/etc/ntp.conf
    默认端口UDP 323/123UDP 123

三.时间同步服务的使用

    1.系统时间以及时区的管理           

1. 设定系统时间
# 通过timedatectl精确设置(推荐)  
sudo timedatectl set-time "2024-03-20 15:30:00"  

# 传统date命令设置(临时生效)  
sudo date -s "2024-03-20 15:30:00"  
2. 显示所有可用时区
# 查看完整时区列表  
timedatectl list-timezones  

# 过滤亚洲时区(支持模糊搜索)  
timedatectl list-timezones | grep -i Asia  

# 查看物理时区文件  
ls /usr/share/zoneinfo  
3. 设置系统时区
# 交互式设置(推荐)  
sudo timedatectl set-timezone Asia/Shanghai  

# 直接修改时区文件  
sudo rm /etc/localtime  
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
4. 配置系统时间计算方式
# 查看当前RTC模式  
timedatectl | grep "RTC in local TZ"  

# 启用UTC模式(Linux默认)  
sudo timedatectl set-local-rtc 0  

# 启用Local Time模式(解决Windows双系统冲突)  
sudo timedatectl set-local-rtc 1 --adjust-system-clock  
操作原理图解:
[硬件时钟(RTC)]  
    ↑↓ hwclock --systohc  
[系统时钟]  
    ↑↓ NTP同步  
[网络时间]  

通过timedatectl的三位一体控制,实现硬件时钟、系统时钟、网络时间的精准协同

  3.使用公共ntp时间到本机
            在RHEL 9 中使用的同步时间软件为hrony

            chrony由两个程序组成,分别是chronyd和chronyc。

            chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

            chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作

            chrony作为client使用方法如下:

dnf install chrony –y
 
vim /etc/chrony.conf
 
server ntp.ntsc.ac.cn iburst      #server 指定时钟服务器地址
 
                                  #iburst 当服务器可达时,发送一个八个数据包
 
                                  #包间隔通常为2秒,可加快初始同步速度

   4.显示同步信息

            在RHEL9中我们可以使用chronyc 来查看时间同步情况

            chronyc sources –v

1. 关键状态符号破译表

符号名称状态含义运维行动建议
*星标源当前主同步源,系统时钟正与其保持热同步监控偏移量变化趋势
+候选源优质备胎源,随时可接管同步任务确保至少2个+状态源
-淘汰源因偏差过大被算法暂时弃用检查网络质量或更换NTP源
?失联源连续8次同步请求无响应排查防火墙/路由问题
x异常源时间数据与其他源严重冲突(可能遭遇中间人攻击)立即隔离并检查NTP源可信度
~抖动源时间波动超过阈值(常见于不稳定的公共NTP)切换为

  1. Stratum(层级)

    • 原子钟GPS时钟源 → Stratum 0

    • 直接连接原子钟的服务器 → Stratum 1

    • 每级传递层级+1,最大有效层级16

    • 黄金法则:生产环境应使用Stratum ≤3的可靠源

  2. Poll(轮询间隔)

    • 计算公式:2^N 秒(示例中的6 → 2^6=64秒)

    • 动态调整范围:最小64秒(6),最大36小时(17)

  3. Reach(可达性)

    • 八进制掩码表示最近8次同步成功率

    • 示例377 → 二进制11111111 → 最近8次全部成功

    • 0值报警线:连续8次失败将触发自动切换

  4. LastRx(最后响应)

    • 显示最近有效同步的时间间隔

    • 示例39表示39秒前成功同步

    • 红色警报:超过Poll间隔3倍无响应

  5. Last sample(时间偏差)

    • +12us[ +23us] +/- 16ms

    • 当前偏差12微秒,测量误差范围±16毫秒

    • 危险阈值:持续超过100ms需人工干预

  5.时间同步服务器的搭建
            在RHEL9中ntp的服务端同样默认使用chrony

            chrony使用端口为udp 323,chrony兼容ntp所以在设定chrony为服务端是也会开启udp的123端口

            chrony 的优势:

                     更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天24小时运行的虚拟计算机而言非常有用

                     能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用

            在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响

            在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性

            无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟

            chrony的参数说明

                     server          #可用于时钟服务器,

                     iburst           #选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包

                                         #包间隔通常为2秒,可加快初始同步速度

                     driftfile        #根据实际时间计算出计算机增减时间的比率

                                         #将它记录到一个文件会在重启后为系统时钟作出补偿

                     rtcsync         #启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)

                     allow / deny #指定一台主机、子网,或者网络以允许或拒绝访问本服务器

                     bindcmdaddress #允许chronyd监听哪个接口来接收由chronyc执行的命令

                     local stratum 10 #即使server指令中时间服务器不可用

                                            #也允许将本地时间作为标准时间授时给其它客户端

             

                             vim /etc/chrony.conf
 
                             27 allow 0.0.0.0/0
 
                             30 local stratum 10

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值