跳到主要内容

3、实战:Centos7时间服务器搭建(chrony服务方式)-2022.5.31(测试成功)

更新于:2023年12月24日0

实战:Centos7时间服务器搭建(chrony服务方式)-2022.5.31(测试成功)

img

目录

[toc]

写在前面

对于时间服务(ntp/chrony),都是cs架构(服务端和客户端),我们一般该如何使用呢?

  1. 服务端:就是提供给其它机器ntp时钟源的机器。(安装好ntp/chrony软件,配置一些必要参数,保证自己的ntp服务始终可用就好。)
  2. 客户端:去同步ntp server的机器。(安装好ntp/chrony软件,将ntp server ip配置进去就好。)

前言

chrony简介

Chrony是一个用于同步计算机系统时钟的软件。与使用NTP协议的其他时钟同步软件不同,Chrony可以快速同步时钟并保持更高的同步精度

Chrony有以下几个特性:

  1. 它与网络状态的变化的影响较小,即它能够在网络不稳定、网络延迟较高的情况下保证时钟同步的精度;
  2. 它在计算机重启后的时钟同步速度也较快;
  3. 它能通过调整本地时钟频率来保持时钟精度。

Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确。它由两个程序组成:chronyd和chronyc

chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

chronyc 提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作

配置文件:Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置。

理解时间源的层数

时间源的层数(stratum)代表该时间源与本地时钟的距离。stratum=0代表本地时钟stratum=1代表直接与本地时钟相连的时间源stratum=2代表通过一级时间源与本地时钟相连的时间源,以此类推。stratum通常取值范围为0~16。

在chronyc sources -v命令输出的信息中,我们可以看到每个时间源的stratum。之所以强调时间源的层数,是因为它对时间同步的准确性有非常重要的影响。若时间源与本地时钟之间的距离太远,则同步时间的精度会受到严重的影响,并可能出现不可预期的错误。

例如,如果一个时间源的stratum=16,那么该时间源与原子钟的时间差可能会超过一天,因此在实际应用中是不合适的。

在选择时间源时,我们应该优先选择低层数的时间源,并加入多个低层数的时间源以提高同步时间的精度和可靠性。

深入理解时间同步的过程

在用chronyc sources -v命令检查时间源时,我们需要深入了解时间同步的过程。关于如何同步时间,传统的NTP协议在这里不再详述,读者可以自行学习。在这里,我们介绍chrony这个现代化的时钟同步协议的时间同步过程。

时间同步的过程是一个动态的过程,系统会不断地根据各个时间源的情况调整自己的本地时钟。在初始化时,chronyd程序默认使用本地的硬件时钟来计算时间,该本地时钟通常是Linux系统的kernal时钟。在chronyd启动后,它会首先尝试与各个时间源建立连接,然后从中选择出多个可用的时间源。

chrony会尝试通过NTPv4或使用chrony自己的简化版协议进行通讯,通讯频率由各个时间源的poll参数决定。系统会定时地向时间源发送数据包,时间源会对这些数据包进行响应,并包含自己当前的时差信息。chrony通过分析各个时间源提供的时差信息,计算出当前系统的整体时差,并使用一种叫做时滑动平均的算法不断地更新本地时钟。时滑动平均算法可以提高同步时间的精度和可靠性。

需要注意的是,时间同步的过程是双向的,不仅是系统向时间源发送数据包,时间源也会向系统发送数据。时间源可以检测到本地的时钟偏差,并根据系统的情况调整自己的时钟。因此,只要我们选择的时间源足够靠谱,那么系统的时间同步的精度和准确性是有很大保证的。

1、Chrony的安装

以下示例将以CentOS系统为例,介绍如何安装Chrony。

1.安装软件

yum install chrony –y  #安装chrony

2.启动服务并设置开机启动

systemctl enable chronyd --now #启动服务并设置开机启动
systemctl status chronyd #查看chronyd服务状态
  • 其它
systemctl start chronyd.service  #启动Chrony服务
systemctl restart chronyd.service #重启Chrony服务
systemctl stop chronyd.service #停止Chrony服务
systemctl status chronyd.service #查看Chrony服务状态

2、Chrony的配置

Chrony的配置文件为/etc/chrony.conf。以下示例列出了几个常见的配置选项。

1、服务器源

通过添加参考服务器源,Chrony会从这些源中同步时钟。以下示例添加了一些NTP服务器源。

server time1.aliyun.com iburst
server time2.aliyun.com iburst
server ntp1.aliyun.com iburst

注意:这里可以天服务器ip,也可以填其域名;

2、本地时钟频率

Chrony可以调整本地时钟频率来保持时钟精度。以下示例设置了每天对本地时钟频率进行一次微调。

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

3、其它配置(可选)

除了上述选项之外,还有许多其他的Chrony配置选项,可以根据需要进行设置。

例如,allow选项用于指定可以访问Chrony服务的网络地址。

3、Chrony的查看

在CentOS系统下使用Chrony可以通过命令行和图形界面两种方式。

1、命令行操作

以下是一些运行Chrony服务的常用命令。

systemctl status chronyd  #查看Chrony服务状态

chronyc sources
或者
chronyc sources -v #列出已连接的时间源的基本信息,与chronyc sources -v命令类似,区别在于输出信息更为简洁。

chronyc tracking #查看Chrony当前时间状态
  • 案例
[root@hg-linux-test ~]# chronyc sources 
210 Number of sources = 14
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 120.25.115.20 2 10 302 43m -1136us[-1179us] +/- 16ms
^? 10.143.33.49 0 10 0 - +0ns[ +0ns] +/- 0ns
^+ 100.100.3.1 2 10 377 199 +207us[ +207us] +/- 2780us
^* 100.100.3.2 2 10 377 840 +17us[ +23us] +/- 2939us
^+ 100.100.3.3 2 10 77 30m +98us[ +104us] +/- 2868us
^- 203.107.6.88 2 10 377 387 -2217us[-2217us] +/- 18ms
^? 10.143.33.50 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.33.51 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.44 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.45 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.46 0 10 0 - +0ns[ +0ns] +/- 0ns
^+ 100.100.5.1 2 10 377 849 +142us[ +148us] +/- 3269us
^+ 100.100.5.2 2 10 3 24m -4982ns[ +940ns] +/- 3210us
^+ 100.100.5.3 2 10 377 361 -238us[ -238us] +/- 3333us
[root@hg-linux-test ~]#


[root@hg-linux-test ~]# chronyc sources -v
210 Number of sources = 14

.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- 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
===============================================================================
^- 120.25.115.20 2 10 302 42m -1136us[-1179us] +/- 16ms
^? 10.143.33.49 0 10 0 - +0ns[ +0ns] +/- 0ns
^+ 100.100.3.1 2 10 377 183 +207us[ +207us] +/- 2780us
^* 100.100.3.2 2 10 377 824 +17us[ +23us] +/- 2939us
^+ 100.100.3.3 2 10 77 30m +98us[ +104us] +/- 2868us
^- 203.107.6.88 2 10 377 371 -2217us[-2217us] +/- 18ms
^? 10.143.33.50 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.33.51 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.44 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.45 0 10 0 - +0ns[ +0ns] +/- 0ns
^? 10.143.0.46 0 10 0 - +0ns[ +0ns] +/- 0ns
^+ 100.100.5.1 2 10 377 833 +142us[ +148us] +/- 3269us
^+ 100.100.5.2 2 10 3 24m -4982ns[ +940ns] +/- 3210us
^+ 100.100.5.3 2 10 377 345 -238us[ -238us] +/- 3333us
[root@hg-linux-test ~]#


[root@hg-linux-test ~]# chronyc tracking
Reference ID : 64640302 (100.100.3.2)
Stratum : 3
Ref time (UTC) : Mon Dec 18 10:04:33 2023
System time : 0.000039729 seconds slow of NTP time
Last offset : +0.000005916 seconds
RMS offset : 0.000016057 seconds
Frequency : 39.143 ppm slow
Residual freq : -0.000 ppm
Skew : 0.001 ppm
Root delay : 0.002904563 seconds
Root dispersion : 0.002001731 seconds
Update interval : 1043.6 seconds
Leap status : Normal
[root@hg-linux-test ~]#
2、图形界面操作

在CentOS系统下可以通过Chrony Launcher、Time and Date等图形界面工具来管理Chrony的配置和状态。

  • chronyc sources -v详细含义

sources -v命令是chronyc命令的一个子命令,可以列出已连接的时间源的详细信息。

它的基本用法如下:

chronyc sources -v

执行该命令后,会输出以下列格式显示系统当前可用的时间源详细信息:

210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 192.168.1.2 2 6 377 34 -2913us[-3812us] +/- 28ms
^* 10.0.0.2 3 6 377 19 -189us[ -99us] +/- 33ms
^- 210.72.145.44 2 8 117 44 +650us[ +748us] +/- 62ms

* 符号就代表客户端已经正常与时间服务器进行时间同步。

img

该输出包含以下几个基本字段:

  • Name/IP address:时间源的名称或IP地址
  • Stratum:时间源的层数
  • Poll:系统与该时间源通信的频率,单位为秒
  • Reach:表示过去的8个轮询周期内,有多少个包成功到达时间源(最大值为377)
  • LastRx:最后一次收到时间源的包时的时间戳
  • Last sample:最后一次收到时间源的时差信息,包括时间偏差、精度和估计的误差等信息

常见的chronyc命令

  • chronyc tracking:查询当前时间同步的状态信息,包括当前的整体时差和时钟精度等信息。
  • chronyc makestep强制系统立即进行时间同步,通常用于系统时间差距过大时的紧急修复。
  • chronyc waitsync:等待系统与各个时间源同步,以确保当前的时间同步状态是最优的。
  • chronyc sources:列出已连接的时间源的基本信息,与chronyc sources -v命令类似,区别在于输出信息更为简洁。

案例:强制同步时间

chronyc makestep强制系统立即进行时间同步,通常用于系统时间差距过大时的紧急修复。

[root@hg-linux-test ~]# chronyc makestep
200 OK
[root@hg-linux-test ~]#

案例:如何禁用ntp

  1. 关闭ntp/chrony服务;
  2. 用如下命令禁用ntp;
timedatectl set-ntp false

如果NTP已成功禁用,则应该看到以下输出:
NTP sync status: not synchronized

案例:查看ntp版本chronnyd -v

[root@hg-linux-test ~]# chronyd -v
chronyd (chrony) version 3.4 (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
[root@hg-linux-test ~]#

参考

https://www.python100.com/html/HYXP985BA068.html

https://www.python100.com/html/WX1P19UM2K64.html

https://www.python100.com/html/GKD9WD4A2855.html

https://www.python100.com/html/YAPP307UO878.html

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http://onedayxyy.cn/

🍀 语雀

https://www.yuque.com/xyy-onlyone

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!