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 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.mfbz.cn/a/440420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day04-Maven

一、初识 Maven Maven 是 Apache 旗下的一个开源项目,是一款用于管理和构建 java 项目的工具。 官网:https://maven.apache.org/ Maven的作用 依赖管理(方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题)统一项目…

蓝桥杯-最大距离

根据题意直接写出来就行。 简单题就话不多说上代码了 #include <iostream> #include <cmath> using namespace std; int main() {int n;cin>>n;int a[1000]{0};for(int i0;i<n;i){cin>>a[i];}int temp 0;int dis 0;for(int i0;i<n-1;i)for(…

【infiniband监控】grafana变量使用细化优化监控指标

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

智慧园区建设是否实现了节能减排?

在我们追求可持续发展的道路上&#xff0c;智慧园区已经成为了一颗璀璨的明星&#xff0c;它不仅代表着科技与自然的和谐共融&#xff0c;更是实现节能减排的关键一环。 智慧园区的核心是智能化管理。通过物联网 技术&#xff0c;园区内的能源消耗可以被实时监控&#xff0c;就…

Springboot--整合Logback 日志框架(Maven)

文章目录 前言一、Logback 日志框架介绍&#xff1a;二、整合&#xff1a;2.1 引入jar2.2 logback.xml 文件配置&#xff1a;2.3 日志输出&#xff1a;2.3.1 方式一&#xff1a;2.3.2 方式二&#xff1a; 2.3 日志输出结果展示&#xff1a; 三、扩展&#xff1a;3.1 日志输出格…

餐饮行业新风口:社区店的成功案例与经营秘诀

在竞争激烈的餐饮行业中&#xff0c;社区店正成为一个新的风口。作为一名90后的鲜奶吧创业者&#xff0c;我在社区开店已经5年时间&#xff0c;下面我将分享一些成功的社区店案例&#xff0c;并揭示其经营秘诀。 1、案例一&#xff1a;特色小吃店 这家小吃店以地方特色美食为…

012集——显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

2024 ssh连接linux ,包括连接被拒的解决方案

这里以windows系统 连接 linux&#xff08;centOS&#xff09;为例&#xff1a; 一、如果windows 连接时出现&#xff1a; Permission denied, please try again. 连接被拒绝&#xff0c;做出以下修改&#xff1a; 打开linux - Terminal 输入&#xff1a;cat /etc/ssh/sshd_c…

【SpringBoot】多环境切换的灵活配置

文章目录 profile 的使用激活 profile 的方式命令行启动idea 中配置配置文件中激活 开发中最灵活的多环境配置创建四个配置主配置文件其他几个环境配置使用方式 配置文件拆分总结 在日常的开发中&#xff0c;一般都会分好几种环境&#xff0c;比如通常的 开发环境&#xff1a;一…

【Linux】 yum —— Linux 的软件包管理器

Linux 的软件包管理器 yum yum 是什么什么是软件包查看软件包 yum 命令行工具yum 配置文件yum 凭什么可以支持下载呢&#xff1f;yum 生态yum 社区yum 的故障排除和资源支持yum 的持续集成和持续交付 yum 是什么 Yum&#xff08;Yellowdog Updater Modified&#xff09;是一个…

【深度学习笔记】优化算法——AdaGrad算法

AdaGrad算法 &#x1f3f7;sec_adagrad 我们从有关特征学习中并不常见的问题入手。 稀疏特征和学习率 假设我们正在训练一个语言模型。 为了获得良好的准确性&#xff0c;我们大多希望在训练的过程中降低学习率&#xff0c;速度通常为 O ( t − 1 2 ) \mathcal{O}(t^{-\fra…

APEX开发过程中需要注意的小细节3

【问题记录】在编辑数据信息时发现辩护的数据无法保存&#xff0c;提示 “ORA-01799: 列不能外部联接到子查询” 仅展示的数据来自主表&#xff0c;这部分都是关联子表重点内容&#xff0c;编辑时无法保存 于是想将扩展表作为主表&#xff0c;在主表进行修改试试 新的报错&a…

【树莓派+python】实现三色呼吸灯+按钮切换

文章目录 Traffic-lights电路连接在这里插入图片描述代码实现算法设计流程图python环境配置三色呼吸灯实现三色呼吸灯按钮控制 Traffic-lights 电路连接 【元件实物图】 图1为Button&#xff0c;按钮的状态控制SIG引脚的电平值。图2为RGB灯&#xff0c;有三种颜色&#xff1a…

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: &#x1f9d9;‍♂️ ImageMagick 7 1. windows程序 链接&#xff1a;https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码&#xff1a;hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

动态代理详解

动态代理 一、JDK动态代理二、CGLIB动态代理三、Javassist动态代理技术 在程序运行阶段&#xff0c;在内存中动态生成代理类&#xff0c;被称为动态代理&#xff0c;目的是为了减少代理类的数量。解决代码复用的问题。 一、JDK动态代理 DK动态代理技术&#xff1a;只能代理接口…

备份 ChatGPT 的聊天纪录

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

怎么把视频内容快速转为文字?这三款工具助您轻松实现!

在现代社会&#xff0c;视频内容日益丰富多样&#xff0c;但有时我们更希望获得视频中的文字文稿&#xff0c;以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具&#xff0c;它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…

【JavaEE初阶】 JVM类加载简介

文章目录 &#x1f343;前言&#x1f332;类加载过程&#x1f6a9;加载&#x1f6a9;验证&#x1f6a9;准备&#x1f6a9;解析&#x1f6a9;初始化 &#x1f384;双亲委派模型&#x1f6a9;什么是双亲委派模型&#xff1f;&#x1f6a9;双亲委派模型的优点 ⭕总结 &#x1f343…

微服务:Docker篇

1. 初识Docker 1.1. 什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署&#xff0c;环境不一定一…
最新文章