带你精通chrony服务器
华子目录
- 为什么会出现Chrony?
- Linux的两个时钟
- NTP介绍
- Chrony介绍
- 安装与配置
- 安装
- Chrony配置文件分析
- 实验1
- 实验2
- chronyc命令
- 查看时间服务器
- chronyc sources输出分析
- 其他命令
- 常见时区
为什么会出现Chrony?
- 由于IT系统中,准确的计时非常重要,有很多种原因需要准确计时:
- 在网络传输中,数据包括和日志需要准确的时间戳
- 各种应用程序中,如订单信息,交易信息等都需要准确的时间戳
所以就出现了chrony
Linux的两个时钟
- 硬件时钟:即BIOS时钟,也就是我们主板中用电池供电的时钟,是将时间写入到BIOS中,系统断电后时间不会丢失,可以在开机时通过主板程序中进行设置
# 硬件时间查看
[root@server ~]# hwclock
2023-11-18 23:00:27.416227+08:00
- 系统时钟:顾名思义也就是Linux系统内的时钟,是由Linux内核来提供的,系统时钟是基于内存,如果系统断电时间就会丢失 (系统时钟来自BIOS时钟)
[root@server ~]# date -s 10:00 # 修改为错误时间
2023年 08月 20日 星期日 10:00:00 CST
[root@server ~]# date # 查看软件时间
2023年 08月 20日 星期日 10:00:06 CST
[root@server ~]# hwclock -s # 向硬件时间同步
[root@server ~]# date # 查看软件时间
2023年 08月 20日 星期日 09:19:22 CST
NTP介绍
- NTP:(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。
- NTP基于UDP报文进行传输,使用的UDP端口号为123
- NTP可以对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。
- 对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。
- NTP的其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms
Chrony介绍
- chrony是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器(NTP)的同步,因此让你的时间保持精确。
- chrony由两个程序组成,分别是chronyd和chronyc
- chronyd:是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器的同步。它确定计算机增减时间的比率,并对此进行补偿。
- chronyc:提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作
注意:Chrony与NTP都是时间同步软件,两个软件不能同时开启,会出现时间冲突,RHEL9默认使用Chrony作为时间服务器,不再支持NTP软件包
安装与配置
安装
[root@server ~]# yum install chrony -y[root@server ~]# systemctl start chronyd[root@server ~]# systemctl enable chronyd[root@server ~]# systemctl status chronyd
Chrony配置文件分析
- 主配置文件:/etc/chrony.conf
[root@server ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
# 使用pool.ntp.org项目中的公共服务器,或者使用server开头的服务器,理论上想添加多少时间服务器都可以,iburst表示的是首次同步的时候快速同步
pool 2.centos.pool.ntp.org iburst
#pool:项目名,也可以使用server
#向2.centos.pool.ntp.org(域名)服务器进行时间同步
#中间也可以直接写ip地址
#iburst表示的是首次同步的时候快速同步# Use NTP servers from DHCP.
sourcedir /run/chrony-dhcp# Record the rate at which the system clock gains/losses time.
#根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间,补偿调整。
driftfile /var/lib/chrony/drift# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
# 如果系统时钟的偏移量大于1秒,则允许系统时钟在前三次更新中被步进
makestep 1.0 3# Enable kernel synchronization of the real-time clock (RTC).
#启用实时时钟(RTC)的内核同步
rtcsync#通过使用hwtimestamp指令启用硬件时间戳
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *# Increase the minimum number of selectable sources required to adjust
# the system clock.#minsources 2
#指定NTP客户端地址,以允许或拒绝连接到扮演时钟服务器的机器,默认允许所有
# Allow NTP client access from local network.
#allow 192.168.0.0/16
#当我作为一台时间服务器时,我允许哪些主机可以访问我# Serve time even if not synchronized to a time source.
#local stratum 10# Require authentication (nts or key option) for all NTP sources.
#authselectmode require#指定包含NTP身份验证密钥的文件
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony# Insert/delete leap seconds by slewing instead of stepping.
#leapsecmode slew# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC#指定日志文件的目录
# Specify directory for log files.
logdir /var/log/chrony#选择日志文件要记录的信息
# Select which information is logged.
#log measurements statistics tracking
实验1
同步时间
- 第一步:先修改为错误时间
[root@server ~]# date -s 12:00
2023年 11月 19日 星期日 12:00:00 CST
- 第二步:编辑chrony的配置文件
[root@server ~]# vim /etc/chrony.conf # 定位第3行,修改为阿里云的时间同步服务器地址
server ntp.aliyun.com iburst
- 或者第二步:直接使用阿里推荐的参数配置,清空所有内容后复制粘贴若下:
[root@server ~]# vim /etc/chrony.conf
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony
- 第三步:重启服务并测试
[root@server ~]# systemctl restart chronyd
[root@server ~]# date
2023年 11月 19日 星期日 00:53:49 CST
- 第四步:时间同步
# 查看时间是否同步
[root@server ~]# chronyc sources -v.-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 17 20 +217us[+1210us] +/- 30ms
[root@server ~]# timedatectl status # 查看状态Local time: 日 2023-11-19 00:59:17 CSTUniversal time: 六 2023-11-18 16:59:17 UTCRTC time: 六 2023-11-18 16:59:17Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes # yes表示已经完成时间同步,no表示未完成时间同步NTP service: activeRTC in local TZ: no
实验2
搭建本地时间服务器
- 架构
性质 | 地址 | 同步对象(向谁同步) |
---|---|---|
服务端server | 192.168.80.129 | ntp.aliyun.com |
客户端node1 | 192.168.80.130 | 192.168.80.129 |
-
要求
- 服务端server向阿里时间服务器进行同步
- 客户端node1向server进行时间同步
-
第一步:定位server端
[root@server ~]# vim /etc/chrony.conf server ntp.aliyun.com iburst # 修改第3行为阿里的时间服务器地址
allow 192.168.80.130/24 # 删除第26行的前导星号,启用白名单,将node1的ip添加进入[root@server ~]# systemctl restart chronyd # 重启服务[root@server ~]# chronyc sources -v # 同步测试[root@server ~]# timedatectl status # 查看是否同步
- 第二步:定位node1端
[root@node1 ~]# vim /etc/chrony.conf
server 192.168.80.129 iburst # 修改为向server端同步时间[root@node1 ~]# systemctl restart chronyd # 重启服务[root@node1 ~]# timedatectl status[root@server ~]# chronyc sources -v.-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.80.129 3 6 17 27 +2349ns[ +33us] +/- 37ms
- 注意:客户端时间同步失败原因
- 检查系统联通性,使用ping测试
- 检查服务器端的allow参数
- 必须要重启chronyd服务
chronyc命令
查看时间服务器
[root@server ~]# chronyc sources -v # -v参数表示显示内容是否有解释.-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 377 0 +1431us[+1789us] +/- 38ms
chronyc sources输出分析
[root@server ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 377 26 +1443us[+2227us] +/- 31ms
- M:这表示信号源的模式。^表示服务器,=表示对等方,#表示本地连接的参考时钟
- S:此列指示源的状态
- Name/IP address:显示服务器源的名称或IP地址
- Stratum:表示源的层级,层级1表示本地连接的参考时钟,第2层表示通过第1层级计算机的时钟实现同步,依此类推
- Poll:表示源轮询频率,以秒为单位,值是基数2的对数,例如值6表示每64秒进行一次测量,chronyd会根据当时的情况自动改变轮询频率
- Reach:表示源的可达性的锁存值(八进制数值),该锁存值有8位,并在当接收或丢失一次时进行一次更新,值377表示最后八次传输都收到了有效的回复
- LastRx:表示从源收到最近的一次的时间,通常是几秒钟,字母m,h,d或y分别表示分钟,小时,天或年
- Last sample:表示本地时钟与上次测量时源的偏移量,方括号左侧的数字表示原始测量值,方括号右侧表示偏差值,*+/-*指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前
其他命令
- 查看时间服务器的状态
[root@server ~]# chronyc sourcestats -v.- Number of sample points in measurement set./ .- Number of residual runs with same sign.| / .- Length of measurement set (time).| | / .- Est. clock freq error (ppm).| | | / .- Est. error in freq.| | | | / .- Est. offset.| | | | | | On the -.| | | | | | samples. \| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
203.107.6.88 22 13 22m +0.021 4.603 +377ns 2373us
- 查看时间服务器是否在线
[root@server ~]# chronyc activity -v
200 OK # 表示在线
1 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
- 同步系统时钟
[root@server ~]# chronyc -a makestep
200 OK
常见时区
- UTC 整个地球分为24时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一期间,使用一个统一的时间,称为通用协调时间(UTC,Universal Time Coordinated)
- GMT 格林威治标准时间(Greenwich Mean Time)指位于英国伦敦郊区的格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)
- CST 中国标准时间(China Standard Time),GMT + 8 = UTC + 8 = CST
- DST夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用)
相关文章:

带你精通chrony服务器
华子目录 为什么会出现Chrony?Linux的两个时钟NTP介绍Chrony介绍安装与配置安装Chrony配置文件分析实验1实验2chronyc命令查看时间服务器chronyc sources输出分析其他命令 常见时区 为什么会出现Chrony? 由于IT系统中,准确的计时非常重要&am…...

vs2017 编译Qt 5.11.2 源码
SDK 10.0.22000.194 有 2种编译方式 ,第二种 看下面 方式一: 1、问题描述: 使用VS编译程序时,运行库选择多线程(/MT),表示采用多线程静态release的方式进行编译。 但是,发现编译是不能通过的…...

【SpringBoot3+Vue3】四【实战篇】-前端(vue基础)
目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…...

element ui修改select选择框背景色和边框色
一、修改选择框的背景色和边框色 style部分 .custom-select /deep/ .el-input__inner {color: #fff!important;border: 1px solid #326AFF;background: #04308D !important; } html部分 <el-select class"custom-select" v-model"dhvalue" placeholde…...
软件测试人员提问常用的ChatGPT通用提示词模板
如何设计有效的软件测试用例? 如何运用自动化测试工具进行软件测试? 如何进行软件的功能测试、性能测试和安全测试? 如何评估软件测试的质量和覆盖范围? 软件测试有哪些常见的缺陷和错误,如何识别和解决࿱…...

【开源】基于JAVA的服装店库存管理系统
项目编号: S 052 ,文末获取源码。 \color{red}{项目编号:S052,文末获取源码。} 项目编号:S052,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...

Jenkins代码检测和本地静态检查
1:Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具;Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测…...

从0开始学习JavaScript--JavaScript 字符串与文本内容使用
JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作,以及文本内容的获取、修改等操作,并通过丰富的示例代码,帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…...

Linux--网络概念
1.什么是网络 1.1 如何看待计算机 我们知道,对于计算机来说,计算机是遵循冯诺依曼体系结构的(即把数据从外设移动到内存,再从内存到CPU进行计算,然后返回内存,重新读写到外设中)。这是一台计算机…...
C# 中的 Math 数学函数
C# 中的 Math 类提供了许多数学函数,用于执行各种常见的数学运算。以下是 Math 类中的一些常用方法: Math 数学函数 Abs: 返回指定数字的绝对值Acos: 返回指定数字的反余弦值(弧度)Asin: 返回指定数字的反正弦值(弧度&…...

mybatis之主键返回
1.在mybatis的xml中加入 <insert id"insertUser" keyProperty"id" useGeneratedKeys"true" parameterType"com.UserAndOrder"> insert into Tuser(userName,passWord) values (#{userName},#{passWord} ) </insert&…...

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.
首先ChatGpt3.5的文本生成功能十分强大,但是chatgpt有一些使用规范大家需要注意,既然chat是一种工具,我们就需要学会它的使用说明,学会chatgpt的引用语句,会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…...

有趣的按钮分享
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 广告打完,我们进入正题,先看效果: 废话不多,上源码: <button class&quo…...

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection
发表时间:2023年3月5日 论文地址:https://arxiv.org/abs/2208.09686 项目地址:https://github.com/YuHengsss/YOLOV 视频物体检测(VID)具有挑战性,因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…...

如何将图片转为excel或word?(客户端)
演示软件:金鸣表格文字识别大师3.6.1(新版本界面可能会略有不同) 第一部分 将图片转为excel或文表混合的word 一般的软件要将图片转为可编辑的excel,都需要待识别的图片要有明显清晰的表格线,但我们程序现已克服了这…...

Linux网络——HTTP
一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层. 我们上一次写的网络版本计算器就是一个应用层的网络程序。 我们约定了数据的读取,一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是应…...
ElasticSearch综合练习题,ES为8版本,使用Kibana运行语句
文章目录 前言一、ES查询集群情况二、ES索引习题查询所有索引查询单个索引 三、ES增删改查数据单条处理批量处理 四、雇员查询练习题五、学生查询练习题六、商品信息联系题其他:一问一答参考文档 前言 ES8版本没有type概念,所以语法可能会与其他版本有差…...

Java方法中不使用的对象应该手动赋值为NULL吗?
在java方法中,不使用的对象是否应该手动赋值为null?我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…...

Mysql主从搭建
Mysql主从搭建 1.Mysql下载1.1 查看操作系统2.2 下载mysql安装包 2.Mysql安装2.1 解压2.2 目录重命名2.3 创建data,存储文件2.4 创建用户组2.5 授权用户2.6 配置环境变量2.7 编辑my.cnf2.8 创建相关目录和文件2.9 初始化数据库2.10 复制mysql.server到/etc/init.d/下…...

WPF程序给按钮增加不同状态的图片
首先我们在资源里添加几个图片,Up,Over和Down状态。 然后我们创建一个Style。默认我们的背景设置成Up 然后在Triggers里添加代码,当Property:IsMouseOver为True的时候更换成Over;当Property:IsPressed为Tr…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
java+webstock
maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

WinUI3开发_使用mica效果
简介 Mica(云母)是Windows10/11上的一种现代化效果,是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果,Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...