时间服务器chrony(作时间同步)---------NTP时间同步的另一种表现
Linux时间服务器chrony用法
Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软件。它能让计算机时间与标准的时钟服务器(NTP)同步,从而让计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务,Chrony可以理解为NTP的另一种实现。
chrony相比ntp的优势主要如下:
-
能更精确、更快的同步时钟,传统ntp 需要几小时,而chrony 仅需要数秒钟或数毫秒即可完成时间同步
-
chrony 占用系统资源少,只有被唤起时才占用少部分CPU ,chrony 兼容ntpdate
-
能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用
-
在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
-
无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
Chrony运行于UDP323端口,ntp运行于UDP123端口,使用chrony服务器可以同时为chrony客户端和ntp客户端提供服务
注意:chrony和ntp不能同时兼容的,只能运行一个,否则会出错
Chrony包括两个核心组件:
-
chronyd:一个后台运行的守护进程,用于调整内核中运行的系统时钟与NTP服务器同步。它确定服务器增减时间的比率,并对此进行调整补偿,即是服务器端进程也可以是客户端进程
-
chronyc:提供用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的服务器上工作,也可以在一台不同的远程服务器上工作
CentOS7默认使用了chrony作为时间服务器,如果要使用ntp,需要额外安装
本例子演示通过一台机器部署chrony来作为时间服务器,另一台客户端来同步此时间
环境准备:
-
192.168.49.224:时间服务器,需要安装chrony
-
192.168.49.130:客户端服务器,需要同步时间
服务端
1、首先查看49.224机器的时间以及是否安装了chrony,如图:
从上图可以看出,49.224服务器时间为2023年9月5号上午十点34,并且已经安装了chrony,如果没有安装,那么就执行如下命令安装和启动:
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
2、查看chrony.conf配置文件,参数说明如下:
#配置时间服务器,以server开头,可添加多个
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
#根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中重启补偿校正
driftfile /var/lib/chrony/drift
#如果系统时钟的偏移量大于1秒,则允许系统时钟在前三次更新中步进
makestep 1.0 3
#启用一个内核模式,在该模式中,系统时间每1分钟会拷贝到实时时钟
rtcsync
#通过使用 hwtimestamp 指令启用硬件时间戳
#hwtimestamp *
#增加调整所需的可选择源的最小数量
#minsources 2
#允许指定网络的主机同步时间,不指定就是允许所有,默认不开启
allow 192.168.49.130/16
#当chrony提供的时间不可用,采用本地时间继续作为时间服务器让其他主机来同步时间
local stratum 10
#指定包含NTP验证密钥的文件
#keyfile /etc/chrony.keys
#指定存放日志文件的目录
logdir /var/log/chrony
注意看上面的allow是允许哪个客户端来同步时间,如果不设置则所有客户端都可同步,修改完成后重启chrony,如下:
systemctl restart chronyd
客户端
客户端同步时间也使用chrony守护进程进行同步
1、首先查看客户端的时间,如图:
从上图可以看出,与服务端的时间差了很多,现在进行同步下
2、安装chrony进程,执行如下命令:
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
3、编辑配置文件chrony.conf,添加时间服务器为服务端地址,其余配置不用动,如图:
4、启动chrony,未成功,查看错误日志/var/log/message,内容如下:
Sep 5 05:45:25 localhost systemd: Starting NTP client/server...
Sep 5 05:45:25 localhost chronyd[18360]: chronyd version 3.4 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
Sep 5 05:45:25 localhost chronyd[18360]: Could not change ownership of /var/run/chrony : Operation not permitted
Sep 5 05:45:25 localhost chronyd[18360]: Could not access /var/run/chrony : No such file or directory
Sep 5 05:45:25 localhost chronyd[18360]: Disabled command socket /var/run/chrony/chronyd.sock
Sep 5 05:45:25 localhost chronyd[18360]: Fatal error : Could not open /var/run/chrony/chronyd.pid : No such file or directory
Sep 5 05:45:25 localhost chronyd: Could not open /var/run/chrony/chronyd.pid : No such file or directory
Sep 5 05:45:25 localhost systemd: chronyd.service: control process exited, code=exited status=1
Sep 5 05:45:25 localhost systemd: Failed to start NTP client/server.
Sep 5 05:45:25 localhost systemd: Unit chronyd.service entered failed state.
Sep 5 05:45:25 localhost systemd: chronyd.service failed.
上面的错误是因为当前系统是centos7.3,然后使用yum安装chrony后默认安装了最新版本的chrony,最新版本chrony不兼容7.3内核,因为要么安装对应7.3内核的chrony,要么升级系统版本,我这里直接升级系统版本,执行如下命令:
yum update -y
升级后重启chronyd即可成功
注意:如果没有报错,第4步可忽略
5、此时查看服务端和客户端的时间,一般客户端重启chronyd后几秒钟即可实现时间同步,如图:
注意:如果客户端和服务端时间相差较大,开启makestep 1.0 3参数是可以加快时间同步的,参数说明:
-
1.0:指定每秒钟的步进量为 1.0 秒。这意味着系统时钟将以每秒 1.0 秒的速度进行调整
-
3:表示允许的最大步进次数。如果时钟偏离太大,在 makestep 执行期间,默认情况下 chrony 将最多执行 3 次步进调整
使用 makestep 可以帮助快速纠正系统时钟的较大偏移,以便尽快与 NTP 服务器同步。然而,过多的大步调整可能会对系统稳定性产生一些负面影响,因此 makestep 的使用应慎重,并尽量在网络环境不稳定或初始同步时使用
常用的chronyc命令如下:
chronyc sources -v #查看 ntp_servers
chronyc sourcestats -v #查看 ntp_servers 状态
chronyc activity -v #查看 ntp_servers 是否在线
chronyc tracking -v #查看 ntp 详细信息
chronyc -a makestep #强制同步下系统时钟
更多用法可自行网上搜索!!!