Linux系统-部署-运维系列导航

安装

yum install -y ntp

 

NTP架构

  • NTP服务采用C/S架构,支持多层级服务
  • 如果允许所有服务器与互联网时钟同步,则可以将所有服务器作为Client端配置
  • 如果设计服务器在局域网中时钟同步,则需要将至少一台服务器作为时钟源,该服务器可以作为Client从互联网同步,同时作为Server由其他服务器来同步

 

系统时间与硬件时间

ntp服务默认只会同步系统时间,如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd 文件
在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步

 

NTP相关服务对比:ntpdate,ntpd

ntpdate同步是直接设置系统时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响,如sleep,timer等。
ntpd服务可以在修正时间的同时,修正cpu tick。
 
ntpd服务运行后,先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间,随着误差减小,逐步增加同步的间隔。
每次跳动,都会重复这个调整的过程。
 
要注意的是,ntpd有一个自我保护设置:如果本机与上源时间相差太大,ntpd 不运行。
所以新设置的时间服务器最好先 ntpdate 从上源取得时间初值,然后启动 ntpd服务。
理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。
crontab -e
# 开机同步一次时间,然后启动ntpd自动同步时钟服务,避免长时间关机后ntpd服务不运行
@reboot /sbin/ntpdate ntp.ntsc.ac.cn >/dev/null 2>&1 ; /sbin/service ntpd start >/dev/null 2>&1
 
特别关注:ntpdate命令与ntpd服务无法同时使用,因为都需要使用 123/udp 端口
 

Server端示例

配置文件 /etc/ntp.conf
###ntp server###

#每一个系统时钟的频率都有小小的误差,所以机器运行一段时间后会不精确,ntpd会自动来监测时钟的误差值并予以调整
#该配置要求ntpd把记录下来的误差先写入driftfile.这样即使重新开机,之前的计算结果也就不会丢失了
driftfile /var/lib/ntp/drift

#权限配置
#语法为:restrict IP mask netmask_IP parameter 
#其中 IP 可以是IP地址,也可以是 default,类似 0.0.0.0 
#paramter支持如下: 
# 1.ignore: 关闭所有的 NTP 联机服务 
# 2.nomodify:表示 Client 端不能更改 Server 端的时间参数,不过Client 端仍然可以透过 Server 端来进行网络校时.
# 3.notrust: 该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域 
# 4.noquery: 不提供 Client 端的时间查询(备注:实测noquery参数可能由于ntp框架bug,在noquery关键字后必须紧跟一个特殊空字符,非空格非tab,暂未确定,建议不配置此参数)
# 5.notrap: 不提供 trap 这个远程事件登入
#如果没有用任何参数,那么表示不做任何限制

#默认关闭所有NTP请求
restrict default nomodify notrap

#按需开放NTP请求
restrict 127.0.0.1 nomodify notrap
restrict 192.168.11.0 mask 255.255.255.0 nomodify notrap

#上层主机即NTP服务器的配置 
#语法为:server [IP|HOST Name] [prefer]
#Server 后面接的就是上层NTP服务器IP或域名
#prefer 表示作为主NTP服务器,其他为备选服务器
#国家授时中心
server ntp.ntsc.ac.cn prefer
#阿里云
server ntp.aliyun.com
#腾讯云
server time1.cloud.tencent.com

#外部时间服务器不可用时,以本地时间作为时间服务
#本地时间服务器127.127.1.0,不是127.0.0.1
server 127.127.1.0

#fudge设置NTP服务器的层级,一般配置本地时间服务器时使用
#语法:fudge ip [stratum int]
#注意:fudge必须和server一块用,且必须在server下一行
#stratum:0~15,
#0: 顶级
#10: 通常用于给局域网主机提供时间服务
fudge 127.127.1.0 stratum 10

#以下为安全配置,默认开启,如无特殊需求,不做更改
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

 

Client端示例

配置文件 /etc/ntp.conf
###ntp client###

#每一个系统时钟的频率都有小小的误差,所以机器运行一段时间后会不精确,NTP会自动来监测时钟的误差值并予以调整
#该配置要求ntpd把记录下来的误差先写入driftfile.这样即使重新开机,之前的计算结果也就不会丢失了
driftfile /var/lib/ntp/drift

#权限配置
#语法为:restrict IP mask netmask_IP parameter 
#其中 IP 可以是IP地址,也可以是 default,类似 0.0.0.0 
#paramter支持如下: 
# 1.ignore: 关闭所有的 NTP 联机服务 
# 2.nomodify:表示 Client 端不能更改 Server 端的时间参数,不过Client 端仍然可以透过 Server 端来进行网络校时.
# 3.notrust: 该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域 
# 4.noquery: 不提供 Client 端的时间查询(备注:实测noquery参数可能由于ntp框架bug,在noquery关键字后必须紧跟一个特殊空字符,非空格非tab,暂未确定,建议不配置此参数)
# 5.notrap: 不提供 trap 这个远程事件登入
#如果没有用任何参数,那么表示不做任何限制

#默认关闭所有NTP请求
restrict default nomodify notrap

#上层主机即NTP服务器的配置 
#语法为:server [IP|HOST Name] [prefer]
#Server 后面接的就是上层NTP服务器IP或域名
#prefer 表示作为主NTP服务器,其他为备选服务器
#局域网NTP服务器
server 192.168.11.27 prefer
server 192.168.11.28

 

常见问题

  • Server dropped: no data
  • no server suitable for synchronization found
  • Server dropped: strata too high
  • stratum 16
以上问题,主要在客户端执行ntpdate命令时遇到,但根本原因,可能出现在服务端,也可能出现在客户端,可以根据以下思路排查
  • 自建服务端刚启动,需要经过一段时间才能为客户端提供服务,一般3-5分钟,稍等几分钟再试
  • 自建服务器使用ntp4.2(包括4.2)之后的版本(ntpq -c version 或 ntpd -! 查询版本),在restrict的定义中使用了notrust,需要去掉notrust
  • 自建服务端防火墙未开放ntp服务端口,请检查防火墙并添加 123/udp 端口
  • 服务端为可信任的互联网服务器,如国家授时中心,阿里云,腾讯云,各大高校,等,则排查客户端环境,如是否有互联网访问权限,是否有出口防火墙规则,等

 

其他时间相关命令

date

查看与设置系统时间

#查看date帮助信息
[root@localhost ~]# date --help

#查看系统时间
[root@localhost ~]# date
2023年 06月 30日 星期五 14:00:07 CST

#设置系统时间
[root@localhost ~]# date -s "20230629 14:00:00"
2023年 06月 29日 星期四 14:00:00 CST
[root@localhost ~]# date
2023年 06月 29日 星期四 14:00:01 CST

hwclock

查看与设置硬件时间,系统时间与硬件时间同步

#查看hwclock帮助信息
[root@localhost ~]# hwclock --help  #或 hwclock -h

#查看硬件时间
[root@localhost ~]# hwclock --show
2023年06月30日 星期五 14时03分54秒  -0.146147 秒

#设置硬件时间   
[root@localhost ~]# hwclock --set --date "20230629 14:00:00"
[root@localhost ~]# hwclock --show
2023年06月29日 星期四 14时00分02秒  -0.239951 秒

#设置系统时间同步到硬件时间,即以系统时间为准
[root@localhost ~]# hwclock --systohc  #或 hwclock -w
[root@localhost ~]# hwclock --show
2023年06月30日 星期五 14时04分43秒  -0.739986 秒

#设置硬件时间同步到系统时间,即以硬件时间为准
[root@localhost ~]# hwclock --hctosys  #或 hwclock -s

 

附录:参考教程

 

posted on 2023-09-01 13:34  xiaoyaozhe  阅读(881)  评论(0编辑  收藏  举报