Linux系统中的时间同步服务
一、时间同步服务的概念
时间同步:多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(Network Time Protocol)协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一
二、时间同步实现的方法
(1)ntp:将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在互联网上绝大多数的地方精度可以达到1-50ms。
(2)chrony : 实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。通过Internet同步的两台机器之间的典型精度在几毫秒之内,在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度。
三、时间同步服务的使用
1、基础时间管理:timedatectl 命令
timedatectl 是 systemd 提供的工具,用于管理系统时间、时区和NTP同步状态。
(一)、查看时间状态
## timedatectl / ## timedatectl status
(二)、修改系统时间与时区
(1)、手动设置时间(需关闭NTP同步)
格式:YYYY-MM-DD HH:MM:SS
timedatectl set-time "2025-10-01 12:00:00"
(2)、修改时区
timedatectl list-timezones ### 列出所有时区
timedatectl set-timezone Asia/Shanghai ### 设置时区
(3)、启用/禁用NTP自动同步
timedatectl set-ntp true ### 启用NTP
timedatectl set-ntp false ### 禁用NTP(需手动设置时间)
(4)、设定系统时间计算方式
timedatectl set-local-rtc 0|1 ## 0表示使用utc时间计算方式
四、使用网络时间源同步时间
1、公共ntp地址
(一)、www.ntppool.org
项目是一个提供可靠易用的NTP服务的虚拟集群,[0-3].asia.pool.ntp.org
(二)、公共NTP服务器
- Unix/linux类: ntp.aliyun.com,ntp1-7.aliyun.com 阿里云NTP服务器
- windows类: time.google.com iburst Google公共NTP
- 国家授时中心服务器:ntp.ntsc.ac.cn
2、使用公共ntp时间到本机
在RHEL 9 中使用的同步时间软件为chrony
chrony由两个程序组成,分别是chronyd和chronyc。
- chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
- chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作.
(一)、使用 chrony(推荐)
chrony 是大多数Linux发行版的默认NTP客户端和服务端工具。
chrony作为client的使用方法:
安装与配置:
# dnf install chrony -y
# vim /etc/chrony.conf 【配置时间同步ntp文件】![]()
重启服务并验证查看时间同步情况:
# systemctl restart chronyd.service 【需要重启服务才有效】
# chronyc sources -v 查看同步状态
chronyc tracking 查看时间偏差
同步信息个参数的含义: 文字类: M 时间源模式,“ ^” 表示服务器,“ =” 表示对等方,“ #” 表示本地连接的参考时钟。S 指源的状态。 Name/IP address 显示源的名称或 IP 地址。 Stratum 显示时间来源的层。 Poll 显示轮询源的速率。 Reach 显示源的可达性寄存器以八进制数字打印。 LastRx 显示多长时间前从来源接收到了最后一个好的样本。 Last sample 此列显示上次测量时本地时钟与源之间的偏移。符号类: * 表示 chronyd 当前已经同步到的源。+ 表示可接受的信号源,与选定的信号源组合在一起。 - 表示被合并算法排除的可接受源。 ? 指已失去连接性或者其数据包未通过所有测试的源。 x 表示chronyd认为时虚假行情的时钟,即标记该时间与其他多数时间不一致。 ~ 表示时间似乎具有太多可变性。
(二)、使用 ntpdate(临时手动同步)
ntpdate ntp.aliyun.com 手动同步时间(需先关闭NTP服务)
五、部署本地时间源(NTP服务器)
1、时间同步服务器的搭建
在RHEL9中ntp的服务端同样默认使用chrony
chrony使用端口为udp 323,chrony兼容ntp所以在设定chrony为服务端是也会开启udp的123端口
chrony 的优势:
- 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天24小时运行的虚拟计算机而言非常有用
- 能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用
- 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
- 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性
- 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
使用 chrony 部署
服务端配置:
# vim /etc/chrony.conf
允许特定网段访问
allow 0.0.0.0/0 ### 允许所有人访问
本地时钟作为时间源(stratum 10表示层级) ### 设置同步时间第十层
local stratum 10
客户端配置:
关闭防火墙:
# systemctl stop firewalld ### 服务器端要关闭防火墙才可以同步时间
修改客户端 /etc/chrony.conf,指向本地服务器:
# vim /etc/chrony.conf
pool 192.168.0.0 iburst 本地NTP服务器IP
重启服务(在客户端和服务端配置完毕后进行):
systemctl restart chronyd.service
调试与日志:
查看chrony日志:
journalctl -u chronyd
查看ntp同步状态:
ntpq -p 显示NTP服务器列表及同步状态
chrony的参数说明
serve | 可用于时钟服务器 |
iburst | 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包,包间隔通常为2秒,可加快初始同步速度 |
driftfile | 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件会在重启后为系统时钟作出补偿 |
rtcsyn | 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC) |
allow / deny | 指定一台主机、子网,或者网络以允许或拒绝访问本服务器 |
bindcmdaddres | 允许chronyd监听哪个接口来接收由chronyc执行的命令 |
local stratum 10 | 即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端 |
2、注意事项
1、层级(Stratum)
Stratum 0:原子钟、GPS时钟等硬件设备。
Stratum 1:直接连接Stratum 0设备的服务器。
每增加一层,层级数加1(最高为15)。
2、时间同步冲突
若同时使用chrony和ntpd,需确保只启用一个服务。
手动修改时间后需禁用NTP同步:timedatectl set-ntp false。