Linux 基于chrony进行时钟同步方案验证

Linux 基于chrony进行时钟同步方案验证

  • 1. 背景介绍
  • 2. 验证过程
    • 2.1 追踪配置
    • 2.2 追平记录
    • 2.2 追平时间换算
  • 3. 疑问和思考
    • 3.1 如何统计追踪1s需要花费多长时间?
  • 4. 参考文档

chrony是一个Linux系统中用于时钟同步的工具。它使用NTP(网络时间协议)来与远程时间服务器进行通信,从而使系统的时钟保持准确。
chrony具有一些特性,使其成为时钟同步工具的首选:

  • 精准度:chrony能够以亚毫秒级的精度同步系统时钟,确保时钟的准确性。
  • 动态时钟频率调整:chrony具有自适应的时钟频率调整机制,可以根据网络延迟和计算机负载等因素动态地调整时钟频率,以保持时钟的稳定性和准确性。
  • 持久追踪:chrony能够在计算机重启后快速同步时钟,不需要等待很长的时间。
  • 多服务器支持:chrony可以同时与多个时间服务器通信,并根据服务器的可用性和准确性进行选择。
  • 使用chrony进行时钟同步的步骤如下:
  • 安装chrony:在Linux系统上使用适当的包管理工具安装chrony。
  • 配置chrony:编辑chrony配置文件,指定要使用的时间服务器和其他参数。
  • 启动chrony:启动chrony服务,使其开始同步系统时钟。
  • 验证同步状态:使用chronyc命令检查系统时钟与时间服务器的同步状态。

通过使用chrony进行时钟同步,您可以确保您的系统时钟与全球标准时间保持一致,以确保系统操作的准确性和一致性。


1. 背景介绍

生产环境中,经常出现部分节点时钟跟时钟源不一致的现象,需要平滑的同步时钟,因此本主要探讨chrony模式下的平滑同步时钟的相关方案和测试验证过程。

服务器IP角色
10.30.15.189模拟ntp clent
10.30.11.159模拟ntp server
10.30.15.188模拟ntp 上游,代表时钟源

10.30.15.189 10.30.15.159 时间同步,但是比时钟源慢20秒左右。测试的目标是,希望10.30.11.159 完成时钟同步,并不产生时钟跳变。

ntp clent ntp server 同步正常,无时间误差
在这里插入图片描述

ntpserver 同ntp上游相差20秒左右
在这里插入图片描述

2. 验证过程

2.1 追踪配置

  1. ntpserver部署chrony
yum -y install chrony
  1. 修改chrony配置(/etc/chrony.conf)
    该配置大概30分钟追1秒。
###此处不复制,这个配置大概30分钟追1秒
server gps_1 iburst
server gps_2 iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 9999999999 1
maxchange 9999999999 1 1
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
noclientlog
logchange 0.5
logdir /var/log/chrony
maxupdateskew 500
maxslewrate 500

参数说明

  • stratumweight是一个配置选项,用于确定本地时钟和远程服务器时钟之间的权重比例。该选项影响系统时钟同步的行为。具体来说stratumweight用于计算本地时钟和远程时钟的加权平均值,以确保在使用多个时间源时,更可靠的时钟源所提供的时间更为重要。通过调整stratumweight,可以调节不同时间源对系统时钟同步的影响程度。

  • driftfile是一个配置选项,用于指定一个文件来存储本地系统时钟漂移的估计值。时钟漂移是时钟偏离准确时间的速率,它是由于时钟的不准确性而导致的。当Chrony服务运行时,它会持续地监测本地时钟的漂移,并将漂移的估计结果写入driftfile中。这样做有助于Chrony在重新启动时更快地调整本地时钟,提高时钟同步的准确性。

  • rtcsync是一个配置选项,用于指定是否应该尝试使用硬件时钟(Real Time Clock,RTC)来改善系统时钟的准确性。启用rtcsync可以让Chrony尝试使用RTC来纠正本地时钟的漂移,从而提高时钟同步的准确性。这对于那些没有持续连接到网络的系统尤其有用,因为它们可以依赖RTC来帮助保持时钟的准确性。

  • keyfile是一个配置选项,用于指定包含身份验证密钥的文件的路径。这些密钥可用于对NTP客户端和服务器之间的通信进行加密和身份验证。通过keyfile,用户可以定义用于安全通信的密钥,以确保通信的保密性和完整性。

  • bindcmdaddress是一个配置选项,用于指定Chrony守护进程监听命令的网络地址。通过设置bindcmdaddress,用户可以指定Chrony监听命令的网络接口和端口。这使得用户可以通过网络发送命令以控制Chrony守护进程,例如查询状态、手动触发时钟校准等操作。

  • commandkey: 用于指定用于对chronyc命令进行身份验证的密钥。

  • generatecommandkey: 用于生成新的commandkey密钥。

  • noclientlog: 禁用客户端的日志记录。

  • logchange: 记录系统时钟状态的变化。

  • logdir: 指定Chrony日志文件的目录路径。

跟追时钟相关的参数如下

  • makestep是一个配置选项,用于指定是否允许时钟调整时可以进行"大步调整"。当makestep选项被启用时,Chrony可以在需要时一次性调整系统时钟,而不是逐渐地调整,以便更快地将系统时钟与参考时钟同步。这在某些情况下可能是有用的,但需要谨慎使用,因为大幅度的时钟调整可能会对系统和应用程序产生影响。配合maxchange、maxslewrate、maxupdateskew使用,能够规避时钟突然跳变

  • maxchange是一个配置选项,用于指定系统时钟每秒允许的最大变化量。当系统时钟与参考时钟之间的偏差超出此限制时,Chrony会限制时钟调整的速度,以避免系统时钟的突然大幅度调整。这有助于稳定地调整系统时钟并减少对系统和应用程序的潜在影响。配合makestep、maxslewrate、maxupdateskew使用,能够规避时钟突然跳变

  • maxslewrate 500
    当设置"chrony maxslewrate 500"时,这表示系统时钟的最大调整速率为500 PPM(parts per million)。这意味着系统时钟每秒最多可以调整500微秒。

  • maxupdateskew 500
    当设置 maxupdateskew 设置为 500,这意味着系统时钟可以在 500 毫秒内进行连续更新

  1. 编辑chrony服务配置文件/usr/lib/systemd/system/chronyd.service, 注释掉这行

    #Conflicts=ntpd.service systemd-timesyncd.service
    
  2. 重载systemd配置

    systemctl daemon-reload
    
  3. 启动chronyd

     systemctl start chronyd
    
  4. 检查ntpd和chrony 状态是否正常

    systemctl status chronyd  ntpd
    
  5. 这样chrony负责向ntp源同步时间回来,逐步修正ntpserver时间准确性,ntpd负责向下游ntp client 同步时间,下游的时间也会间件追平

  6. 再次检查ntpsever 和ntp上游时间差
    在这里插入图片描述

  7. 确认chrony 开始工作

    # 查看同步频率情况
    chronyc tracking -v
    
    # 查看同步情况
    chronyc -n sources -v
    

    在这里插入图片描述

2.2 追平记录

  1. 开始同步以后误差23.84s
    在这里插入图片描述

  2. 同步3小时左右
    在这里插入图片描述

  3. ntp client 同ntpserver 相差达到1秒,避免ntp客户端出现跳变(调整chrony追平速度 maxslewrate 200 )
    在这里插入图片描述

  4. 修改配置重启了chrony以后,大概又过了4个小时左右
    在这里插入图片描述

  5. ntp client 已经追平ntp server
    在这里插入图片描述

  6. 又同步大概21个小时,已经只有很小的误差了
    在这里插入图片描述
    客户端无异常
    在这里插入图片描述

  7. 重新等待了36小时以后,误差已经是正常水平了
    在这里插入图片描述

  8. ntp client 也无异常
    在这里插入图片描述

  9. 查看ntp客户端跳变历史
    在这里插入图片描述

可以看到在chrony参数较大的时候客户端也发生过较大时间的跳变(超过1秒)
在修正chrony参数为200的时候客户端也发送过几次跳变,但是时间都比较小了

结论:

  • 如果时间误差较小,可以将参数设置较小,同步时间会比较长,不易发生跳变,或者发生跳变误差也很小
  • 如果时间误差较大,也可以将时间参数设置较大,缩短同步时间,但是跳变的时间会略大

2.2 追平时间换算

简单计算追踪1s的时间
追踪 1 s 的时间 = 1 s / m a x s l e w r a t e ( 微秒 ) 追踪1s的时间= 1s / maxslewrate(微秒) 追踪1s的时间=1s/maxslewrate(微秒)

设置200 大概1个多小时多走1秒
设置500,大概就是半个小时多走1秒

通过检查同步日志验证

  • 当前时间比时钟源落后
    在这里插入图片描述

  • 当前时间比时钟源提前
    在这里插入图片描述
    28min追0.8908579999999802s,跟计算整体一致。

3. 疑问和思考

3.1 如何统计追踪1s需要花费多长时间?

简单计算追踪1s的时间
追踪 1 s 的时间 = 1 s / m a x s l e w r a t e ( 微秒 ) 追踪1s的时间= 1s / maxslewrate(微秒) 追踪1s的时间=1s/maxslewrate(微秒)

常规的配置如下

  • 设置200 大概1个多小时多走1秒
  • 设置500,大概就是半个小时多走1秒

4. 参考文档

暂无

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

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

相关文章

HarmonyOS 应用开发之模型切换

本文介绍如何将一个FA模型开发的声明式范式应用切换到Stage模型,您需要完成如下动作: 工程切换:新建一个Stage模型的应用工程。 配置文件切换:config.json切换为app.json5和module.json5。 组件切换:PageAbility/Serv…

9.2-源码分析:Dubbo Remoting 层 Buffer 缓冲区

Buffer 是一种字节容器,在 Netty 等 NIO 框架中都有类似的设计,例如,Java NIO 中的ByteBuffer、Netty4 中的 ByteBuf。Dubbo 抽象出了 ChannelBuffer 接口对底层 NIO 框架中的 Buffer 设计进行统一,其子类如下图所示: …

私域流量:如何给微信客户贴上精准标签?

私域流量在现代营销中变得越来越重要,而给微信客户贴上精准标签是私域流量管理的一个关键环节。今天就给大家分享三个给客户贴上精准标签的小技巧,一起来看看吧! 首先,我们可以通过设定静态标签来给微信客户贴上精准标签。这意味…

初识C++(四)深入了解拷贝构造函数

1.拷贝构造函数 拷贝构造函数是一种特殊的构造函数,在对象需要以同一类的另一个对象为模板进行初始化时被调用。它的主要用途是初始化一个对象,使其成为另一个对象的副本 class Date { public:Date(int year 1, int month 1, int day 1){_year yea…

JAVAEE之网络原理

1.IP地址 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 格式 IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)&…

P15:PATH环境变量

为什么要配置环境变量 当我们打开DOS窗口,输入:javac,出现下面问题。 原因:windows操作系统在当前目录中无法找到javac命令文件。Windows操作系统是如何搜索硬盘上某一个命令? 首先从当前目录中搜索该命令如果当前目录…

LeetCode---390周赛

题目列表 3090. 每个字符最多出现两次的最长子字符串 3091. 执行操作使数据元素之和大于等于 K 3092. 最高频率的 ID 3093. 最长公共后缀查询 一、每个字符最多出现两次的最长子字符串 非常经典的滑动窗口问题,即动态维护一段区间,使得这段区间满足…

代码随想录-二叉树(路径)

目录 257. 二叉树的所有路径 题目描述: 输入输出描述: 思路和想法: 404. 左叶子之和 题目描述: 输入输出描述: 思路和想法: 513.找树左下角的值 题目描述: 输入输出描述:…

刷爆LeetCode:两数之和 【1/1000 第一题】

👤作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 作者专栏每日更新:LeetCode解锁1000题: 打怪升级之旅https://blog.csdn.net/cciehl/category…

如何在OceanBase的OCP多节点上获取日志

背景 在使用OceanBase的OCP的过程中,因各种因素,我们可能需要对当前页面进行跟踪。在单一ocp节点环境下,我们自然可以直接在该节点上查找所需的日志。然而,当我们的环境中部署了多个ocp节点时,在排查问题时就会变得相…

让机器理解语言,从字词开始,逐步发展到句子和文档理解:独热编码、word2vec、词义搜索、句意表示、暴力加算力

让机器理解语言,从字词开始,逐步发展到句子和文档理解:独热编码、词嵌入、word2vec、词义搜索、句意表示、暴力加算力 独热编码:分类 二进制特征Word2Vec 词嵌入: 用低维表示 用嵌入学习 用上下文信息Skip-gram 跳字…

工业测试测量仪器与人工智能(AI)如何结合

工业测试测量仪器与人工智能(AI)的结合可以通过多种方式实现,其中一些主要方法包括: 1. 数据分析和预测 智能数据分析:利用AI算法对从传感器和测试仪器收集的数据进行分析,识别模式、趋势和异常&#xff0…

RVM安装ruby笔记

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

瑞吉外卖实战学习--6、通过try和catch进行异常处理

try和catch进行异常处理 效果图前言1、公共拦截器进行异常处理1.1、创建公共报错处理的方法1.2、@ControllerAdvice中设置要拦截的类1.3、@ExceptionHandler中写处理的异常类2、完善错误拦截器2.1、效果效果图 前言 当用户名重复数据库会报错,此时就需要捕获异常操作 1、公共…

LM算法探寻——答案在022浙江大学信号与系统

LM算法详解 | 宇尘 (gitee.io) 求函数最小值,从另一个角度理解是求误差最小值。 梯度 最陡梯度下降算法和LMS算法原理介绍及MATLAB实现_lms滤波器中的梯度下降-CSDN博客 均值即平均值 (3 封私信 / 56 条消息) FIR滤波器中的冲激响应怎么理解? 和滤波有…

查找某数据在单链表中出现的次数

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct LinkNode {ElemType data;LinkNode* next; }LinkNode, * LinkList; //尾插法建立单链表 void creatLinkList(LinkList& L) {L (LinkNode*)mallo…

微分方程错题本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

ssm008医院门诊挂号系统+jsp

医院门诊挂号系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院门诊挂号系统当然也不能排除在外。医院门诊挂号系统是以实际运用为开发背景&#xff0c;运用软件…

笔迹/签名数据集汇总

这里只收集公开/易申请的数据集 数据集发表年份语言最小单元Writers/人规模颜色最小单元文件格式示例图片备注CSAFE Handwriting Database2019英语页9090 人*(3 次*9 个样本) 2430 页300 dpi 扫描png-HWDB2.0-2.22011汉字页1,019每人 5 页,共 5091 页灰度图dgrl-CEDAR2006英语…

代码随想录算法训练营Day39|LC62 不同路径LC63 不同路径II

一句话总结&#xff1a;不是太难&#xff0c;状态转移方程好想。 原题链接&#xff1a;62 不同路径 位置为(i, j)的点只能从上面或者左边过来&#xff0c;由此可列出状态转移方程。状态转移方程的初始化为所有第一排和第一列的点都初始化为1即可。 class Solution {public i…