NTP时间服务


1.显示当前的日期和时间:

date

2.以指定格式显示日期和时间:

date +"%Y-%m-%d %H:%M:%S"

上述命令将以 2024-01-13 10:46:16 的格式显示当前日期和时间。

3.设置系统时间为指定时间:

date --set="2024-01-01 00:00:00"

4.将系统时间与网络时间同步:

ntpdate ntp.aliyun.com

构建和使用 NTP(Network Time Protocol)有助于确保计算机系统和设备的时间同步,并可确保网络中各个设备的时间保持一致。以下是构建和使用 NTP 的基本步骤:

需求场景:

局域网内,将一台Centos7服务器,作为时间服务器,配置为NTP服务端,其他机器为客户端通过本地网络与之同步时间。

一、安装前准备

1、关闭SELinux服务

# 关闭SELinux临时生效
[root@server01 ~]# setenforce 0
# 永久关闭SELinux(需重启生效)
[root@server01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2、配置防火墙

1)关闭防火墙并禁止开机启动:

# 停止Firewall服务
[root@server01 ~]# systemctl stop firewalld

# 禁止Firewall服务开机启动
[root@server01 ~]# systemctl disable firewalld

# 2)或者仅放行NTP服务端口:
# 添加NTP服务的UDP端口123到public区域,并设置为永久生效

[root@server01 ~]# firewall-cmd --add-port=123/udp --permanent

# 重新载入防火墙规则以使更改生效
[root@server01 ~]# firewall-cmd --reload

二、安装NTP服务

1、查询是否已安装

[root@server01 ~]# rpm -qa | grep ntp

图片

如果输出包含ntp和ntpdate,则说明已经安装NTP服务。如果只有一个包被安装,建议卸载后重新安装。使用命令rpm -e xxx卸载。

2、YUM安装

[root@server01 ~]# yum install ntp ntpdate -y

三、修改NTP配置文件

编辑/etc/ntp.conf文件。

[root@server01 ~]# vim /etc/ntp.conf

【服务端配置】

(一)时间服务器连接互联网

-----------------------------------------------------------
# 允许服务器使用本地系统上的时钟漂移文件
driftfile /var/lib/ntp/drift

# 设置默认的访问规则,允许同步但禁止修改、查询等操作
restrict default nomodify notrap nopeer noquery

# 允许本地网络的机器同步,但禁止修改、查询等操作
restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap

# 允许本地主机同步,但禁止修改、查询等操作
restrict 127.0.0.1
restrict ::1

# 使用 ntp.aliyun.com 作为 NTP 服务器
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com

# 指定需要包含的密码文件(如果有)
includefile /etc/ntp/crypto/pw

# 指定包含密钥的文件路径
keys /etc/ntp/keys

# 禁用监控功能
disable monitor

-----------------------------------------------------------
说明:
服务器地址默认为centos.pool.ntp.org,上述配置中为 ntp.aliyun.com 。

四、启动NTP服务并设置自动启动

[root@server01 ~]# systemctl start ntpd
[root@server01 ~]# systemctl enable ntpd
[root@server01 ~]# systemctl daemon-reload

五、检查NTP服务器是否正常工作

运行以下命令检查NTP服务器是否正常工作:

[root@server01 ~]# ntpq -p
[root@server01 ~]# ntpstat

如果返回结果中有时间服务器,表示NTP服务器已经正常工作。

六、同步硬件时钟与系统时间

NTP服务默认配置下主要负责同步Linux系统的内核时间。然而,为了确保在系统重启后硬件时钟(CMOS/RTC)也能保持准确的时间,可以设置让ntpd服务同时同步硬件时钟。

编辑/etc/sysconfig/ntpd文件,并确认添加以下内容:

SYNC_HWCLOCK=yes

这样一来,在ntpd服务运行过程中,每当系统时间被NTP同步更新时,硬件时钟也会随之更新,确保两者保持一致。

此外,若需要手动将当前已同步的系统时间写入到硬件时钟中,可使用如下命令:hwclock -w

七、测试时间同步

[root@client01 ~]# date --set="2024-01-01 00:00:00"
[root@client01 ~]# date
# 测试同步,不改时间
[root@client01 ~]# ntpdate -d  192.168.8.31
# 同步时间
[root@client01 ~]# ntpdate  192.168.8.31
[root@client01 ~]# hwclock -w
[root@client01 ~]# date

Chrony

1.Chrony 是什么?

Chrony 是一个开源的 网络时间协议(NTP)实现,用于同步计算机系统的时钟,确保设备之间的时间一致性。它由荷兰计算机科学家 Richard P. Curnow 开发,最初用于替代传统的 ntpd(NTP Daemon),具有轻量、高效、灵活的特点,适用于各种规模的系统,从嵌入式设备到数据中心服务器集群。

1.1与 NTP 实现的对比(以 ntpd 为例)

特性 Chrony ntpd
同步速度 更快(尤其首次同步,支持 iburst 较慢(依赖长期统计调整)
资源占用 低(适合嵌入式/低功耗设备) 较高(需维护大量历史数据)
实时内核支持 支持(如 Linux 实时内核) 有限支持
调整策略 渐进式+跳跃式(灵活) 仅渐进式(需较长时间修正大偏差)
配置复杂度 简单(配置文件语法更友好) 相对复杂(需理解更多参数)

1.2优势总结

  • 轻量高效:适合资源受限环境,性能优于传统 ntpd
  • 快速收敛:通过 iburst 和智能调整策略,缩短首次同步时间。
  • 灵活可靠:支持多时间源、动态网络适配,适应复杂网络环境。
  • 安全可控:内置认证和访问控制,满足企业级安全需求。

2.安装Chrony

使用yum安装Chrony。

yum install -y chrony

2.1配置Chrony

Chrony的主要配置文件是/etc/chrony.conf,你可以使用vim或者其他文本编辑器来编辑它。

2.1.1 设定NTP服务器

你可以选用国内的NTP服务器,例如阿里云、腾讯云的服务器,这样能提升时间同步的效率。 在配置文件里添加或者修改server字段。

server ntp.aliyun.com iburst
server ntp.tencent.com iburst

iburst选项的作用是,在首次同步或者连接丢失后重新同步时,快速发送多个NTP请求,从而加快同步的速度。

2.1.2 允许特定网段的客户端同步

若你想让局域网内的其他设备借助这台服务器进行时间同步,可在配置文件中添加allow字段。

allow 192.168.8.0/24

此配置允许192.168.8.0/24网段内的设备来同步时间。

2.1.3 其他配置参数

  • driftfile:用于记录系统时钟漂移数据,默认路径为/var/lib/chrony/drift
  • makestep:当系统时钟与NTP服务器的时间偏差超过一定值时,允许时钟进行跳跃式调整。例如:
makestep 1.0 3

这意味着当时间偏差大于1秒时,最多进行3次跳跃式调整。

2.3 启动并设置Chrony服务

完成配置后,你需要启动Chrony服务,并且设置为开机自启。

systemctl start chronyd
systemctl enable chronyd

2.4 检查服务状态

你可以使用以下命令来检查Chrony服务是否正常运行。

systemctl status chronyd

若服务正常运行,输出中会显示active (running)

2.5. 验证时间同步

使用chronyc命令来验证时间同步状态。

chronyc sources -v

该命令会显示Chrony当前使用的时间源及其状态。如果输出中某个服务器的状态为^*,则表示当前正在使用该服务器进行时间同步。

你还可以使用以下命令查看时间同步的详细信息:

chronyc tracking

2.6 防火墙设置

如果你开启了防火墙,需要开放NTP服务使用的UDP 123端口。

firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

3.Linux 客户端

3.1 安装 Chrony

在客户端上打开终端,执行以下命令来安装 Chrony:

yum install -y chrony

3.2 配置客户端指向 Chrony 服务器

运用文本编辑器(如 vim)打开客户端的 Chrony 配置文件 /etc/chrony.conf,将服务器地址添加进去。 假定 Chrony 服务器的 IP 地址是 192.168.8.100,配置如下:

server 192.168.8.100 iburst

iburst 选项的作用是在初始同步或重新同步时加速时间同步。

3. 启动并设置 Chrony 服务

完成配置后,启动 Chrony 服务并设置为开机自启:

systemctl start chronyd
systemctl enable chronyd

4. 验证时间同步

使用以下命令验证客户端是否成功同步时间:

chronyc sources -v

若输出结果中显示 ^* 指向你配置的服务器,就表明客户端正在从该服务器同步时间。