一、知识点
-
chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的
-
chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf
-
chronyc 通过 323 端口与 chronyd 交互,可监控 chronyd 的性能并在运行时更改各种操作参数,chronyc 通过下面的方式访问 chronyd(默认情况下,chronyc 先通过 Unix 域 socket 访问 chronyd,默认的 socket 文件是 /var/run/chrony/chronyd.sock, 如果失败-常见的原因是使用非 root 用户运行 chronyc ),将尝试通过 127.0.0.1 访问 chronyd
-
chrony默认情况下,不允许任何客户端访问,这意味着chronyd主要作为NTP客户端运行。当使用allow指令时(allow all允许所有<#如果写成0.0.0.0/24实验不通过>;allow 192.168.59.0/24 允许网段),chronyd将既是其服务器的客户端,又是其他客户端的服务器
-
chronyd常用命令说明
-
查看时间同步源状态:
chronyc sourcestats -v
【-v是列出详细,可以不要】 -
强制同步时间:
chronyc makestep
【这个命令会立即尝试将系统时间设置为 NTP 服务器的当前时间。请注意,这可能会导致系统时间突然跳跃,这可能会影响正在运行的服务或应用程序。】 -
启用NTP时间同步:
timedatectl set-ntp yes
【默认是启用的,timedatectl命令可以查看状态】 -
查看客户端连接情况【服务端执行】:
chronyc clients
-
列出ntp状态详细:
timedatectl
-
下面timedatectl说明中有详细介绍
设置硬件时间- 硬件时间默认为UTC:
timedatectl set-local-rtc 1/0
- 设置硬件时钟为本地时间:
timedatectl set-local-rtc 1
- 设置硬件时钟为UTC时间:
timedatectl set-local-rtc 0
- 启用NTP时间同步:
timedatectl set-ntp yes
- 开启 NTP:
timedatectl set-ntp true/flase
- 查询和调试 NTP:
chronyc tracking
查询和调试 NTP(网络时间协议)客户端的状态
- 硬件时间默认为UTC:
-
hwclock -w
用于将系统时间写入到硬件时钟(也称为RTC,即实时时钟)中。在Linux系统中,硬件时钟是一个独立的时钟,它可以在系统关闭时继续运行,并且可以在系统启动时用来初始化系统时间。
-
更多相关知识,请访问:https://blog.csdn.net/cuichongxin/article/details/123178318
本实验与上文链接不一致的地方:
- 查询和调试 NTP:
chronyc tracking
查询和调试 NTP(网络时间协议)客户端的状态 chronyc makestep
#强制同步hwclock -w
#用于将系统时间写入到硬件时钟- allow all #如果写成0.0.0.0/24实验不通过
二、实验步骤
- 创建两台ntp服务器
序号 | 服务器名称 | IP | 备注 |
---|---|---|---|
1 | ntp1 | 192.168.200.123 | 主 |
2 | ntp2 | 192.168.200.124 | 备 |
- 安装chrony
dnf install -y chrony
我安装openEuler时,选择的是server安装,自带chrony
- 修改配置文件
vim /etc/chrony.conf
修改内容如下(192.168.200.1是淘宝买的硬件授时服务器)
#pool pool.ntp.org iburst
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
#pool pool.ntp.org iburst
pool 192.168.200.1# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow all #如果写成0.0.0.0/24实验不通过
# Serve time even if not synchronized to a time source.
#local stratum 10
local stratum 10
- 检测
systemctl restart chronyd
chronyc sourcestats -v
三、手动修改服务器1时间,用服务器2去同步错误时间
- 测试之前先临时关闭两台服务器selinux和firewalld,功能测试通过后再针对实际情况开启
clear
setenforce 0
systemctl stop firewalld
- 手动调整服务器1时间
timedatectl set-ntp false
timedatectl set-time "2023-12-12 00:00:00"
hwclock -w #用于将系统时间写入到硬件时钟
timedatectl set-ntp true
date #查看时间
timedatectl #查看详细时间
- 进入服务器2,从服务器1同步错误时间
chronyc makestep #强制同步
hwclock -w #用于将系统时间写入到硬件时钟(这个必须有,否则date查询和timedatectl查询不一致,时间并没改)
date #查看时间
timedatectl #查看详细时间
备用1:检查同步源状态
chronyc sourcestats -v #查看时间同步源状态
备用2:查询和调试 NTP
chronyc tracking #查询和调试 NTP
-
从这段 chronyc tracking 的输出中,我们可以分析以下关于 NTP(网络时间协议)同步状态的信息:
-
Reference ID : C0A8C87B (192.168.200.123)
这是 NTP 服务器的标识符,通常对应于服务器的 IP 地址。在这里,服务器 IP 地址是 192.168.200.123。 -
Stratum : 11
这表示 NTP 服务器的层次。Stratum 1 是最高级的服务器,直接与原子钟相连。Stratum 11 表示这个服务器从其他服务器获取时间,且距离原始时间源已经相当远。 -
Ref time (UTC) : Mon Dec 11 16:09:09 2023
这是 NTP 服务器的当前参考时间,以协调世界时(UTC)表示。 -
System time : 1010.213012695 seconds fast of NTP time
这表明系统时间比 NTP 服务器时间快了约 1010 秒。 -
Last offset : -0.000107685 seconds
上一次时间同步时,系统时间与 NTP 服务器时间的偏差是负的,即系统时间略慢于 NTP 时间。 -
RMS offset : 2199082.750000000 seconds
RMS(均方根)偏移量表示系统时间与 NTP 服务器时间的平均差异。这个值非常大,表明系统时间和 NTP 服务器时间之间存在显著的差异。 -
Frequency : 0.359 ppm fast
这表示系统时钟频率比 NTP 服务器时钟频率快了 0.359 百万分之一(ppm)。 -
Residual freq : -0.077 ppm
剩余频率误差,表示在最近一次时间同步后,系统时钟与 NTP 服务器时钟之间的频率差异。 -
Skew : 0.955 ppm
Skew 表示系统时钟与 NTP 服务器时钟之间的频率偏差率。 -
Root delay : 0.000785275 seconds
从系统到 NTP 时间源的总延迟。 -
Root dispersion : 0.000260121 seconds
NTP 服务器的不确定度。 -
Update interval : 194.2 seconds
系统从 NTP 服务器获取更新的时间间隔。 -
Leap status : Normal
Leap 秒状态。Normal 表示没有 leap 秒事件正在进行或计划。
从上述数据中,我们可以看到系统时间与 NTP 服务器时间之间存在较大的偏差(约 1010 秒),并且 RMS 偏移量也非常大。这可能是由于网络问题、NTP 服务器配置问题或系统时钟问题导致的。为了解决这个问题,你可能需要检查网络连接、NTP 服务器的状态,以及系统时钟设置。同时,RMS 偏移量这么大也可能是因为刚开始同步,还未稳定,所以多等待一段时间并观察数据的变化也是很有帮助的。
- 进入服务器1,查看clients
chronyc clients
- 使用windows客户端同步时间
- 再次进入服务器1,查看clients
chronyc clients
8. 分别开启两台服务器的防火墙
setenforce 1
systemctl start firewalld
firewall-cmd --zone=public --add-port=123/udp --permanent
firewall-cmd --reload
firewall-cmd --list-ports