Linux 安装 NTP 时间服务器

安装命令为: dnf install chrony

如果你使用的是老的版本 Linux 服务,并且还可以使用 NTP 安装命令的话,请参考:Linux 中老的 NTP 服务安装和配置 文章中的内容,但我们不推荐使用,因为这个 NTP 服务已经被逐步废弃掉了。

在任何新的服务器安装完成之后,建议都安装 NTP 时间服务器。通过安装这个时间服务器,你可以有效的调整服务器的时间,时区,并能够对服务器的时间进行自动更新。

更主要的是,如果你还在服务器上部署的应用的话,你还能够从源头避免应用和服务器的时间偏差,以及和数据库服务器的偏差。

计算机内部所记录的时钟是记载于 BIOS (CMOS) 内的,但如果你的计算机上面的电池没电了,或者是某些特殊因素导致 BIOS 数据被清除, 此时计算机的时间就会不准。同时,某些操作系统程序的问题,也可能导致我们看到的时间与现实社会不相同的情况。 所以我们都会调整一下时间,好让计算机系统的时间可以一直保持正确的状态。 在实际生活中,我们可以透过电视台、广播电台、电话等等来调整我们的手表,那么如果是在网络上呢? 该如何让我们的主机随时保持正确的时间信息?这就需要 NTP 这个服务器。

Linux 操作系统的计时方式主要是由 1970/01/01 开始计算总秒数,因此,如果你还记得 date 这个指令的话, 会发现它有个 +%s 的参数,可以取得总秒数,这个就是软件时钟。但,如同前面说的,计算机硬件主要是以 BIOS 内部的时间为主要的时间依据 (硬件时钟),而偏偏这个时间可能因为 BIOS 内部芯片本身的问题,而导致 BIOS 时间与标准时间 (UTC) 有一点点的差异存在!所以为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步 (synchronize) 的工作就显的很重要了!

配置时间

在 CentOS 中配置时间首先你需要修改时区。

显示时区

[root@ossez ~]# date +%z
-0400

这里显示的时间是美国东部时间,-0400 的时区

系统中的时间文件保存在:/usr/share/zoneinfo 路径下。

修改时区

假设你希望将服务器的时区修改为美国东部时间

可以运行下面的命令:

[gaarai @server ~]$ sudo mv /etc/localtime /etc/localtime.bak

[gaarai @server ~]$ sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

安装 NTP

安装 NTP 服务

在新版本的的 Linux 中,系统已经不再使用 ntp 服务名称来进行 安装了。

新的安装命令为:

dnf install chrony

:warning: 这个安装命令已经被废弃掉了 yum install ntp

具体有关 chrony 的安装,请参考: CentOS 8 启用 NTP 服务 页面中的内容

开启启用 NTP 服务

在 CentOS 8 中,执行下面的命令,来让服务进程随开机自动启动。

systemctl enable chronyd

上面的命令会随计算机开机的时候自动运行。

centos-chronyd-01

防火墙配置

chronyd 进程使用的端口有 2 个,分别为: udp 323 和 udp 123。

如果你的操作系统防火墙阻止了上面的 2 个端口访问的话,NTP 的时间同步是没有办法完成的。

将 NTP 的防火墙打开,NTP 服务使用的是 UDP 123 端口。

可以分别在服务器上运行下面 2 个命令:

# firewall-cmd --permanent --zone=public --add-port=123/upd
# firewall-cmd --reload

需要注意的是,不是所有的防火墙都默认的关闭了 NTP 端口。

如果你发现 NTP 出现问题的话,可以尝试打开。

2024-01-09_13-01-32

上图显示了防火墙更新后的情况。

查看当前服务运行状态

[root@vps-f2a02f66 ~]# systemctl status chronyd

服务器输出:

检查服务器 NTP 服务器地址

请执行下面的命令,确定 NTP 服务器的地址已经配置成功了。

chronyc sources 

上面命令会显示默认配置的 NTP 服务器地址。

强制同步

在安装操作系统后,可能会遇到时间不准确的情况。

可以使用下面的命令对服务器的世界进行强制同步一次。

chronyc -a makestep

服务器的输出的内容如下:

[root@vps-c853c8ac home]# chronyc -a makestep
200 OK
[root@vps-c853c8ac home]# 

centos-chronyd-03

然后可以在服务器上执行

date +%z

以确定当前的时区和你可用使用 date 确定当前服务器的时间。

date

centos-chronyd-04

通过这个设置,我们就可以在服务器上使用 NTP 进行同步了,你就不需要对服务器的时间进行调整了。