参考

实现【Linux--NTP 时间同步服务搭建】_linux ntp-CSDN博客


前言

当应用系统走向多节点、高并发、高可用部署需求时不同节点时间不一致不仅仅会导致业务报错,还会出现将硬件时间直接频繁同步导致硬件故障。

为解决以上问题-----引入NTP 校时服务


1 NTP 服务校时与 ntpdate 校时的区别

ntp 服务校时不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,并非 ntpdate 立即同步,在生产环境中慎用 ntpdate,ntp 与 ntpdate不可同时运行

简单来讲 NTP 服务本身是为了搭建校时服务器对外提供授时服务的。但是这个服务本
身有个功能,就是可以从这个服务工作的机器,配置一个外网的时间服务器,将本机的时间
校时成网络时间。自己时间不对,咋给别人校时?

2 NTP 校时服务搭建

主节点:本身可以上网,配置校时服务的时候配置上游国家授时中心服务地址,并对内网提供授时服务——这里环境均采用内网,手动设置主节点为标准时间,分节点同步。

分节点:本身属于内网运行,上游地址是主节点。

1.2.1 确认 ntp 的安装

###1、这里已安装了ntp和ntpdate,为了方便演示,先移除
[root@localhost ~]# rpm -qa | grep ntp
ntp-4.2.6p5-29.el7.centos.2.x86_64
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
fontpackages-filesystem-1.44-8.el7.noarch


###2、先卸载移除ntp 与 ntpdate
yum -y remove ntp-4.2.6p5-29.el7.centos.2.x86_64
yum -y remove ntpdate-4.2.6p5-29.el7.centos.2.x86_64

###3、重新检查
[root@localhost ~]# rpm -qa | grep ntp
fontpackages-filesystem-1.44-8.el7.noarch

###4、重新安装 ntp
yum -y install ntpdate
yum -y install ntp

###5、安装检查
[root@localhost ~]# rpm -qa | grep ntp
ntp-4.2.6p5-29.el7.centos.2.x86_64
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
fontpackages-filesystem-1.44-8.el7.noarch

###6、查看ntp服务状态
[root@localhost ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

###7、启动NTP服务并设置开机启动
[root@localhost ~]# systemctl start ntpd
[root@localhost ~]# systemctl enable ntpd

###8、再次查看ntp服务状态
[root@localhost ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2025-08-15 09:57:00 CST; 12s ago
 Main PID: 2881 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─2881 /usr/sbin/ntpd -u ntp:ntp -g

1.2.2 配置 ntp 服务

1、选择主节点node01,修改其/etc/ntp.conf

### 在 server 部分添加如下内容,并注释掉 server 0 ~ n
server 210.72.145.44 prefer
server 127.127.1.0 iburst

server 210.72.145.44 prefer 这是国家新的授时服务器地址,prefer 是优先使用的意思,还有更多,可以直接百度,国内的NTP Server基本都属于科研教育机构所有,普通社会组织发布的NTP Server并不多。

server 127.127.1.0 iburst 指定本地NTP服务地址,这个 ip 不要改,意思是如果网络授时服务器源访问不到了则直接使用本机作为授时服务器源。

2、主节点以外的节点node02,继续修改/etc/ntp.conf。

server 主节点 ip 地址
如:
server 192.168.10.101

3、操作系统防火墙开放 123 端口

由于 NTP 服务需要使用到 UDP 端口号 123,所以当系统的防火墙(Iptables)启动的情况下,必须开放 UDP 端口号 123

###开放 `UDP` 端口号 `123`
firewall-cmd --zone=public --add-port=123/udp --permanent

###查看所有已经开放的端口
#临时端口(默认为空)
firewall-cmd --list-ports

#永久开放端口(默认为空)
firewall-cmd --list-ports --permanent
123/udp

1.2.3 启动 ntp 服务、查看状态

### ntp 服务管理命令
#查看 ntpd 服务状态
systemctl status ntpd
#启动 ntpd 服务
systemctl start ntpd
#停止 ntpd 服务
systemctl stop ntpd
#重启 ntpd 服务
systemctl restart ntpd

1.2.4 ntp 服务设置开机自启动

检查 ntp 服务是否开机启动,将其设置为开机启动。

### 将服务设置为自启动
systemctl enable ntpd
### 将服务自启动关闭
systemctl disenable ntpd

1.2.5 查看 ntp 服务器与上层 ntp 连通性

ntpstat

主节点(192.168.10.100)

分节点(192.168.10.101)

ntpstat 命令查看时间同步状态,这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。

等一段时间之后,再次使用 ntpstat 命令查看状态,就会变成如下正常结果:

1.2.6 查看 ntp 服务器与上层 ntp 的状态

ntpq -p
remoteNTP 服务器地址或本地时钟源
refid服务器同步的上级时间源(IP 或特殊标识)
st层级(stratum),1 为最高(如原子钟),数值越大可信度越低
t通信类型(u=单播,l=本地时钟,b=广播)
when上次同步成功后的秒数(-表示从未成功)
poll同步间隔(秒)
reach8 进制数,表示最近 8 次同步的成功情况(377=二进制11111111,全成功)
delay网络延迟(毫秒)
offset时间偏差(毫秒),正数表示本地时间慢,负数表示快
jitter时间波动(毫秒),值越小越稳定

主节点

[root@localhost etc]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 210.72.145.44   .INIT.          16 u    - 1024    0    0.000    0.000   0.000
*LOCAL(0)        .LOCL.           5 l    2   64  377    0.000    0.000   0.000

📖 说明:

remote‌

  • 210.72.145.44:中国国家授时中心的NTP服务器地址,但状态显示未同步(.INIT.)。
  • *LOCAL(0):本地时钟源,*表示当前正在使用此源同步。

refid‌

  • INIT:表示远程服务器尚未完成初始化或无法提供有效时间源。
  • LOCL:表示时间源为本地时钟(非网络来源)。

st(stratum)‌

  • 16:层级为16表示服务器不可用(最高为15,16表示无效)。
  •  5:本地时钟层级为5,属于中间层级(1为最高,通常为原子钟或GPS)。

t(type)‌

  • u:单播模式(Unicast),但未成功建立连接。
  • l:本地时钟模式(Local Clock)。

when/poll/reach‌

  • - 1024 0:when=-表示从未成功同步;poll=1024表示同步间隔为1024秒;reach=0(八进制)表示最近8次请求均失败。
  • 2 64 377:when=2秒前同步过;poll=64秒为当前同步间隔;reach=377(二进制11111111)表示最近8次请求全部成功。

delay/offset/jitter‌

  • 远程服务器所有值为0.000,表明无有效通信。
  • 本地时钟的offset=0.000表示时间完全同步,jitter=0.000表示时钟稳定性极佳。

分节点

[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 192.168.10.100  LOCAL(0)         6 u 1254   64    0    0.882   -2.178   0.000

3 分节点时间同步

分节点不能上网,属于内网服务器从主节点获取时间,本身支持对内网提供授时服务

4 问题收集

4.1 解决设置 ntp 开机自启动失败

重启后用 systemctl status ntpd 命令查看服务是否启动,从给出的信息可知 ntp 已被设置为开机启动,但是开机启动并未成功。

[root@localhost ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[root@localhost ~]#

通过命令 chkconfig ntpd on 设置开机自启动,发现会将此命令转发到 systemctl enable ntpd.service 命令,也就是说最好使用后面的命令设置开机自启动。

[root@localhost ~]# chkconfig ntpd on
注意:正在将请求转发到“systemctl enable ntpd.service”。
[root@localhost ~]# 

原因是系统上安装了一个与 NTP 相冲突的工具:chrony

使用 systemctl is-enabled chronyd 来查看, chrony 被设置为enabled

[root@localhost ~]# systemctl is-enabled chronyd
enabled
[root@localhost ~]#

将 chronyd 设置为 disable 后,再重启即可实现NTP自启动。

[root@localhost ~]# systemctl disable chronyd
Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@localhost ~]#

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐