当前位置: 首页 > ds >正文

chrony时间同步

目录

1.介绍

2.安装

2.1.基本安装

2.2.操作命令

2.3.程序

3.配置

3.1.服务端配置

3.2.客户端配置

4.chronyc使用

5.相关注意点

6.相关链接


1.介绍

        Chrony 是一个用于时间同步的工具,它是 NTP (Network Time Protocol) 的一种实现,旨在在计算机系统上保持准确的时间。Chrony 特别适用于需要高精度、低延迟时间同步的环境,尤其是在网络连接不稳定或频繁断开的情况下。与传统的 NTP 实现相比,Chrony 在许多方面提供了更高的性能和灵活性。

        关于linux上的时间:

        执行timedatectl命令,将会看到3个时间,分别是Local time:本地时间,Universal time:全球标准时间,RTC time:硬件时间,chrony每次同步的是Universal time(全球标准时间),同步完成之后,根据当前设备配置的时区,Local time会更新到本地时间。

        chrony默认通过UDP短链接同步时间,服务端默认端口为:123,抓包如下:

        可以看到客户端每隔一段时间向服务端发送请求对时的报文........

2.安装

2.1.基本安装

        Ubuntu环境使用apt安装即可:sudo apt-get install chrony

        CentOS环境使用yum源进行安装:sudo yum install chrony

2.2.操作命令

        使用上述方法安装之后,可以使用system查看或者设置chrony的工作状态,命令如下:

        systemctl status chrony     //查看chrony工作状态

        systemctl stop chrony        //停止chrony服务

        systemctl start chrony       //启动chrony服务

        systemctl restart chrony    //重启chrony服务

        systemctl disable chrony   //开机禁用chrony服务

        systemctl enable chrony   //开机启用chrony服务

2.3.程序

        安装完成之后,会有两个可执行程序,一个是chronyd服务端,一个是chronyc客户端,chronyd负责时间同步等任务,而chronyc负责设置一些参数给chronyd、以及查看服务端的工作状态。

3.配置

        配置分为两部分,一个是对时服务器的配置,另外一个是客户端的配置。

        示例配置环境:

        192.168.203.131------服务端-----对时服务器

        192.168.203.138------客户端

        192.168.203.138主动同步192.168.203.131上的时间

        注:通常情况下chrony配置文件位置:/etc/chrony/chrony.conf

3.1.服务端配置

        vim打开来对应的配置文件/etc/chrony/chrony.conf

        配置如下内容:

pool ntp.ubuntu.com iburstlog tracking measurements statisticslogdir /var/log/chronyallow 192.168.203.138/24

        其中:

        pool表示当前服务端要同步的对时服务器池,可以按照实际需要修改,例如配置阿里的服务器,可配置多个。

        log表示需要打开哪些日志开关,按照实际需要修改。

        logdir表示日志文件输出的目录。

        allow表示这台对时服务器允许哪些客户端同步,以我配置的ip为例,这台对时服务器允许192.168.203.x网段的ip同步时间。

        修改完成之后重启chrony服务即可,可以使用chronyc sources -v命令查看时间同步状态。

3.2.客户端配置

        vim打开来对应的配置文件/etc/chrony/chrony.conf

        配置如下内容:

server 192.168.203.131 iburst minpoll 2 maxpoll 4driftfile /var/lib/chrony/chrony.driftlog tracking measurements statisticslogdir /var/log/chronyrtcsyncmakestep 0.1 -1maxchange 500 10 3logchange 1mailonchange root@localhost 100

        其中:

        server表示需要和哪一台对时服务器对时,minpoll表示最小的同步周期,maxpoll表示最大的同步周期,其单位为秒,结果为2的幂次方,以我配置为例同步周期在 4-16s之间,特别注意:最小同步周期一般不会配小于64s,如果配置的对时服务器是公网的服务器,则不会按照你配置的最小同步周期去同步

        driftfile用来保存系统时钟的漂移值,可选配置,没什么大用。

        log 和 logdir同服务端配置说明。

        rtcsync用于在系统时间同步之后,将调整后的系统时间写入硬件时钟,以确保在下次启动时,硬件时钟提供正确的时间。

        makestep用来控制立即同步时间,例如客户端时间和服务端时间相差了100s,如果不配置makestep参数,那么客户端会渐进式调整时间差,而如果配置了makestep,客户端会立即同步时间差,第一个参数表示相差的时间间隔,第二个参数表示调整的次数,-1表示不限制调整次数。

        maxchange用来控制大的时间调整次数,主要是用来解决第一次开机或者chrony服务启动,时间偏差较大的问题,例如客户端重启机器了,然后chrony服务启动发现和服务端时间相差了600s,超过了我配置的500s,但是第二个参数我配置的10,因此客户端仍然会同步时间,随着同步周期的递增,第二个参数会逐渐减1变为0,如果第二个参数减到0了,还是有时间差超过500s,那么第三个参数会逐渐减1变为0,如果第三个参数减到0了程序将会退出。其源码如下:

        logchange表示超过配置的阈值时间调整将会记录日志到文件中,如下:

        mailonchange表示超过配置的阈值时间调整会发送邮件到邮箱,邮件路径一般为:/var/mail

4.chronyc使用

        命令行直接输入chronyc即可,然后会进入另外一个视图模式,可以使用tab查看支持的命令,并使用命令设置相关参数。

        例如:

        minpoll 192.168.203.131 2                //设置最小时间同步间隔

        maxpoll 192.168.203.131 4               //设置最大时间同步间隔

        sources -v                                          //查看同步状态

5.相关注意点

        配置文件按照配置完成之后可能会不生效,需要修改chrony相关的启动参数

        修改文件:/usr/lib/systemd/scripts/chronyd-starter.sh,像EFFECTIVE_DAEMON_OPTS变量中追加-l /var/log/chrony/test.log -f /etc/chrony/chrony.conf参数,指定日志输入文件和启动配置文件。

        如果有配置不会使用或者其他问题,可对照源码解决。

6.相关链接

        chrony官方配置文档链接:chrony – chrony.conf(5),需按照自己的版本选择。

        chrony源码下载链接:chrony – Download

http://www.xdnf.cn/news/15193.html

相关文章:

  • searxng 对接openweb-UI实现大模型通过国内搜索引擎在线搜索
  • 通过 .NET Aspire 使用本地 AI 模型
  • 从 SEO 到 GEO:2025 电商搜索新战场|产品 SERP 的 AI 征服指南
  • Docker的/var/lib/docker/目录占用100%的处理方法
  • esp8266-01S实现PPM波形
  • Linux指令与权限
  • SQL138 连续两次作答试卷的最大时间窗
  • 【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(六)
  • Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
  • kotlin中集合的用法
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • wps怎样正常显示毫秒时间
  • Spring Boot 与 Docker 的完美结合:容器化你的应用
  • 深入理解区块链 | 去中心化架构与密码学保障
  • html的outline: none;
  • 杰赛S65_中星微ZX296716免拆刷机教程解决网络错误和时钟问题
  • 智能体决策机制深度剖析:ReAct、Plan-and-Execute与自适应策略
  • Linux 服务器挖矿病毒深度处理与防护指南
  • 数字孪生技术为UI前端赋能:实现产品设计的快速原型验证
  • SDR(软件定义无线电)与软件定义声学系统详解
  • Idea如何解决包冲突
  • Unreal Engine 自动设置图像
  • Docker高级管理
  • C++面试冲刺笔记1:虚函数的基本工作原理
  • Java项目集成Log4j2全攻略
  • 【深度学习】【入门】Sequential的使用和简单神经网络搭建
  • 一天一道Sql题(day05)
  • 计蒜客T3473丑数、Leetcode2401最长优雅子数组、Leetcode167两数之和、Leetcode581最短无序连续子数组
  • Python Day8
  • 第6章应用题