云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

告别时间混乱!Linux时间同步服务搭建及常见问题解决方案

jxf315 2025-03-13 16:44:11 教程文章 23 ℃

在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,都能确保系统时间准确无误,为系统稳定运行提供坚实保障。

最近发表
标签列表