需求:在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 (iburst) #提供ntp-server的主机地址
#restrict default kod nomodify notrap nopeer noquery 注释此行内容 作为ntp服务器可注释掉(取消默认不行其他主机连接同步时间)
server x.x.x.x iburst 同步时间服务ip 客户端只是配这个就可以
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
例子:
查看服务状态 ntpstat ntptime timedatectl 三个命令看状态
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
方法二:
需要开机自启动某服务,第一个想到的当然是开机启动自定义脚本。
在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” >> !$
问题2、ntpdate命令执行报错,提示ntpd服务已经存在(ntpdate:the NTP socket is in use, exiting)
报错的原因是因为客户端有ntpd服务在运行。因此需要继续执行,必须加-u参数,如
update -u 172.29.120.12
问题3、启动了ntpd服务,却未执行过同步时间操作。
需要检查ntpd服务是否生效、并应用是否也生效了。如
查看状态 ntpstat ntptime timedatectl
附录
1、npq -p 执行结果的参数解释
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输出解析
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’ #设置时间和日期
2.3 相关命令
rpm -qi ntp 查看版本 最新
date 系统时间
clock 硬件时间
date -s 设置系统时间
clock -w 系统时间同步到硬件时间
ntpdate IP 同步ntp服务器时间
chkconfig --list ntpd 查看开机启动
chkconfig ntpd on 开机启动
ntpq -p 客户端查看同步情况 *号代表同步成功
ntpstat
ps aux | grep ntpd 查看进程
ss -ntul 看进程端口
netstat -anp | grep ntpd
ss -ntulp 看进程端口
crontab -l; echo "*/60 * * * * /usr/sbin/ntpdate x.x.x.x(ntp服务器IP) >>/tmp/ntp.log 设置定时同步
crontab -l 查看计划任务
echo "*/60 * * * * /usr/sbin/ntpdate x.x.x.x(ntp服务器IP) >>/tmp/ntp.log