欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Linux中的时间同步

Linux中的时间同步

2025/5/5 2:42:25 来源:https://blog.csdn.net/ATRI_555/article/details/147603470  浏览:    关键词:Linux中的时间同步

一、时间同步服务扩展总结

1. 时间同步的重要性

  • 多主机协作需求:在分布式系统、集群、微服务架构中,时间一致性是日志排序、事务顺序、数据一致性的基础。

  • 安全协议依赖:TLS/SSL证书、Kerberos认证等依赖时间有效性,时间偏差可能导致身份验证失败或中间人攻击漏洞。

  • 故障排查:日志时间戳若不同步,跨节点问题定位将极其困难。

  • 高精度场景:金融交易(毫秒级误差可能引发损失)、科学实验、5G网络同步(微秒级要求)等场景对时间精度要求极高。

2. NTP 协议核心机制

  • 层级结构(Stratum)

    • Stratum 0:高精度物理设备(如原子钟、GPS卫星时钟),直接提供时间源。

    • Stratum 1:与Stratum 0设备直连的NTP服务器,作为主时间服务器。

    • Stratum 2:从Stratum 1同步的服务器,依次类推(最多15层)。

  • 时钟漂移修正:通过算法(如Marzullo算法)计算网络延迟和时钟偏差,逐步调整系统时间,避免时间跳变。

  • 闰秒处理:NTP协议支持在协调世界时(UTC)插入闰秒时平滑调整系统时间。

3. chrony 核心原理

  •  设计目标

    • 动态网络适应:自动调整轮询间隔(minpoll/maxpoll),适应网络延迟和波动。

    • 快速收敛:在初始同步或网络恢复时,通过 iburst 参数快速完成时间校准。

    • 最小化时钟偏差:利用硬件时间戳(hwtimestamp)和实时时钟(RTC)补偿,减少累积误差。

    • 离线模式支持:无网络时依赖本地时钟维持时间稳定性。

  • 核心组件

    • chronyd 守护进程:后台服务,负责与时间源通信并调整系统时钟。

    • chronyc 命令行工具:用于监控和动态修改配置。

    • 配置文件 /etc/chrony.conf:定义时间源、策略、日志等参数。

4. NTP 服务(ntpd)

  • 特点

    • 长连接模式:持续与时间服务器通信,适合长期稳定运行的环境。

    • 资源占用低:适合嵌入式设备或低配置服务器。

    • 成熟稳定:经过多年验证,兼容性广泛(旧系统、网络设备)。

  • 局限性

    • 网络波动敏感:间歇性网络中断时同步效率下降。

    • 启动速度慢:初次同步可能需要较长时间。

    • 温度敏感性:物理服务器时钟易受环境温度影响,需频繁修正。

5. Chrony 服务

  • 核心优势

    • 动态适应网络:在断线、高延迟网络中快速收敛,适合移动设备、虚拟机、云环境。

    • 更小时间偏差:通过更精细的时钟频率调整算法(如RTC补偿),减少长期运行后的累积误差。

    • 安全性增强:支持NTP的Autokey协议,防止中间人攻击。

  • 关键特性

    • 硬件时间戳:利用网卡硬件记录数据包收发时间,消除操作系统调度延迟,显著提升精度(可达亚微秒级)。

    • 隔离模式:无网络时,依赖本地时钟维持时间一致性,避免服务中断。

    • 轻量级设计:服务进程资源占用更低,适合容器化环境。

二、时间同步服务器的使用

1.使用 timedatectl 命令进行系统时间与时区管理

timedatectl 基础命令与功能

命令功能说明
timedatectl查看当前时间、时区、NTP 同步状态等完整信息。
timedatectl set-time "YYYY-MM-DD HH:MM:SS"手动设置系统时间(需 root 权限)。
timedatectl list-timezones列出系统支持的所有时区名称(按 PageUp/PageDown 翻页)。
timedatectl set-timezone "时区名"设置系统时区(如 Asia/Shanghai)。
timedatectl set-local-rtc 0将硬件时钟(RTC)视为 UTC 时间(推荐)。
timedatectl set-local-rtc 1将硬件时钟(RTC)视为 本地时间(Windows 双系统场景可能需要)。
timedatectl set-ntp yes/no(true/false)启用/禁用 NTP 网络时间同步(启用后自动同步时间,覆盖手动设置)。

2.从公共 NTP 服务器中同步时间到本地机器

常用公共 NTP 服务器分类汇总表

服务商/项目NTP 服务器地址.地区/用途备注
NTP Pool Project[0-3].asia.pool.ntp.org亚洲地区(动态分配最近节点)全球分布式集群,自动选择最优节点。支持多区域(如 europe.pool.ntp.org)。
pool.ntp.org全球(默认分配最近节点)主入口,推荐普通用户使用。
阿里云ntp.aliyun.com中国大陆阿里云公共 NTP,低延迟,国内推荐。
ntp1-7.aliyun.com中国大陆(多节点负载均衡)冗余设计,提升可靠性(如 ntp1.aliyun.com 至 ntp7.aliyun.com)。
time.pool.aliyun.comWindows 系统专用Windows 时间服务默认支持。
国家授时中心ntp.ntsc.ac.cn中国大陆中国科学院国家授时中心官方服务器,高精度、高可靠性。
腾讯云ntp.tencent.com中国大陆腾讯云公共 NTP,适用于国内云服务器。
Googletime.google.com全球谷歌公共 NTP,支持 IPv4/IPv6,需网络可访问谷歌。
Microsofttime.windows.com全球Windows 默认时间服务器,兼容性强。
Appletime.apple.com全球macOS 和 iOS 设备默认时间服务器。
Amazon[0-3].amazon.pool.ntp.org全球(AWS 区域优化)亚马逊云 NTP 服务,适合 AWS 用户。
Cloudflaretime.cloudflare.com全球Cloudflare 提供的公共 NTP,低延迟。
CNNICcn.ntp.org.cn中国大陆中国互联网络信息中心(CNNIC)维护的 NTP 服务器。

下图我们将NTP服务器的地址源改写成国家授时中心的NTP服务器地址。

然后使用 systemctl restart chronyd.service 重启chrony服务,使新的配置生效。

在RHEL9中,chrony 是 RHEL 9 中默认的 NTP 客户端,chronyc 是 chrony 的控制工具,可用于查看详细的时间同步信息。

  • 查看 NTP 源状态:chronyc sources -v

  • 查看时间同步统计信息:chronyc tracking

chronyc sources -v 输出字段详解

字段说明示例/可能值
MS状态标记:表示源的状态,符号组合如下:
^*:当前同步的源。
^+:候选源(备选)。
^-:可接受的源。
^?:未同步或不可信源。
^x:被排除的源(误差过大)。
^*^+^-^?^x
Stratum层级:时间源的层级,范围 1-15,1 表示最高精度(如原子钟),层级逐级递增。123
Poll轮询间隔:与源同步的时间间隔(秒),以 2 的幂表示(如 6 表示 2⁶=64 秒)。6(64秒), 10(1024秒)
Reach可达性:最近 8 次轮询的成功率,8 进制表示(377 表示 8 次全部成功)。377(全成功), 25(部分成功)
LastRx最后接收时间:距离最后一次接收到源响应的时间(格式:秒/分钟/小时/天)。45s3h7d
Last sample最后样本偏差:最后一次时间同步的偏差,包含:
- 时间偏移(±数值):本地与源的时间差。
- 延迟(delay):网络延迟。
- 离散度(disp):误差范围。
+0.123ms ± 0.456msdelay 12.3ms
Source时间源地址:NTP 服务器的 IP 或域名。ntp.aliyun.com192.168.1.1
State源状态:详细状态描述,如同步状态、网络状态等。SYNCINITWAIT
Flags标志位:表示源的特性,如:
N:NTP 协议源。
P:PPS 信号源。
S:选择状态。
A:认证通过。
NNPSA
Condition状态条件:源的健康状态,如:
OK:正常。
FALSETICK:检测到异常。
JITTER:抖动过大。
OKFALSETICKJITTER

3.时间同步服务器的搭建

时间同步测试服务器IP地址:192.168.52.200/24

时间同步测试主机IP地址:192.168.52.20/24

以下配置都在Chrony 的配置文件 /etc/chrony.conf 中进行。

netstat -antlupe各列参数含义

说明
Proto协议类型(udpudp6 分别表示 IPv4 UDP 和 IPv6 UDP)。
Recv-Q接收队列大小(当前待处理的数据包数量,0 表示无积压)。
Send-Q发送队列大小(当前待发送的数据包数量,0 表示无积压)。
Local Address:Port本地监听的地址和端口:
0.0.0.0:123:监听所有 IPv4 接口的 NTP 服务端口(123)。
127.0.0.1:323:IPv4 本地回环地址的 chronyd 控制端口(323)。
::1:323:IPv6 本地回环地址的 chronyd 控制端口(323)。
Foreign Address:Port远端连接的地址和端口:
0.0.0.0:* 或 :::*:表示未建立连接(监听状态)。
State连接状态(UDP 无状态,因此显示 *)。
UID进程所有者的用户 ID(0 表示 root 用户)。
PID/Program进程 ID 和程序名称:
98619/chronyd:chronyd 守护进程的 PID。
其他扩展信息netstat -e 显示的额外信息(如网络统计,此处未显式展示)。

然后就发现测试主机可以同步到服务器端的时间了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词