介绍
Chrony 是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器同步,因此让你的时间保持精确。Chrony既可以作为时钟同步服务端,也可以作为时钟同步客户端,它由两个程序组成,分别是 chronyd 和 chronyc。
端口
Chrony启动会监听两个端口udp 323、udp 123,udp 323监听本地服务,udp 123是我们熟知的NTP(Network Time Protocol)协议,server/client之间通过udp 123端口进行网络时钟同步,如果设置防火墙规则,放行udp 123端口就行
iptables -I INPUT -p udp -m udp -s 10.111.56.0/24 --dport 123 -j ACCEPT
配置文件
命令使用
# 查看时间同步源(-v显示详细信息)
chronyc sources -v
# 查看时间源同步状态
chronyc sourcestats
# 查看在线情况
chronyc activity
# 查看同步详情
chronyc tracking
# 强制同步系统时钟
chronyc -a makestep
# 查看时间同步状态
timedatectl status
# 查看时区列表
timedatectl list-timezones
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间
timedatectl set-time "2022-09-02 12:00:00"
# 开启/关闭网络时钟同步
timedatectl set-ntp yes|no
chronyc sources 输出结果解析
M
这表示信号源的模式。^表示服务器,=表示对等方,#表示本地连接的参考时钟。
S
此列指示源的状态。
* 表示chronyd当前同步到的源。
+ 表示可接受的信号源,与选定的信号源组合在一起。
– 表示被合并算法排除的可接受源。
? 指示已失去连接性或其数据包未通过所有测试的源。它也显示在启动时,直到从中至少收集了3个样本为止。
x 表示chronyd认为是虚假行情的时钟(即,其时间与大多数其他来源不一致)。
〜 表示时间似乎具有太多可变性的来源。
Name/IP address
这显示了源的名称或IP地址,或参考时钟的参考ID。
Stratum
这显示了来源的层,如其最近收到的样本中所报告的那样。层1表示一台具有本地连接的参考时钟的计算机。与第1层计算机同步的计算机位于第2层。与第2层计算机同步的计算机位于第3层,依此类推。
Poll
这显示轮询源的速率,以秒为单位的时间间隔的以2为底的对数。因此,值为6表示每64秒进行一次测量。chronyd会根据当前情况自动更改轮询速率。
Reach
这显示了源的可达性寄存器以八进制数字打印。寄存器有8位,并在每个从源接收或丢失的数据包上更新。值377表示从最后八次传输中收到了对所有用户的有效答复。
LastRx
此列显示多长时间前从来源接收到了最后一个好的样本(在下一列中显示)。未通过某些测试的测量将被忽略。通常以秒为单位。字母m,h,d或y表示分钟,小时,天或年。
Last sample
此列显示上次测量时本地时钟与源之间的偏移。方括号中的数字表示实际测得的偏移量。可以用ns(表示纳秒),us (表示微秒),ms(表示毫秒)或s(表示秒)作为后缀。方括号左侧的数字表示原始测量值,已调整为允许此后施加于本地时钟的任何摆度。
+/-指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前。
chronyc tracking输出结果解析
Reference ID
参考时钟的参考ID
Stratum
本地时钟源层级
System time
系统时间,显示系统跟NTP时间偏差量
Leap status
跳跃状态,一般会显示正常状态Normal或未同步状态Not synchronised
主要需要关心参考ID是否有显示远程NTP服务器信息,本地时钟源层级是否正确,跳跃状态是否正常。
timedatectl status输出结果解析
Local time
本地时间
Universal time
通用时间
Time zone
时区
NTP enabled
NTP状态,开启yes,关闭no
NTP synchronized
跟NTP时钟源同步状态,yes正常同步,no未同步
一般需要关心时区是否正确,NTP enabled、NTP synchronized状态都显示yes
案例
ceph时钟偏差告警,集群状态显示clock skew detected on mon.hostname
查看时钟源状态
chronyc sources -v
S列全显示X,说明当前chrony不能跟现有时钟源进行同步
查看同步详情
chronyc tracking
Reference ID没有获取到时钟源服务信息,Stratum层级显示0,Leap status显示Not synchronised
查看时间同步状态
timedatectl status
NTP synchronized显示no,同步状态也是失败的
强制同步
chronyc -a makestep
在能获取到正常时钟源的情况下可用
处理
重启chrony时钟同步依然无效,多个时钟源时间偏差较大被判定为无效时钟源未同步。处理思路是多个时钟源时间偏差较大就设置单个时钟源,本地服务器跟远程时钟服务器时间偏差较大也会造成不同步(https://bugzilla.redhat.com/show_bug.cgi?id=1525833),可以先手动同步一下
先停止chrony服务
systemctl stop chronyd
手动同步时间
chronyd -q ‘server ntp6.aliyun.com iburst’
启动服务
systemctl start chronyd
检查时间同步状态已恢复