一、Chrony简介
chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务。
chrony由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。
chrony运行于UDP323端口,ntp运行于UDP123端口,使用chrony服务器可以同时为chrony客户端和ntp客户端提供服务
二、V10-desktop时间服务(Chrony)的安装与配置
2.1、安装chrony软件包,默认的光盘源离没有集成该软件包,需要按照如下配置网络源来安装,能看到6万多软件包证明配置成功。
接下来使用:apt-get install chrony -y 安装软件包
2.2、修改Chrony的配置文件/etc/chrony/chrony.conf
(1)Chrony服务既可以作为服务端,也可以作为客户端,这里首先作为客户端来配置,配置信息如下图所示:
注明:这里只需要添加一行参数:
server time1.cloud.tencent.com iburst //跟腾讯的时间服务器同步
(2)重启服务:systemctl restart chronyd.service
(3)使用命令:chronyc sources -v 查看同步结果
注意:只有出现 ^* 才代表成功,出现其他符号表示没同步成功
(4)使用Chrony服务作为时间服务器,按照如下图修改配置文件:
服务端:V10-desktop配置如下
表示允许192.168.253.0/24网段的机器与我同步时间,这里可以根据需求自定义,改完配置文件后执行#systemctl restart chronyd.service 重启服务。
时间服务客户端的配置如下:
表示我要与192.168.253.180时间服务器同步时间,iburst表示立刻同步,改完配置以后重启服务。然后使用:chronyc sources -v查看同步结果如下:
出现 ^* 代表同步成功
三、V10-server时间服务(chrony)配置
3.1 服务器自带chrony软件包,不需要安装。修改chrony的配置文件/etc/chrony.conf(作为客户端与网络里的时间服务器进行同步),配置文件如下所示:
3.2、这里只需要修改这一项,表示与阿里云时间服务器同步。
执行命令重启服务:#systemctl restart chronyd.service ,查看同步结果如下图所示:
出现 ^* 代表同步成功
3.3、 使用Chrony服务作为时间服务器,按照如下图修改配置文件:
allow 192.168.253.0/24:表示允许网段里的所有机器与我同步
执行命令#systemctl restart chronyd.service 重启服务
3.4、访问时间服务的客户端配置
表示与时间服务器192.168.253.179同步,同步结果如下:(^*同步成功)
四、chrony配置文件参数简介
server: 可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
driftfile: 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿
rtcsync:启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow/deny: - 指定一台主机、子网,或者网络以允许或拒绝访问本服务器
cmdallow / cmddeny : 可以指定哪台主机可以通过chronyd使用控制命令
bindcmdaddress:允许chronyd监听哪个接口来接收由chronyc执行的命令
makestep:通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个域值时调整系统时钟
五、使用Chrony同步时间的优势
5.1、 chrony与ntp实现的区别
假如时间慢了20个小时,调整时间有如下两种方式:
(1)类似于手表,转动表针,把时间调整正确;
(2)类似于使用date命令,直接跳跃时间,跳跃的过程中造成部分文件出现空白段;
5.2、 ntp和chrony实现时间同步的方式:
ntp类似于手表一样,转动表针快一些,让时间过的快一些,例如正常的1min,ntp会使用10s来完成,通过更快的时间来实现时间的校对,这种方式可能会导致时间同步完成的较慢;
chrony类似于使用date命令一样,直接改变系统的时间,能更精确的时间和更快的速度同步时钟;
5.3、 chrony的优势
Chrony是NTP的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。
chrony相比ntp的优势:
(1)更快的同步,只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,这对于并非全天 24 小时运行的台式计算机或系统而言非常有用。
(2)能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
(3)在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
(4)在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
(5)无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。
5.4、chrony对时间隔
#man 5 chrony.conf显示的参数如上图所示,总结来看,默认的最小对时间隔是2^6秒也是就是64s,默认的最大对时间隔是2^10也就是1024秒,iburst参数表示,发送到服务器的前四个请求之间的间隔将为2秒或更短,而不是minpoll选项指定的间隔,该选项允许chronyd在启动后不久对时钟进行第一次更新。
验证测试(按照如下图修改配置文件):
minpoll 2:对时最小时间间隔为4秒
maxpoll 4:对时最大时间间隔为16秒
采用脚本实时监测的方式验证结果,监测脚本如下:
#!/bin/bash
while true
do
chronyc sources
sleep 2
done
监测结果如图所示:
poll: 显示轮询源的速率,以秒为单位的时间间隔的以2为底的对数。因此,值为2表示每4秒进行一次测量。chronyd会根据当前情况自动更改轮询速率。
5.5、chronyc sources -v输出结果解析
M:表示授时时钟源 ^表示服务器,= 表示二级时钟源 ,#表示本地连接的参考时钟
S:指示源的状态 *当前同步的源,+表示其他可接受的源,?表示连接丢失的源,x表示一个认为是falseticker 的时钟(即它的时间与大多数其他来源不一致),~表示其时间似乎具有太多可变性的来源
Name/IP address:表示源的名称或IP地址,或者参考时钟的refid值
Stratum:表示源的层级 层级1表示本地连接的参考时钟,第2层表示通过第1层级计算机的时钟实现同步,依此类推。
Poll:表示源轮询的频率,以秒为单位,值是基数2的对数,例如值6表示每64秒进行一次测量,chronyd会根据当时的情况自动改变轮询频率
Reach:表示源的可达性的锁存值(八进制数值) 该锁存值有8位,并在当接收或丢失一次时进行一次更新,值377表示最后八次传输都收到了有效的回复
LastRx:表示从源收到最近的一次的时间 通常是几秒钟,字母m,h,d或y分别表示分钟,小时,天或年,值10年表示从未从该来源收到时间同步信息
Last sample:表示本地时钟与上次测量时源的偏移量 方括号中的数字表示实际测量的偏移值,这可以以ns(表示纳秒),us(表示微秒),ms(表示毫秒)或s(表示秒)为后缀;方括号左侧的数字表示原始测量值,这个值是经过调整以允许应用于本地时钟的任何偏差;方括号右侧表示偏差值,+偏移表示本地时钟快速来源,+/-指示器后面的数字表示测量中的误差范围。
FROM xds