centos7下配置ntp客户端同步时间服务

馋奶兔 提交于 2021-02-02 14:49:27

需求:在CentOS7下配置NTP客户端同步时间服务
简介:
NTP服务是为了时钟同步使用,特别在一些实时性数据库场景中非常重要。
Centos7下默认使用chronyd服务代替过渡ntpd服务,因此经常遇到大部分人还是记住ntpd服务而不去配置chronyd服务,因此经常在centos7下遇到无法使用ntp服务或ntp服务存在一些问题。以下就centos7下配置和使用ntp服务、ntp验证、时区等配置进行讲解。


本篇所有操作和讲解只针对NTP客户端,不涉及ntp-server操作

CentOS7下安装和配置NTP(Centos6、redhat系列亦可以参考,不冲突)

    CentOS6和6之前的版本默认使用ndpd服务做客户端去向ntp-server同步时间。

1、安装ntp和ntpdate两个rpm包。
使用yum install ntp、yum install ntpdate命令执行安装操作(本次省略)
2、配置ntp客户端文件【/etc/ntp.conf】中的server项, 只保留server的有效行(默认有3-4行server有效行去向公网同步时间,需注释掉)。如

server 172.29.12.120  perfer      #提供ntp-server的主机地址
server  172.29.120.12 perfer      #提供ntp-server的主机地址

3、启动ntpd服务、并添加至开机启动项。如

systemctl  start  ntpd        #启动ntpd服务
systemctl  start  ntpdate
systemctl enable  ntpd        #将ntpd添加到开机启动项
systemctl enable  ntpdate
systemctl is-enabled ntpd        #查看是否在开机启动项
systemctl is-enabled ntpdate
systemctl list-unit-files | grep ntp     #查看是否在开机启动项
systemctl status ntpd                     #查看ntpd服务的状态

4、验证

 ntpq -p       #查看该主机使用的ntp-server情况和同步延时等信息;
 timedatectl      #查看ntpd服务或chronyd服务是否生效。只有centos7、redhat7、ubuntu14等以上(含)才有该命令;

5、其他配置(或添加时间同步的计划任务)
使用ntpdate命令也可以执行ntp时间同步,不需要ntp客户的ntpd服务。如

ntpdate 172.29.120.12     #向172.29.120.12的ntpserver主机同步本地系统时间。
ntpdate -u  172.29.120.12  ##同上,-u参数是可以在客户端ntpd服务启动时同时执行的命令。

计划任务中的时间同步,同样的效果。也可以和客户端的ntpd服务同时存在。

crontab -l
0 0 * * 0 /usr/sbin/ntpdate -u 172.29.120.12 || /usr/sbin/ntpdate -u 172.29.12.120

例子:
centos7下配置ntp客户端同步时间服务

CentOS7下使用NTP遇到的问题

问题1、在CentOS7下使用NTP时,客户端ntpd服务添加到开机启动项中了,但主机系统启动后ntpd服务还是停止状态(dead),无法正常启动。

解决以上现象有两种方法 ,本人常用方法一的操作:
方法一
1.通过命令 systemctl enable ntpd 设置NTP服务开机自启动。
2.重启虚拟机后查看 服务运行状态 systemctl status ntpd ,发现服务并没有成功启动。
3.查看chrony是否被设置为开机自启动。通过指令 systemctl is-enabled chronyd
或systemctl list-unit-files | grep chrony 查看,发现这个服务已经被设置为开机自启动所以导致NTP服务的自启动失败。

4.所以要把 chrony 的自启动去掉。执行指令 systemctl disable chronyd 。
5.重启虚拟机, 执行 systemctl status ntpd ,问题解决。
systemctl list-unit-files|grep ntpd
systemctl list-unit-files|grep chrony
centos7下配置ntp客户端同步时间服务
方法二
需要开机自启动某服务,第一个想到的当然是开机启动自定义脚本
在Centos之前版本只要在 /etc/rc.d/rc.local 文件中加入 启动服务的命令,当虚拟机重启时就会执行该文件中的命令,服务也就启动了。但是但Centos7版本,这个文件的权限被降低了,所以当你打开这个文件时,注释中很友好的提示让你给这个文件赋权,以确保它有可执行权限。chmod +x /etc/rc.d/rc.local 。
所以只要把指令写到这个文件中,就可以在开机时启动服务或者让虚拟机做其它事情。
chmod +x /etc/rc.d/rc.local
echo "systemctl start ntpd" >> !$
centos7下配置ntp客户端同步时间服务















问题2、ntpdate命令执行报错,提示ntpd服务已经存在(ntpdate:the NTP socket is in use, exiting)

报错的原因是因为客户端有ntpd服务在运行。因此需要继续执行,必须加-u参数,如
update -u 172.29.120.12
centos7下配置ntp客户端同步时间服务

问题3、启动了ntpd服务,却未执行过同步时间操作。

需要检查ntpd服务是否生效、并应用是否也生效了。如
centos7下配置ntp客户端同步时间服务
centos7下配置ntp客户端同步时间服务

附录

1、npq -p 执行结果的参数解释

centos7下配置ntp客户端同步时间服务
ntpq -p命令列出了所有作为时钟源校正过本地NTP服务器时钟上层NTP服务器的列表,每一列的含义分别如下:
remote:响应请求的NTP服务器的名称(IP地址或域名),带“”的表示本地NTP服务器与该服务器同步
refid:远程NTP服务器使用的上一级ntp服务器的IP地址
st:远程NTP服务器的级别,由于NTP是层级结构,有顶端的服务器,多层的Relay Server再到客户端。所以服务器从高到低,级别可以设定为1~16级。为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器。
t:本地NTP服务器与远程NTP服务器的通信方式。u:单播;b:广播;I:本地
when:上次成功请求后到现在的秒数
poll:本地NTP服务器与远程NTP服务器同步的时间间隔。
reach:这是一个八进制的值,用来测试衡量前八次查询是否成功和服务器连接。377表示都成功,0表示不成功
delay:网络延时,单位为微秒(μs)
offset:本地NTP服务器与远程NTP服务器的时间偏移,单位为毫秒(ms)。offset越接近于0,主机与NTP服务器的时间越接近
jitter:查询偏差的分布值,用于表示远程NTP的网络延时是否稳定,单位为微秒(μs)*










2、timedatectl 命令的讲解

timedatectl输出解析
centos7下配置ntp客户端同步时间服务
1.1.Local time
本地时间,初始值来自于RTC,由内核维护,系统启动之后和RTC就没有关系,通常等于RTC+时区值(如上图的本地时间=RTC+8)


1.2.Universal time
系统时间永远是UTC,在应用程序使用的时候转换为本地时间

1.3.RTC(real-time clock)time
指硬件时间,一般是主板上的特殊电路,专用用于记录时间,有电池供电,不受服务器和操作系统的开启关闭影响。也称作BIOS时间。
需要注意的是:当/etc/sysconfig/clock 文件中 UTC=true时, BIOS 使用UTC时间; UTC=false时, BIOS 使用本地时间。
hwclock --localtime #显示 BIOS 中实际的时间
hwclock --systohc #根据系统时间设置硬件时间



1.4.Time zone
本地时区,即服务器所在的时区,在中国通常使用Asia/Shanghai
timedatectl set-timezone "Asia/Shanghai" #设置时区为上海

1.5.NTP enable
状态为“yes”,表示开启NTP同步。
网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正。
timedatectl set-ntp true #开启ntp同步
timedatectl set-ntp false #禁止ntp同步



1.6.NTP synchronized
为“yes”,表示NTP同步完成。

1.7.RTC in local TZ
设置RTC时间,为"no"表示未设置
timedatectl set-local-rtc 1 #将RTC设置为本地时间
timedatectl set-local-rtc 0 #将RTC设置为UTC


2.2、timedatectl常用命令
timedatectl set-time 15:58:30 #只设置时间
timedatectl set-time 20151120 #只设置日期
timedatectl set-time '16:10:40 2015-11-20' #设置时间和日期


以上是个人经验总结,望多多指教

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!