cwgxiaoguizi 2020-05-11
Chrony是NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。
在CentOS6中,默认是使用ntpd来同步时间的,但ntpd同步时间并不理想,有可能需要数小时来同步时间。而且ntp也已经很老了。所以在Centos7中换成了chrony来实现时间同步。chrony并且兼容ntpd监听在udp123端口上,自己则监听在udp的323端口上。
如果在chrony配置文件中指定了ntp服务器的地址,那么chrony就是一台客户端,会去同步ntp服务器的时间,如果在chrony配置了允许某些客户端来向自己同步时间,则chrony也充当了一台服务器,所以,安装了chrony即可充当客户端也可以充当服务端。一般我们只需要做客户端就好,不需要对外提供时间同步功能。
一、chrony是两个用来维持计算机系统时钟准确性的程序,这两个程序命名为chronyd和chronyc。
chronyd是一个在系统后台运行的守护进程。主要用于调整内核中运行的系统时间和时间服务器同步,他根据网络上其他时间服务器时间来测量本机时间的偏移量从而调整系统时钟。对于孤立系统,用户可以手动周期性的输入正确时间(通过chronyc)。在这两种情况下,chronyd决定计算机快慢的比例,并加以纠正。chronyd实现了NTP协议并且可以作为服务器或客户端。
chronyc是用来监控chronyd性能和配置其参数的用户界面。他可以控制本机及其他计算机上运行的chronyd进程。
服务unit文件: /usr/lib/systemd/system/chronyd.service
监听端口: 323/udp,123/udp
配置文件: /etc/chrony.conf
二、chrony 的优势:
更快的同步,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用
能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用
在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性
无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
chrony官网:https://chrony.tuxfamily.org
chrony官方文档:https://chrony.tuxfamily.org/documentation.html
三、安装及配置chrony
------------------------------------
yum install chrony ##CentOS7默认已安装chrony
------------------------------------
配置文件
/etc/chrony.conf
server - 可用于时钟服务器,iburst 选项当服务器可达时,发送八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
driftfile - chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。
rtcsync - 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow/deny - 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。
cmdallow / cmddeny - 跟上面相类似,只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令
bindcmdaddress - 该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级
makestep - 通常,chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效
local stratum 10 - 当server中提供的公网NTP服务器不可用时,采用本地时间作为同步标准
keyfile - 指定包含NTP验证密钥的文件
logdir - 指定日志文件的目录
备注:详细指令参数可以使用命令# man chrony.conf查看
四、chronyd服务管理
------------------------------------
systemctl start chronyd.service #启动
systemctl status chronyd.service #查看
systemctl restart chronyd.service #重启
systemctl stop chronyd.service #停止
systemctl enable chronyd.service #设置开机启动
------------------------------------
五、防火墙配置
开放 323/udp,123/udp端口,或直接关闭防火墙
六、使用chronyc
chronyc命令有两种模式,一种是交互式模式,一种是命令行模式。输入chronyc回车就进入交互式模式,进入交互式模式可以使用help命令查看帮助列表
常用指令说明:
accheck - 检查NTP访问是否对特定主机可用
activity - 该命令会显示有多少NTP源在线/离线
add server - 手动添加一台新的NTP服务器。
clients - 在客户端报告已访问到服务器
delete - 手动移除NTP服务器或对等服务器
settime - 手动设置守护进程时间
tracking - 显示系统时间信息
说明:chronyd和chronyc的详细使用方法可以使用命令# man chronyd和# man chronyc查看
八、NTP服务端配置举例
1、安装chrony
2、设置chrony服务开机启动
3、防火墙开放UDP端口号123和323
5、配置ntpd主配置文件ntp.conf
/etc/chrony.conf 增加如下内容,其它保持默认即可
----------------------------------------------------------
# 配置外部时间服务器,将配置文件中默认的全部注释掉
server ntp.ntsc.ac.cn prefer ##中国国家授时中心
server ntp1.aliyun.com ##中国授时
#只允许192.168.0网段的客户端进行时间同步
allow 192.168.0.0/24
# 启用RTC(实时时钟)的内核同步
rtcsync
#当外部时间服务器不可用时,采用本地时间作为同步标准
local stratum 10
----------------------------------------------------------
6、启动Chronyd 服务,以加载新的配置。
Chronyd 服务启动成功后,会立即同步时钟服务器的时间,同时会监听以下两个端口。
端口 123/udp 为标准的 NTP 监听端口,如果要对外提供 NTP Server 功能,必须开启防火墙和监听地址为外部可访问地址。如需修改,你可以通过配置 port 参数来修改。
端口 323/udp 为默认的管理端口。如需修改,你可以通过配置 cmdport 参数来修改。
7、命令行模式查看时间同步源 # chronyc sources -v
8、查看时间同步源状态: # chronyc sourcestats -v
9、直接输入命令chronyc进入交互式模式
九、NTP客户端配置举例
和NTP服务端配置举例配置一样,只是当作客户端来进行时间同步则配置文件不需要配置那么复杂,只需要配置下面的内容就行,其它的默认
------------------------------------------------------------
# 配置时间服务器,将配置文件中默认的全部注释掉
# 配置外部时间服务器,将配置文件中默认的全部注释掉
server ntp.ntsc.ac.cn prefer ##中国国家授时中心
server ntp1.aliyun.com ##中国授时
# 启用RTC(实时时钟)的内核同步
rtcsync
------------------------------------------------------------
参考:
https://blog.51cto.com/qiuyue/2344678
https://cloud.tencent.com/developer/article/1546322