文章目录
一、Chrony与ntp对比
ntp(Network Time Protocol)和Chrony都是用于同步计算机时钟的协议,它们都可以在计算机集群中实现时间同步。但是,它们有一些不同之处:
-
算法:NTP使用一种复杂的算法来同步时钟,而Chrony使用一种叫做"temporal median"的算法,该算法可以在更短的时间内同步时钟。
-
精度:Chrony通常比NTP更准确,尤其是在网络延迟较高的情况下。Chrony可以在网络延迟较高的情况下保持更好的同步精度。
-
配置:Chrony的配置比NTP简单,而且可以自动适应网络环境。另外,Chrony可以在没有网络连接的情况下使用本地时钟源进行同步。
-
安全性:NTP在安全性方面存在一些问题,因为它没有内置的身份验证机制。而Chrony支持加密和身份验证机制,可以提供更好的安全性。
综上所述,Chrony通常比NTP更适合在计算机集群中使用,因为它可以提供更好的同步精度和安全性,并且配置更简单。
1.1 其他区别:
- ntp是一种较为传统的时间同步工具,chrony是一种相对较新的时间同步工具
- Chrony运行于udp/323端口,ntp运行于udp/123端口
ss -nul # 查看已开放的端口,可查看到“*:123”或“::1:323”端口
- 使用chrony服务器可以同时为chrony客户端和ntp客户端提供服务
- chrony和ntp不能同时兼容的,只能运行一个,否则会出错
1.2 注意:
CentOS8系统中,原有的时间同步服务 ntp/ntpdate服务已经无法使用,使用yum安装,提示已不存在。时间同步将由chrony来实现。
No match for argument: ntpdate Error: Unable to find a match: ntpdate
之前的版本:yum install -y ntp
# CentOS 6或7 系统
centos8:yum -y install chrony
二、Chrony
Chrony包括两个核心组件:
-
chronyd:一个后台运行的守护进程,用于调整内核中运行的系统时钟与NTP服务器同步。它确定服务器增减时间的比率,并对此进行调整补偿,即是服务器端进程也可以是客户端进程
-
chronyc:提供用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的服务器上工作,也可以在一台不同的远程服务器上工作
2.1 Chrony安装
yum -y install chrony # 服务器和客户端都需要安装,然后启动
systemctl status chronyd # 查看是否安装chrony
rpm -qa | grep chrony # 查看是否安装chrony, 输出chrony-3.3-3.el8.x86_64
2.2 修改配置文件
vi /etc/chrony.conf # 修改后保存
2.3 关闭防火墙(一般不需要)
为了避免集群中各虚拟机通过NTP服务进行时间同步的操作被禁止,需要关闭服务器和客户端的防火墙服务。命令如下:
systemctl status firewalld #查看防火墙服务启动状态
systemctl stop firewalld #关闭防火墙服务
systemctl disable firewalld #禁止防火墙开机启动
2.4 修改配置文件需要重启
# 开机自动启用chronyd服务
systemctl enable chronyd.service # 安装后需要启动
# 重启chronyd服务
systemctl restart chronyd.service # 修改配置文件需要重启
# 查看chronyd服务状态
systemctl status chronyd.service
注意:
修改后重启chronyd服务后,自动同步时间比较久,还有一种手动同步的方法:
yum install ntpdate
ntpdate ***,例如ntpdate ntp.aliyun.com
2.5 查看时间同步源状态
重启Chrony服务使配置内容生效后,可查看:
该命令用于显示 chrony 正在从哪些来源获取时间同步的详细信息。
chronyc sources -v
- M:这表示信号源的模式。^表示服务器,=表示对等方,#表示本地连接的参考时钟。
- S:此列指示源的状态。
- 来源的 IP 地址或主机名
- address:来源的参考 ID(通常是源的 IP 地址)
- Stratum:来源的层级(距离参考时钟的跳数)
- Poll:这显示轮询源的速率,以秒为单位的时间间隔的以2为底的对数。因此,值为6表示每64秒进行一次测量。chronyd会根据当前情况自动更改轮询速率。
- Reach:这显示了源的可达性寄存器以八进制数字打印。寄存器有8位,并在每个从源接收或丢失的数据包上更新。值377表示从最后八次传输中收到了对所有用户的有效答复。
- LastRx:此列显示多长时间前从来源接收到了最后一个好的样本(在下一列中显示)。未通过某些测试的测量将被忽略。通常以秒为单位。字母m,h,d或y表示分钟,小时,天或年。
- Last sample:此列显示上次测量时本地时钟与源之间的偏移。方括号中的数字表示实际测得的偏移量。可以用ns(表示纳秒),us (表示微秒),ms(表示毫秒)或s(表示秒)作为后缀。
方括号左侧的数字表示原始测量值,已调整为允许此后施加于本地时钟的任何摆度。
+/-指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前。
2.6 chronyc 及timedatectl命令
chronyc sources -v # 查看 ntp_servers
chronyc sourcestats -v # 查看 ntp_servers 状态
chronyc activity -v # 查看 ntp_servers 是否在线
chronyc tracking -v # 查看 ntp 详细信息
chronyc -a makestep # 强制同步下系统时钟
chronyc clients # 查看哪些ip连接我的ntp时间了
timedatectl # 查看日期时间、时区及NTP状态
timedatectl list-timezones # 查看时区列表
timedatectl set-timezone +所要修改的时区 # 修改时区
timedatectl set-time “所要修改的日期” # 修改日期时间
2.7 主配置文件chrony.conf详解
1、客户端设置
# 使用 pool.ntp.org 项目中的公共服务器。以server开,理论上想添加多少时间服务器都可以。
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
driftfile /var/lib/chrony/drift
makestep 1.0 3 # 如果系统时钟的偏移量大于1秒,则允许系统时钟在前三次更新中步进。
rtcsync # 启用实时时钟(RTC)的内核同步。该指令使得chronyd定期将系统时间复制到RTC时钟。启用硬件时钟同步。
hwtimestamp * # 通过使用 hwtimestamp 指令启用硬件时间戳
minsources 2 # 增加调整系统时钟所需的最小可选源数。
# 即使未同步到时间源,也要提供时间。
# Serve time even if not synchronized to a time source.
local stratum 10(取值范围1-15,当默认时钟源无法同步,则当前系统层级为10)
keyfile /etc/chrony.keys # 指定包含 NTP 身份验证密钥的文件。
logdir /var/log/chrony # 指定日志文件的目录。
log measurements statistics tracking # 选择日志文件要记录的信息。
注意:如果客户端和服务端时间相差较大,开启makestep 1.0 3参数是可以加快时间同步的,参数说明:
- 1.0:指定每秒钟的步进量为 1.0 秒。这意味着系统时钟将以每秒 1.0 秒的速度进行调整
- 3:表示允许的最大步进次数。如果时钟偏离太大,在 makestep 执行期间,默认情况下 chrony 将最多执行 3 次步进调整
如何修改该客户端同步某服务端:
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst # 注释掉原先默认的服务器
server ntp.aliyun.com iburst # 表示添加的时间服务器为阿里云授时中心
或
server 192.168.142.188 iburst # 表示添加的时间服务器为该ip
# iburst:加快调整时间的频率(突发)
2、服务端设置
如果不设置则所有客户端都可同步
allow 192.168.30.0/24 # 允许本地哪个网段的机器来同步本机的时间
3、查看是否同步
date
2.8 chrony配置中问题的发现与解决
1、添加的客户端时钟源时会出现 ?(已失去连接性或其数据包未通过所有测试的源)导致无法同步时钟源
解决:①查看防火墙是否关闭②查看selinux是不是permissive或者disable的状态③ping一下看一看链路是否为通的④检查一下网络配置⑤chrony配置中allow指令默认情况下不允许ntp客户端访问