网站首页 > 教程文章 正文
在Linux系统里,精确的时间同步极为关键。
不管是日志记录、任务调度,还是分布式系统的数据一致性,都离不开精准统一的时间。
接下来,我们就深入了解下Linux系统中时间同步的原理与搭建方法。
一、时间同步基础概念
(一)硬件时钟与系统时钟
1、硬件时钟
由计算机主板上的CMOS电池供电维持运行,即便系统断电也能持续计时。在系统启动时,它会读取硬件时钟的时间,以此初始化系统时钟。
2、系统时钟
由Linux内核维护,在系统运行期间,借助CPU的时钟中断来更新时间,其精度和稳定性受CPU性能和负载影响。
(二)时间同步协议
1、NTP(Network Time Protocol)
这是最常用的时间同步协议,通过复杂算法和多层级服务器结构,实现高精度时间同步。
在局域网内精度可达0.1ms,在互联网上大多地方精度为1 - 50ms 。NTP服务器层级按离外部UTC源远近分为不同Stratum(层),Stratum 1服务器直接与高精度时间源(如原子钟、GPS时钟)相连,层级数值越大,离精确时间源越远,精度越低。
2、Chrony
新一代时间同步服务,相比NTP,它在时间同步的速度和精度上表现更优,尤其适用于网络不稳定或虚拟机环境。
能快速纠正时间偏差,减少时间调整对系统的影响 。
二、使用NTP搭建时间同步
(一)安装NTP
大多数Linux发行版默认安装了NTP客户端软件包,要是未安装,可通过包管理器进行安装:
1、Debian/Ubuntu系统:
sudo apt update
sudo apt install ntp
2、Red Hat/CentOS系统:
sudo yum install ntp
# 对于CentOS 8及以上版本,dnf是新一代的包管理器,也可使用以下命令安装
sudo dnf install ntp
(二)配置NTP
NTP的主要配置文件是 /etc/ntp.conf ,用文本编辑器(如 vim 或 nano )打开进行编辑:
sudo vim /etc/ntp.conf
# 如果你习惯使用nano编辑器,命令如下
sudo nano /etc/ntp.conf
配置示例如下:
# 使用亚洲地区的NTP服务器
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
# 允许本地网络内的客户端同步时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 配置本地时钟作为备用时间源
server 127.127.1.0
fudge 127.127.1.0 stratum 10
iburst 参数表示快速同步模式,有助于快速与NTP服务器进行时间同步;
restrict 语句用于设置访问控制, nomodify 表示客户端不能修改NTP服务器配置 , notrap 表示不接收trap信息 。
(三)启动与验证NTP服务
配置完成后,启动NTP服务并设置开机自启:
sudo systemctl start ntp
sudo systemctl enable ntp
# 在某些系统中,NTP服务可能叫ntpd,启动和设置开机自启命令如下
sudo systemctl start ntpd
sudo systemctl enable ntpd
使用 ntpq -p 命令验证时间同步情况:
ntpq -p
输出结果中,带有 * 符号的服务器表示当前选定的主服务器, remote 列显示NTP服务器地址, refid 是参考时钟源, st 为Stratum层级, when 表示上次同步到现在的秒数, poll 是下次查询间隔 , reach 代表已经向上层NTP服务器要求更新的次数 , delay 为网络传输延迟 , offset 是时间补偿结果 , jitter 是时间抖动。如果出现 no server suitable for synchronization found 错误,可能是网络问题或者配置的NTP服务器不可用,可以检查网络连接,或者更换NTP服务器地址再次尝试。
三、使用Chrony搭建时间同步
(一)安装Chrony
在大多数Linux发行版中,可通过包管理器安装Chrony:
1、Debian/Ubuntu系统:
sudo apt update
sudo apt install chrony
2、Red Hat/CentOS系统:
sudo yum install chrony
# 对于CentOS 8及以上版本,dnf是新一代的包管理器,也可使用以下命令安装
sudo dnf install chrony
(二)配置Chrony
Chrony的配置文件是 /etc/chrony.conf ,使用文本编辑器打开:
sudo vim /etc/chrony.conf
# 如果你习惯使用nano编辑器,命令如下
sudo nano /etc/chrony.conf
配置示例如下:
# 使用阿里云NTP服务器
server ntp.aliyun.com iburst
# 允许本地网络内的客户端同步时间
allow 192.168.1.0/24
# 设置本地时钟为备用时间源
local stratum 10
allow 语句用于指定允许同步时间的客户端IP范围 。
(三)启动与验证Chrony服务
配置完成后,启动Chrony服务并设置开机自启:
sudo systemctl start chronyd
sudo systemctl enable chronyd
使用 chronyc sources -v 命令验证时间同步情况:
chronyc sources -v
输出结果中, * 表示当前同步的时间源 , ^ 表示候选时间源 , - 表示未同步的时间源 。各列信息含义与 ntpq -p 类似,包括时间源地址、层级、延迟、偏移量等。如果发现时间源状态异常,可以使用 chronyc tracking 命令查看Chrony的跟踪状态,进一步排查问题。
四、时间同步疑难解答
(一)网络连接问题
确保服务器能连接到互联网或内部NTP服务器,若无法连接,检查网络配置、防火墙设置等。
若使用内部NTP服务器,保证服务器之间网络畅通。
可以使用 ping 命令测试与NTP服务器的连通性,例如 ping ntp.aliyun.com 。
(二)防火墙设置
NTP服务默认使用UDP端口123,若服务器有防火墙,需开放该端口。例如,在CentOS系统中使用FirewallD开放端口:
sudo firewall-cmd --add-port=123/udp --permanent
sudo firewall-cmd --reload
# 如果使用的是ufw防火墙(常见于Ubuntu系统),开放端口命令如下
sudo ufw allow 123/udp
(三)时间同步不准确
若时间同步不准确,可尝试更换NTP服务器或调整配置参数。检查服务器硬件时钟是否正常,如CMOS电池电量是否充足 。
对于高精度时间同步需求,可考虑使用更高级的时间同步协议和技术,如PTP(Precision Time Protocol) 。还可以使用 chrony 的 makestep 命令强制进行时间调整,例如 chronyc makestep ,但此命令需谨慎使用,避免对系统造成不必要的影响。
通过以上步骤,你已掌握在Linux系统中搭建时间同步的方法,无论是使用传统的NTP还是新一代的Chrony,都能确保系统时间准确无误,为系统稳定运行提供坚实保障。
- 上一篇: NTP服务器地址总结
- 下一篇: centos8使用chrony作为NTP服务器
猜你喜欢
- 2025-03-13 Windows电脑使用cmd命令行同步北京时间
- 2025-03-13 云计算openstack共享组件——时间同步服务ntp(2)
- 2025-03-13 centos8使用chrony作为NTP服务器
- 2025-03-13 NTP服务器地址总结
- 05-11阿里开源MySQL中间件Canal快速入门
- 05-11MyBatis插件开发实战:手写一个分页插件
- 05-11Flask数据库——SQLAlchemy
- 05-11MySQL 到 Hazelcast Cloud 实时数据同步实操分享
- 05-11sqlmap 详解
- 05-11一篇文章让你学会Elasticsearch中的查询
- 05-11Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!
- 05-11Spring Boot 实现 MySQL 读写分离技术
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)