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

news2024/11/20 9:45:11

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 peerstats

disable 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 above
               the 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 amortization
               interval of 2000 s. Thus, an adjustment as much as 600 s will take almost 14 days to complete. This option can be used  with
               the  -g  and  -q  options.  See the tinker command for other options. Note: The kernel time discipline is disabled with this
               option 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 threshold
               is 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.coloradmin.cn/o/1500495.html

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

相关文章

【牛客】VL74 异步复位同步释放

描述 题目描述: 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图: clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图: 输入描述: clk为时…

STM32 SDRAM知识点

1.SDRAM和SRAM的区别 SRAM不需要刷新电路即能保存它内部存储的数据。而SDRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它…

外贸常用的出口认证 | 全球外贸数据服务平台 | 箱讯科技

出口认证是一种贸易信任背书,对许多外贸从业者而言,产品的出口认证和当前的国际贸易环境一样复杂多变,不同的目标市场、不同的产品类别,所需要的认证及标准也不同。 国际认证 01 IECEE-CB IECEE-CB体系的中文含义是“关于电工产品测试证书的相互认可体…

【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点

文章目录 题目思路解答 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…

QT中的信号和槽

信号和槽概述 在 Qt 中,用户和控件的每次交互过程称为⼀个事件。比如 “用户点击按钮” 是⼀个事件,“用户关闭窗口” 也是⼀个事件。每个事件都会发出⼀个信号,例如用户点击按钮会发出 “按钮被点击” 的信号,用户关闭窗口会发出…

社区店选址评估的关键指标:确保商业成功的重要因素

对于想开实体店或创业的人来说,选址是决定商业成功的关键因素之一。作为一名开鲜奶吧5年的创业者,我在网上持续分享开店的干货和见解。 在这篇文章中,我将详细介绍社区店选址评估的关键指标,帮助你确保商业成功。 1、人流量&…

深度解析Broker的角色与魔法

欢迎来到我的博客,代码的世界里,每一行都是一个故事 深度解析Broker的角色与魔法 前言Broker的基本概念Kafka Broker 的定义:Kafka Broker 的基本原理:为何 Broker 是 Kafka 消息传递的核心组成部分: 创建于配置Broker…

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况,让许多用户觉得困扰不已,也担心自己想留存的聊天记录消失不见。 好消息是,OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能,无论是免费…

双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的技术应用

原文链接:双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2MF9DVWNrMFpvV1d3RGxBZUE2QXJBRnI1NEJkcVhzRFZwakRqYXhhVFQzQnh1MVhJcy1laWh6N…

Python实习生(自动化测试脚本开发) - 面经 - TCL新技术有限公司

JD: 招聘流程: 2024.1.3 Boss直聘 沟通 2024.1.4 约面 2024.1.6 上午面试 面试流程: 上来第一步,直接问Python基础语法,讲一下基础的数据类型 就记得元组和字典 分别具体说一下元组和字典 流程控制语句有哪些&…

Linux:线程控制和原生线程库

文章目录 线程的id和LWP线程的终止线程的返回值问题关于原生线程库问题 本篇总结的内容主要是关于线程的控制专题 线程的id和LWP 对于获取线程的id来说&#xff0c;在Linux系统中存在这样的调用 这个调用就可以获取返回当前线程的id 先写出下面的实例代码 #include <ios…

垃圾收集器底层算法

垃圾收集器底层算法 三色标记 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生&#xff0c;这里我们引入“三色标记”来给大家解释下把Gcroots可达性分析遍历对象过程中遇到对象…

这些养老难题,只能靠AI来解决了

3 月 5 日刚召开的两会&#xff0c;AI 这个话题妥妥站上了 C 位。不仅政府工作报告首次提出要开展“人工智能”行动&#xff0c;各路科技大佬和人大代表也是围绕着 AI 大模型的技术创新、应用落地和政策法规&#xff0c;展开了热烈积极的建言献策。甚至有互联网大佬建议将人工智…

OKLink2月安全月报| 2起典型漏洞攻击案例分析

在本月初我们发布的2024年2月安全月报中提到&#xff0c;2月全网累计造成损失约1.03亿美元。其中钓鱼诈骗事件损失占比11.76%。 OKLink提醒大家&#xff0c;在参与Web3项目时&#xff0c;应当仔细调研项目的真实性、可靠性&#xff0c;提升对钓鱼网站和风险项目的甄别能力&…

ArcGIS筛选工具:19段SQL示例代码,所有需求一网打尽

一、使用方法 筛选工具(Select_analysis)主要用于从输入要素类或输入要素图层中提取要素&#xff08;通常使用选择或结构化查询语言 (SQL) 表达式&#xff09;&#xff0c;并将其存储于输出要素类中。 以三调图斑为例&#xff0c;图斑中有一个【DLMC】字段&#xff0c;该字段…

MAC测试环境搭建

1 下载pycharm 下载地址&#xff1a;PyCharm&#xff1a;JetBrains 出品的用于数据科学和 Web 开发的 Python IDE 2 安装python3.6.8 下载地址&#xff1a;Index of /ftp/python/3.6.8/ 安装后提示错误 换一种方式&#xff1a;用conda 下载地址&#xff1a;Free Download | …

爬虫入门到精通_框架篇15(Scrapy框架安装)

1 Scrapy安装 Scrapy的安装有多种方式&#xff0c;它支持Python2.7版本及以上或Python3.3版本及以上。下面说明Python3环境下的安装。 Scrapy依赖的库比较多&#xff0c;至少需要依赖库有Twisted14.0,lxml 3.4,pyOpenSSL 0.14。而在不同平台环境又各不相同&#xff0c;所以在安…

警用移动执法远程视频监控方案:安防视频监控系统EasyCVR+4G/5G移动执法仪

一、背景需求 在现代城市管理中&#xff0c;移动执法仪视频监控方案正逐渐成为一种高效、便捷的管理工具。该方案通过结合移动执法仪和视频监控技术&#xff0c;实现了对城市管理现场的实时监控和取证&#xff0c;有效提升了城市管理水平和效率。 移动执法仪作为现场执法的重…

Sora的双重边缘:视频生成的革新与就业的再思考

随着科技的日新月异&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术如潮水般涌入我们的日常生活&#xff0c;为各个领域带来了翻天覆地的变化。在这一浪潮中&#xff0c;Sora作为一款前沿的AI视频生成工具&#xff0c;凭借其高度逼真…

MySQL--优化(索引--索引失效场景)

MySQL–优化&#xff08;索引–索引失效场景&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 常见的索引失效场景 1、场景准备&#xff1a; 给 tb_user 表创建联合索引&#xff0c;字段为&#xff1…