Linux 关于NTP同步硬件时钟的可靠性验证

Linux关于NTP同步硬件时钟的可靠性验证

  • 1. 常见的时钟类型
    • 1.1 系统时钟
    • 1.2 硬件时钟
  • 2. 常见时钟同步方式
    • 2.1 ntpd服务
      • 2.1.1 推荐配置/etc/ntp.conf
      • 2.1.2 推荐配置/etc/sysconfig/ntpd
    • 2.2 定时任务+ntpdate
    • 2.3 ntp命令同步状态相关命令解读
      • 2.3.1 ntpq -pn解读
      • 2.3.2 ntpdate -u解读
      • 2.3.4 ntpdate -udq解读
    • 2.4 该如何配置时钟同步?
  • 3. 系统时钟同步到硬件时钟
    • 3.1 ntpd.service的相关配置/etc/sysconfig/ntpd SYNC_HWCLOCK=yes【不生效】
    • 3.2 ntpdate.service 的配置/etc/sysconfig/ntpdate能够在重启这个服务的瞬间执行一次时钟同步【默认禁用】
    • 3.3 linux内核默认有 11 分钟模式【默认关闭,同步逻辑复杂,不靠谱】
    • 3.4 该如何同步硬件时钟?
  • 4. 疑问和思考
    • 4.1 reach是什么?377代表什么?
    • 4.2 如果时钟有延迟,但是能够ntp缓慢追时间,该如何配置?
  • 5. 参考文档

NTP(Network Time Protocol)是一种用于同步网络中各个计算机的时间的协议。它的主要目的是确保网络中的所有计算机都能够精确地使用相同的时间。NTP通过在网络中的某个服务器上提供准确的时间源,然后将该时间源同步到其他计算机上,来实现时间同步。

NTP使用一种层级化的结构来同步时间。在这个结构中,有一个或多个主要的时间服务器,称为Stratum 1服务器。这些服务器通过一些高精度的时钟源(如原子钟或GPS)来提供准确的时间。其他计算机通过与这些主时间服务器交互,定期询问并调整自己的时间。

NTP的工作原理基本上是通过比较计算机的本地时钟与主时间服务器的时钟来确定时间的差异,并对本地时钟进行调整。这个调整过程是连续的,直到本地时钟与主时间服务器的时钟达到同步。

NTP具有很高的精度和稳定性,并且能够在广域网和局域网等各种网络环境下工作。它在互联网和许多其他计算机网络中被广泛使用,特别是需要时间同步的应用,如金融交易、科学研究和电信系统等。


ntp是比较常用的进行时钟同步的方式,通常使用ntpd或者定时执行ntpdate的方式进行时间同步,时钟同步的都是系统时钟,但是通常比较少关注硬件时钟的同步。如果系统不能将时间同步到硬件时钟,就有可能导致服务器重启时,服务器的时间出现错乱。

本文针对常用的硬件时钟同步方式进行探讨。

1. 常见的时钟类型

1.1 系统时钟

系统时钟是指操作系统内部维护的一个计时器,用于记录和管理系统运行的时间。系统时钟通常基于硬件时钟的参考,并通过操作系统内核进行管理和更新。系统时钟可以提供更高精度的时间信息,并支持各种时间相关功能,如定时器、调度器和时间同步等。

1.2 硬件时钟

硬件时钟(也称为实时时钟或RTC)是计算机的一部分,通常是一个电池供电的石英时钟芯片。硬件时钟会持续运行,即使计算机处于关机状态,以确保计算机重新启动时有一个可靠的时间参考。硬件时钟通常以二进制编码的方式记录时间,包括年、月、日、时、分、秒等信息。

2. 常见时钟同步方式

通常使用ntpd和ntpdate 2钟方式进行时钟同步。两者有联系,也有差别。

在这里插入图片描述

2.1 ntpd服务

通常会部署ntpd服务来进行时钟同步,这种方式比较优雅。

  • 优点:如果时钟出现延迟能够缓慢、平滑的追踪数据
  • 缺点: 如果跟上游时钟延迟(默认1000s)过大,ntpd服务会自动退出

2.1.1 推荐配置/etc/ntp.conf

推荐的相关配置如下/etc/ntp.conf

# Common configure
driftfile /var/lib/ntp/drift
logfile    /var/log/ntp.log   #####优化项:日志文件输出# tinker config panic 1000 seconds and step-threshold 1000 seconds
tinker panic 1000 step 1000   #####优化项:同步阈值配置(按需修改,参考下文【时钟跳变阈值】)# Default acl  #####优化项:调整acl策略
restrict    default kod nomodify notrap nopeer noquery 
restrict -6 default kod nomodify notrap nopeer noquery# Local acl
restrict 127.0.0.1 
restrict ::1# NTP server acl  #####优化项:调整acl策略,规避安全风险(下列域名按需修改)
restrict time1.tencentyun.com nomodify notrap nopeer noquery
restrict time2.tencentyun.com nomodify notrap nopeer noquery
restrict time3.tencentyun.com nomodify notrap nopeer noquery
restrict time4.tencentyun.com nomodify notrap nopeer noquery
restrict time5.tencentyun.com nomodify notrap nopeer noquery# NTP server configure  #####优化项:调整同步参数(下列域名按需修改)
server time1.tencentyun.com iburst minpoll 6 maxpoll 10
server time2.tencentyun.com iburst minpoll 6 maxpoll 10
server time3.tencentyun.com iburst minpoll 6 maxpoll 10
server time4.tencentyun.com iburst minpoll 6 maxpoll 10
server time5.tencentyun.com iburst minpoll 6 maxpoll 10# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography. 
keys /etc/ntp/keys# Specify the key identifiers which are trusted.
#trustedkey 4 8 42# Specify the key identifier to use with the ntpdc utility.
#requestkey 8# Specify the key identifier to use with the ntpq utility.
#controlkey 8# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstatsdisable monitor

2.1.2 推荐配置/etc/sysconfig/ntpd

ntpd中还有2个关键配置-x-g,在时钟延迟的情况下,有很大的影响。先通过man ntpd获取原文解释。

       -x      Normally, the time is slewed if the offset is less than the step threshold, which is 128 ms by default, and stepped if abovethe threshold. This option sets the threshold to 600 s, which is well within the accuracy window to set the clock  manually.Note: Since the slew rate of typical Unix kernels is limited to 0.5 ms/s, each second of adjustment requires an amortizationinterval of 2000 s. Thus, an adjustment as much as 600 s will take almost 14 days to complete. This option can be used  withthe  -g  and  -q  options.  See the tinker command for other options. Note: The kernel time discipline is disabled with thisoption and the step threshold is applied also to leap second corrections.

通过原文,可以得知

-x 能够在一定范围内进行平滑同步,当时间差超过跳变阈值后,时钟会以跳变的方式进行同步

  • 当时间差在128 ms以内,平滑同步, 最大的平滑周期时0.5ms/s(同步1s需要2000ms,同步600s许需要14d左右)
  • 当时间差超过128ms后,跳变同步
  • 可以通过tinker中的step设置平滑同步的跳变阈值
       -g      Normally, ntpd exits with a message to the system log if the offset exceeds the panic threshold, which is 1000 s by default.This option allows the time to be set to any value without restriction; however, this can happen only once. If the thresholdis exceeded after that, ntpd will exit with a message to the system log. This option can be used with the -q and -x options.See the tinker command for other options.

通过原文,可以得知
当时钟偏差超过1000s时,ntpd认为发生了严重的故障,从而会自动退出,此时应该需要人工干预。 -g能够在ntpd进程运行的生命周期中,有且仅容忍这种严重的时钟偏差故障,ntpd不退出。

  • 如果持续发生这种严重的时钟偏差故障或者时钟偏差故障恢复后在出现,-g参数将不再起作用。
  • 默认情况下,这种严重的时钟偏差故障是1000s,也可以通过可以通过tinker中的panic设置相关的值

所以推荐的配置如下

# Command line options for ntpd
OPTIONS="-x -p /var/run/ntpd.pid"

并配合如下配置,来适配不同场景下的时间同步需求。

配置来源配置值解释最长追平耗时 (每1s校准0.5ms)
默认配置tinker panic 1000 step 0.128低于0.128s平滑同步,超过0.128s开始跳变,超过1000s进程退出几乎无
公有云配置tinker panic 10 step 10不产生跳变,超过10s进程退出约5.55小时
⭐推荐配置tinker panic 1000 step 1000不产生跳变,超过1000s进程退出约23天

2.2 定时任务+ntpdate

还有一种时钟同步方式ntpdate,能够强行跟远端时钟源进行强行同步,同步方式是通过跳变的方式进行,如果部署的应用对时钟特别敏感,不建议使用这种方式。

# 配置10min同步一次
*/10 * * * * ntpdate -u time1.tencentyun.com 2>/dev/null

2.3 ntp命令同步状态相关命令解读

2.3.1 ntpq -pn解读

# 可以通过如下命令
ntpq -pn

使用该命令,并不会跟远端进行时钟同步,只是进行时间查询同步情况。该命令查询的offset并不一定是完全准确的,因为该命令会有限读取时钟缓存,因此可能是不准确的,但是并不妨碍我们进行下一步定位。
在这里插入图片描述

  1. remote:表示NTP主机的IP或者是主机名,其中:
  • *表示目前正在使用的NTP服务器;
  • +表示已经连接成功,并且可以作为下一个提供时间更新的候选者;
  • #表示服务正常但是不在使用节点之内
  • x表示无法连接
  1. refid:表示上一层NTP主机的地址(和DNS服务器的结构类似,一层一层递归),当remote已经是根NTP服务器的时候就不会显示ip或域名了。可能有以下值(太多了没法全部列举,有需要可自行搜索相关文档):
  • .LOCL.:本机,当没有配置远程ntp服务时;
  • .IRIG.:Inter-Range Instrumentation Group 时间码;
  • .PPS.:时间标准中的“Pulse Per Second”(秒脉冲);
  • .NICT.:日本情报通信研究机构(NICT),也就是此ntp服务提供者;
  • .DENY.:服务拒绝访问;
  • .AUTH.:认证错误(适用于配置了访问权限的NTP服务器);
  • .TIME.:连接超时;
  • .INIT.:初始化,常出现在服务刚刚启动后不久;
  1. st:远程服务器的级别。当此值为1是表示为根NTP服务器
  2. t:类型,有以下值:
  • u:unicast,单播;
  • b:broadcast,广播;
  • l:local,本地;
  • s:对称节点,用于备份;
  • A:选播服务器;
  • B:广播服务器;
  • M:多播服务器;
  1. when:距上次同步的时间,单位是秒
  2. poll:同步频率,单位为秒,默认每128秒同步一次
  3. reach:已同步次数
  4. delay:网络延迟,单位毫秒
  5. offset:时间偏移量,显示-为负偏移,单位是毫秒
  6. jitter:与远程ntp服务的平均偏差,单位毫秒

2.3.2 ntpdate -u解读

使用如下命令强行同步本地时间

ntpdate -u 10.26.0.35

2.3.4 ntpdate -udq解读

使用如下命令测试和验证跟上游进行ntp同步的过程,并验证同步过程是否正常。

ntpdate -udq 10.26.0.35

在这里插入图片描述

transmit:代表本地发出同步请求
receive: 代表本地接收到相关的包

从而验证同步链路过程中卡在哪个环节。

2.4 该如何配置时钟同步?

由于ntpd本身容易退出,并且能够容忍的时钟并不是很好,并在实际生产中,如果相关的运维、监控能力不足时,经常会莫名出现ntpd同步失败的情况。因此建议

  1. 如果对时钟要求很高,很敏感,且完全不接受时钟调变,使用ntpd部署,但是推荐配置
# Command line options for ntpd
OPTIONS="-x -p /var/run/ntpd.pid"

并配合如下配置,来适配不同场景下的时间同步需求。

配置来源配置值解释最长追平耗时 (每1s校准0.5ms)
⭐推荐配置tinker panic 1000 step 1000不产生跳变,超过1000s进程退出约23天

但是需要配套强监控,需要实时监控和告警ntpd的同步状态,如

  • remote状态,必须包含*
  • reach,应该为377
  • offset,表示时钟延迟,根据情况调整
  1. 如果对时钟要求不是很高,能够介绍短时的时钟调变,推荐使用ntpd + 定时ntpdate的模式
  • ntpd的配置参考上面的配置
  • ntpdate的配置
# 配置10min同步一次
*/10 * * * * ntpdate -u time1.tencentyun.com 2>/dev/null

3. 系统时钟同步到硬件时钟

按照现在服务器的时钟同步标准架构,使用ntpd服务进行时钟同步,经过排查定位,发现了2个问题

  • ntpd服务只能同步linux的系统时间,无法将系统时间写入到硬件时钟,如果机器的硬件时钟不准确,并且发生异常重启时,开机后操作系统会读取硬件时钟作为机器的系统时钟,从而导致时间不一致
  • ntpd服务进行时间同步时,如果时间超过1000s,ntpd服务会自动退出,此时需要人工完成时间同步后,才能把ntpd正常启动(此时ntpd的进程可能是正常的,但是不会跟上游进行同步时钟)。

目前整理出常用的硬件时钟同步方式以及可能性

3.1 ntpd.service的相关配置/etc/sysconfig/ntpd SYNC_HWCLOCK=yes【不生效】

SYNC_HWCLOCK=yes 这个方案没有效果, 是网上的资料中呼声最高的配置,别被网上资料误导了.
ntpd的官方文档没有提供SYNC_HWCLOCK这个环境变量, ntpd的代码里边也没有关于SYNC_HWCLOCK的处理逻辑.
在这里插入图片描述

3.2 ntpdate.service 的配置/etc/sysconfig/ntpdate能够在重启这个服务的瞬间执行一次时钟同步【默认禁用】

这个变量SYNC_HWCLOCK=yes可能最初来自于ntpdate.service, ntpdate服务调用 ntpdate-wrapper脚本, ntpdate-wrapper脚本souce /etc/sysconfig/ntpdate, 脚本判断如果SYNC_HWCLOCK=yes, 就调用/sbin/hwclock --systohc 命令把系统时间写入硬件时钟. ntpdate.service默认禁用.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 linux内核默认有 11 分钟模式【默认关闭,同步逻辑复杂,不靠谱】

linux内核自带有"11分钟模式",在开启的情况下,大约11分钟左右会自动同步系统时钟到硬件时钟,但是该配置有很多限制,默认情况关闭。并且有很多场景下,会自动关闭,因此利用该模式实现系统时钟同步到硬件时钟不稳定。

在这里插入图片描述

3.4 该如何同步硬件时钟?

可以在服务器上配置计划认为,定期将系统时钟同步到硬件时钟,一周同步一次即可。

0 0 * * 0 /sbin/hwclock --systohc

4. 疑问和思考

4.1 reach是什么?377代表什么?

reach用来测试能否和服务器连接,是一种衡量前8次查询是否成功的位掩码值,每成功连接一次它的值就会增加,377表示都成功,0表示不成功。它是八进制数,正常情况下值为[1, 3, 7, 17, 37, 77, 177, 377],对应的二进制为[1, 11, 111, 1111, 11111, 111111, 1111111, 11111111]。reach值越大,表示最近8次同步成功的次数越多,跟上游时钟源同步的成功率就越高。

ntp服务启动后,reach就以poll值为周期与ntp server通信,为了方便理解,我们可以简单的认为每次ping一下上层ntp server,如果成功,那reach就向左移一位,右边补1,如果失败,则右边补0,所以如果reach不是上面给出的枚举值,那就是在通信过程中出错了。当reach 达到17时(对应1111,即最近的4次通信都成功了),那才开始同步时间,这时,remote项对应的域名或IP列表有,其中一个前面会有号,表示该IP就是NTP server。而在开始同步时间之前,当客户端访问NTP server时,都会出现stratum 16,no server suitable for synchronization found这样的错误。也就是说如果你在NTP server主机上重启了ntp服务,那要等4poll秒(在前4次通信都是成功的前提下),该NTP server才与上层NTP server开始同步时间,而且只有当开始同步时,该NTP server才能为其它客户端提供NTP服务。因此,你在/etc/ntp.conf中设置的同步周期minpoll maxpoll不能太大,因为每次ntp服务重启后,要等4倍长的时间才能开始同步。

4.2 如果时钟有延迟,但是能够ntp缓慢追时间,该如何配置?

5. 参考文档

暂无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud Ribbon 负载均衡服务调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第三篇,即介绍 Ribbon 负载均衡服务调用 二、概述 2.1 Ribbon 是什么 Spring Cloud Ribbon…

OpenCV学习笔记(三)——对于图片的基本操作

目录 读取图片和显示图片 显示图片的大小 将图像设置为灰度图 将图片重新写回指定的地址 显示图片的尺寸 获取图片的类型 读取图片和显示图片 在OpenCV使用cv2.imread()来读取图片,例如,在D盘的Photo的文件夹中有一张图片名称为1的jpeg的图片&am…

无法使用debugger,debugger在项目中不生效,导致无法有效排查问题

debugger是浏览器提供的调试语句,其主要是通过停止JS的执行,相当于设置断点。它的使用方法很简单, 只需要在我们的JS语句中, 插入一行debugger; 即可。 在JS代码编写的过程中,我们都会通过浏览器的调试模式&#xff08…

微擎安装,卡在“安装微擎”界面

进入install.php,点击【在线安装】 下一步配置数据库,开始安装系统 然后显示进度条,进度条一闪而过 然后就没有进度条显示了,一直卡在这里 第一次等了好久, 删除目录下的文件,重装还是这样 再重启服务器&…

3D-Genome | Hi-C互作矩阵归一化指南

Hi-C 是一种基于测序的方法,用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题,如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应,可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声&…

Python Tkinter GUI 基本概念

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝如果停止,就是低谷&#xf…

node项目通过.env文件配置环境变量

https://www.npmjs.com/package/dotenv require(dotenv).config()console.log(process.env, process.env.apiKeyOnServer)我开发的chatgpt项目: https://chat.xutongbao.top

Imagination:RISC-V CPU的重要力量

根据SHD集团最近发布的报告显示,RISC-V正全速发展中。通过分析从2021年到2030年这十年间RISC-V核在不同应用和功能领域的潜在市场,作者Rich Wawrzyniak得出结论称,到2030年,22.3%的SoC将包含RISC-V CPU,RISC-V的收入预…

Docker网络+原理+link+自定义网络

目录 一、理解Docker网络 1.1 运行tomcat容器 1.2 查看容器内部网络地址 1.3 测试连通性 二、原理 2.1 查看网卡信息 2.2 再启动一个容器测试网卡 2.3 测试tomcat01 和tomcat02是否可以ping通 2.4 只要删除容器,对应网桥一对就没了 2.5 结论 三、…

蓝牙耳机潜水时可以用吗?适合潜水的四大游泳耳机分享

在科技日新月异的今天,我们越来越依赖各种电子设备来丰富我们的生活。无论是运动、工作还是休闲娱乐,耳机都成为了我们不可或缺的伙伴之一。然而,当谈到水上活动时,许多人可能会对蓝牙耳机是否能在水下使用感到困惑。虽然市面上有…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用,所以与其他的自动配置不同,自动配置是后来使用的,而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

使用采购管理软件构建更高效的采购模式

采购流程是企业整个采购部门的关键要素。无论企业规模大小,构建采购流程的模式都将直接影响企业控制成本、管理风险和保持流程弹性的能力。 下面我们将解释采购模式的类型、优缺点,以及如何确定哪种模式最适合你的采购部门。 集中采购的优缺点 在集中采…

Windows的自动更新和自带的杀毒软件怎么弄掉!

关闭Windows系统更新 Windows系统更新是为了保持设备的平稳和安全运行,保持操作系统安全、稳定及获取新功能修复已知问题并修补安全漏洞的重要过程。如果您想要临时或永久关闭Windows系统的自动更新,可以采用以下几种方式。不过,请务必意识到,禁用系统更新可能会导致您的系…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二) 八、板级验证 1.验证内容 通过电脑…

5. Java内存模型JMM

文章目录 计算机硬件存储体系基于计算机存储结构的 JMM Java 内存模型 JavaMemoryModelJMM规范下的三大特性原子性可见性有序性 多线程对变量的读写过程读取过程 多线程先行发生原则 happens-beforex,y 的 case 说明happens-before 原则说明happens-before 大原则happens-befor…

如何转行成为产品经理?

转行NPDP也是很合适的一条发展路径,之后从事新产品开发相关工作~ 一、什么是NPDP? NPDP 是产品经理国际资格认证,美国产品开发与管理协会(PDMA)发起的,是目前国际公认的唯一的新产品开发专业认证&#xff…

fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换 今天分享的内容是fasta文件与fastq文件的基本知识,以及通过Python实现两者互相转换的方法。 测序数据公司给的格式通常是fq.gz,也就是fastq文件,计算机的角度来说,生物的序列属于一种字符串,就…

CVHub | 万字长文带你全面解读视觉大模型(建议收藏!)

本文来源公众号“CVHub”,仅用于学术分享,侵权删,干货满满。 原文链接:万字长文带你全面解读视觉大模型 0 导读 众所周知,视觉系统对于理解和推理视觉场景的组成特性至关重要。这个领域的挑战在于对象之间的复杂关系…

形参化类 ‘Result‘ 的原始使用

在编程中,特别是在面向对象编程(OOP)中,当我们说“形参化类”或“参数化类”,我们实际上是指泛型(Generics)的概念。泛型允许在定义类、接口和方法时使用类型参数。这样,你可以创建可…

99.qt qml-单例程序实现

在之前讲过: 58.qt quick-qml系统托盘实现https://nuoqian.blog.csdn.net/article/details/121855993 由于,该示例只是简单讲解了系统托盘实现,并没有实现单例程序,所以多次打开后就会出现多个exe出现的可能,本章出一章QML单例程序实现, 多次打开始终只显示出第一个打开…