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

news2024/11/26 14:41:20

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.coloradmin.cn/o/1557236.html

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

相关文章

【Java常用的API】JDK8相关时间类

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

Delphi 12 安卓 部署文件,不支持中文文件名

procedure TForm3.Button1Click(Sender: TObject); var sFileName:string; begin sFileName:TPath.Combine(TPath.GetDocumentsPath,禁止吸烟.wav); showmessage(sFileName); MediaPlayer1.Stop ; MediaPlayer1.FileName: sFileName; MediaPlayer1.Play; end;

c语言:vs2022写一个一元二次方程(包含虚根)

求一元二次方程 的根&#xff0c;通过键盘输入a、b、c&#xff0c;根据△的值输出对应x1和x2的值(保留一位小数)(用if语句完成)。 //一元二次方程的实现 #include <stdio.h> #include <math.h> #include <stdlib.h> int main() {double a, b, c, delta, x1…

商品说明书的制作工具来啦,用这几个就够了!

商品说明书是用户了解产品特性、性能、使用方法的重要途径。一个明确、易懂的商品说明书&#xff0c;可以显著提升用户体验&#xff0c;进而提升产品的销量。但我们都知道&#xff0c;制作一份高质量的说明书并不容易&#xff0c;需要仔细设计、计划和撰写。幸运的是&#xff0…

Python模块与包管理使用pip与virtualenv【第151篇—模块与包管理】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python模块与包管理&#xff1a;使用pip与virtualenv 在Python开发中&#xff0c;模块和包…

【Linux系列】tree和find命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

网络性能提升10%,ZStack Edge 云原生超融合基于第四代英特尔®至强®可扩展处理器解决方案发布

随着业务模式的逐渐转变、业务架构逐渐变得复杂&#xff0c;同时容器技术的兴起和逐渐成熟&#xff0c;使得Kubernetes、微服务等新潮技术逐步应用于业务应用系统上。 为了充分释放性能、为业务系统提供更高效的运行环境&#xff0c;ZStack Edge 云原生超融合采用了第四代英特尔…

c语言例题,逐个打印数字

今天来分享个比较简单的程序例题&#xff0c;也是比较经典的一个新手例题&#xff0c;逐个打印输入的数字。我们直接从主函数看起&#xff0c;先定义一个num变量&#xff0c;同时变量的类型是unsigned int&#xff0c;这个类型的意思是无符号的整型变量&#xff0c;unsigned&am…

单链表求集合的交集

#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…

嵌入式数据库-Sqlite3

阅读引言&#xff1a; 本文将会从环境sqlite3的安装、数据库的基础知识、sqlite3命令、以及sqlite的sql语句最后还有一个完整的代码实例&#xff0c; 相信仔细学习完这篇内容之后大家一定能有所收获。 目录 一、数据库的基础知识 1.数据库的基本概念 2.常用数据库 3.嵌入式…

2、Cocos Creator 下载安装

Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统&#xff0c;能够同时对多版本引擎和项目进行统一升级和管理&#xff01;Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口&#xff0c;方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…

习题2-5 求平方根序列前N项和

本题要求编写程序&#xff0c;计算平方根序列 的前N项之和。可包含头文件math.h&#xff0c;并调用sqrt函数求平方根。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S&#xff0c;精确到小数点后两位。题目保证计算结果不…

SD-WAN网络构建要点简述

近年来&#xff0c;SD-WAN已成为企业网络优化的热门选择。SD-WAN代表软件定义广域网&#xff0c;是一种基于软件的网络解决方案&#xff0c;旨在提高企业网络连接的可靠性、安全性和性能。相比传统网络架构&#xff0c;SD-WAN技术通过虚拟化网络通信&#xff0c;利用智能软件和…

ubuntu20.04安装截图工具flameshot

ubuntu20.04 自带的截图工具&#xff0c;可以使用快捷键“shift printScreen” ,但是它不能对截图进行编辑。 现在安装截图工具 flameshot&#xff0c;使用以下命令&#xff1a; sudo apt install flameshot 安装完成后&#xff0c;使用以下命令打开&#xff1a; flamesho…

【实验报告】--基础VLAN

【VLAN实验报告】 一、项目背景 &#xff08;为 Jan16 公司创建部门 VLAN&#xff09; Jan16 公司现有财务部、技术部和业务部&#xff0c;出于数据安全的考虑&#xff0c;各部门的计算机需进 行隔离&#xff0c;仅允许部门内部相互通信。公司拓扑如图 1 所示&#xff0c; …

Android 12系统源码_多窗口模式(一)和多窗口模式相关方法的调用顺序

前言 从 Android 7.0 开始&#xff0c;Google 推出了一个名为“多窗口模式”的新功能&#xff0c;允许在设备屏幕上同时显示多个应用&#xff0c;多窗口模式允许多个应用同时共享同一屏幕&#xff0c;多窗口模式&#xff08;Multi Window Supports&#xff09;目前支持以下三种…

ubuntu2204配置zabbix6.4高可用

zabbix6.4-HA 配置keepalived配置haproxy数据库高可用配置zabbix-server配置proxy配置客户端agent 本实验VMware搭建zabbix6.4高可用集群&#xff0c;搭配haproxykeepalived。 master&#xff0c;node节点搭建haproxykeepalibed主备并配置vip地址 三台控制节点搭建数据库高可用…

学生成绩管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 1. 管理员功…

创建第一个51文件

1.找一个文件目录创建一个main.c 比如我的 F:\my_project\project_of_51\0.first_of_51 什么你不会&#xff1f; 先把这里的文件扩展名打开; 再创建一个文本文件&#xff0c;重新命名为main.c // 修改.c 后弹出一个确认修改的框&#xff0c;选确认即可 2.kei操作: 1&#xf…

腾讯云2核4G5M云服务器性能评测,不买后悔

腾讯云轻量应用服务器2核4G5M配置性能测评&#xff0c;腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;并发数10&#xff0c;支持每天5000IP人数访问&#xff0c;腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线&#xff1f;并发数测试、CPU性能、内存性能、…