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. 参考文档

暂无

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

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

相关文章

在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)

问题场景 目前我的环境变量都存储在 /etc/profile 文件中,当我通过远程 SSH 执行一些命令时,提示命令找不到,如下所示: 问题出现原因 这里找到了一张出自尚硅谷的图片,很好的解释了该问题: 这是由于 Linu…

Java数据结构-链表OJ题

目录 1. 移除链表元素2. 反转链表3. 返回中间结点4. 返回倒数第k个结点5. 合并两个有序链表6. 分割链表7. 回文链表8. 找相交链表的公共结点9. 判断链表是否有环10. 返回链表环的入口 老铁们好,学习完链表这个数据结构之后,怎么能少了OJ题呢?…

HTLM 之 vscode 插件推荐

文章目录 vscode 插件live Serverprettiersetting 保存这个文档的更改Material Theme / Material Theme icon vscode 插件 live Server prettier setting 搜索 format default 保存这个文档的更改 cmds // mac ctrls // win Material Theme / Material Theme icon 来更换…

【No.21】蓝桥杯组合数学|数位排序|加法计数原理|乘法计数原理|排列数|组合数|抽屉原理|小蓝吃糖果|二项式定理|杨辉三角|归并排序(C++)

组合数学 数位排序 【问题描述】 小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。 例如,2022 排在 409 前面, 因为 2022 的数位之和是 6,小于 409 的数位 之和 13。…

数据结构:Trie(前缀树/字典树)

文章目录 一、介绍Trie1.1、Trie的结点结构1.2、Trie的整体结构 二、Trie的操作2.1、Trie插入操作2.2、Trie查找操作2.3、Trie前缀匹配操作2.4、Trie删除操作 三、实战3.1、实现Trie(前缀树) 一、介绍Trie Trie 又称字典树、前缀树和单词查找树&#xff…

C++11 shared_from_this学习

最近学习网络变成发现一些C源码库中封装对象时会公有继承enable_shared_from_this&#xff1b; 用一个案例进行说明&#xff0c;案例代码如下&#xff1a; #include <iostream> #include <memory> #include <stdio.h>using namespace std;class C : public…

RPC(Remote Procedure Call)远程过程调用

定义 RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;它允许程序在不同的计算机之间进行通信和交互&#xff0c;就像本地调用一样。 为什么需要 RPC&#xff1f; 回到 RPC 的概念&#xff0c;RPC 允许一个程序…

快速上手Spring Cloud 十七:深入浅出的学习之旅

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

2000-2021年各省人口密度数据(原始数据+结果)

2000-2021年各省人口密度数据&#xff08;原始数据结果&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;年末常住人口、行政区划面积、人口密度 3、来源&#xff1a;国家统计局、统计年鉴 4、范围&#xff1a;31省 5、计算说明&#xff1a;人口密度年末常…

基于重写ribbon负载实现灰度发布

项目结构如下 代码如下&#xff1a; pom&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocat…

Python 妙用运算符重载——玩出“点”花样来

目录 运算符重载 主角点类 魔法方法 __getitem__ __setitem__ __iter__ __next__ __len__ __neg__ __pos__ __abs__ __bool__ __call__ 重载运算符 比较运算符 相等 不等 ! 大于和小于 >、< 大于等于和小于等于 >、< 位运算符 位与 & 位…

git最常用的命令与快捷操作说明

git最常用的命令与快捷操作说明 最常用的git三条命令1、git add .2、git commit -m "推送注释"3、git push origin 远程分支名:本地分支名 其他常用命令本地创建仓库分支删除本地指定分支切换本地分支合并本地分支拉取远程仓库指定分支代码过来合并推送代码到远程分支…

Android客户端自动化UI自动化airtest从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图

iOS客户端自动化UI自动化airtest从0到1搭建macosdemo演示-CSDN博客 一、基础环境 1. 安装jdk 选择jdk8 如果下载高版本 可能不匹配会失败 下载.dmg文件 苹果电脑 &#xff5c; macOS &#xff5c; jdk1.8 &#xff5c; 环境变量配置_jdk1.8 mac-CSDN博客 Java Downloads …

【面试题】数据底层原理:Elasticsearch写入流程解析

前言&#xff1a;本篇博客将介绍Elasticsearch的数据底层原理&#xff0c;涉及数据写入的过程以及相关概念。我们将深入探讨buffer、translog、refresh、commit、flush和merge等核心概念&#xff0c;帮助您更好地理解Elasticsearch的数据存储机制。 写入数据的基本过程 Elast…

vue 内嵌第三方网页

需要将另一个系统嵌套到当前网页中 一、frame 方法一就是通过html的标签 iframe 实现网页中嵌入其他网站 标签属性 属性含义src嵌套的网页地址width设置嵌套网页的宽度&#xff0c;单位为像素height设置嵌套网页的高度&#xff0c;单位为像素frameborder控制嵌套的网页是否…

<QT基础(2)>QScrollArea使用笔记

项目需要设置单个检查的序列图像预览窗口&#xff0c;采用QScrollArea中加入QWidget窗口&#xff0c;每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容 引入QWidget 引入label插入图像&#xff08;resize&#xff09; 引入布局 组织 scrollArea内部自带Qwidget&#…

[项目实践]---RSTP生成树

[项目实践] 目录 [项目实践] 一、项目环境 二、项目规划 三、项目实施 四、项目测试 |验证 ---RSTP生成树 一、项目环境 Jan16 公司为提高网络的可靠性&#xff0c;使用了两台高性能交换机作为核心交换机&#xff0c;接入层交 换机与核心层交换机互联&#xff0c;形成冗…

MATLAB 统计滤波(去除点云噪声)(55)

MATLAB 统计滤波法(去除点云噪声)(55) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 点云统计滤波,是一种常用的去噪点方法,原始的点云数据中包含多种噪点,无法直接使用,往往需要通过一些方法去除噪点,而统计滤波在这方面的使用非常广泛常见,下面是去噪点后的…

P21:public class和class的区别

在一个Java源文件中&#xff0c;可以定义多个class 每个class类会生成对应的xxx.class字节码文件 在Java源文件中&#xff0c;public class不是必须的 当Java源文件中有public class类时&#xff0c;public class类只能有一个&#xff0c;并且该源文件的名字必须与公开类名…

STM32CubeIDE基础学习-USART串口通信实验(中断方式)

STM32CubeIDE基础学习-USART串口通信实验&#xff08;中断方式&#xff09; 文章目录 STM32CubeIDE基础学习-USART串口通信实验&#xff08;中断方式&#xff09;前言第1章 硬件介绍第2章 工程配置2.1 工程外设配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 …