linux时间同步ntpd、ntpdate介绍
一、NTP简介
1.NTP简介
NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。(1s=1000ms) NTP服务器就是利用NTP协议提供时间同步服务的。
2.NTP原理
NTP客户端可以定时自动向NTP服务器发送请求来获取时间,NTP服务器将时间发送给客户端,。
NTP服务器的时间来源有两个
1.网络时间
2.NTP服务器自己的时间
3.NTP架构
C/S
二、不同机器之间的时间同步
为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
不同机器间同步时间,可以使用ntpdate命令(立即同步),也可以使用ntpd服务(缓慢同步)。
1、ntpdate命令
如果系统里没有这个命令,表示没有安装相应的程序:通过下面命令安装:
-------------------------------------------
[root@CentOS7 ~]# yum install ntpdate ##CentOS6 或7 系统
-------------------------------------------
使用ntpdate比较简单。格式如下:
---------------------------------------------
1 root@debian:~# ntpdate [NTP IP/hostname]
2 root@debian:~# ntpdate 192.168.0.1
3 root@debian:~# ntpdate time.ntp.org
---------------------------------------------
注意:如果此时ntpd服务已经启动,端口会被ntpd服务端占用,此时ntpdate命令就不能手动同步时间了
但这样的同步,只是强制性的将系统时间与ntp服务器时间同步,机器的硬件时间不会同步,如果希望硬件时间和同步完的系统时间一直,可以通过hwclock -w将硬件时间与系统时间同步,
但是,如果CPU Tick有问题,只是治标不治本。所以,一般配合linux定时任务 Cron,来进行定期同步设置。比如,在crontab中添加:
---------------------------------------------
0 12 * * * /usr/sbin/ntpdate 192.168.0.1
这样,会在每天的12点整,同步一次时间。ntp服务器为192.168.0.1。
---------------------------------------------
或者将下列脚本添加到/etc/cron.hourly/,这样就每小时会执行一次同步:
---------------------------------------------
#!/bin/bash
#
# $Id: sync-clock,v 1.6 2009/12/23 15:41:29 jmates Exp $
#
# Use ntpdate to get rough clock sync with department of Genome Sciences
# time server.
NTPDATE=/usr/sbin/ntpdate
SERVER="192.168.0.1 "
# if running from cron (no tty available), sleep a bit to space
# out update requests to avoid slamming a server at a particular time
if ! test -t 0; then
MYRAND=$RANDOM
MYRAND=${MYRAND:=$$}
if [ $MYRAND -gt 9 ]; then
sleep `echo $MYRAND | sed 's/.*\(..\)$/\1/' | sed 's/^0//'`
fi
fi
$NTPDATE -su $SERVER
# update hardware clock on Linux (RedHat?) systems
if [ -f /sbin/hwclock ]; then
/sbin/hwclock --systohc
---------------------------------------------
三、部署NTP服务端
使用ntpd服务,要好于ntpdate加cron的组合。因为,ntpdate同步时间会造成时间的突变和跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且ntpd服务可以在修正时间的同时,修正CPU Tick。因此理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。
要注意的是,ntpd 有一个自我保护的机制:如果本机与上源时间相差太大,ntpd 不会运行时间同步操作,所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务运行后,先是每64秒与上源NTP服务器同步一次,根据每次同步时测得的误差值经复杂计算逐步调整自己的时间,随着误差减小,逐步增加同步的间隔。每次跳动,都会重复这个调整的过程。
1、安装ntpd服务对应的软件包
-----------------------------------
[root@CentOS7 ~]# yum install ntp ##CentOS6 或7 系统
-----------------------------------
2、ntpd服务的设置
NTP Server的主要配置文件为/etc/ntp.conf:这个是NTP daemon的主要设文件。在 NTP Server 的设定上,建议不要对Internet 无限制的开放,尽量仅提供局域网内部的 Client 端联机进行网络校时。此外,NTP Server 也是需要网络上面较为准确的主机来自行更新自己的时间,它自己的时间都不准确怎么为客户端提供准确的时间,所以在我们的 NTP Server 上面也要找一个最靠近自己的时间源服务器来进行自我校正。比如去中国国家授时中心提供的时间源服务器来校正自己的时间。
/etc/ntp.conf内各个选项信息如下:
(1)系统时间与BIOS事件的偏差记录
driftfile /etc/ntp/drift
(2)restrict 控制相关权限。
语法为: restrict [IP地址] mask [子网掩码] <参数>
其中IP地址也可以是default ,default 就是指所有的IP
参数有以下几个:
---------------------------------------------
ignore : 关闭所有的 NTP 联机服务
nomodify: 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust : 客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery : 不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap : 不提供trap这个远程事件登入
nopeer : 用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
kod : 访问违规时发送 KoD 包。
restrict -6 表示IPV6地址的权限设置。
---------------------------------------------
如果参数完全没有设定,那就表示该 IP (或网域)"没有任何限制"
restrict default nomodify notrap noquery ##这个表示关闭所有的 NTP 要求封包
restrict 127.0.0.1 ##这个表示允许本机查询
restrict 192.168.0.1 mask 255.255.255.0 nomodify ##这个表示在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了
(3)上层主机的设定
要设定上层主机主要以 server 这个参数来设定
语法为:server [IP|HOST Name] [参数]
Server 后面接的就是上层 Time Server
参数解释如下所示:
◆ key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
◆ version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。
◆ prefer: 如果有多个server选项,具有该参数的服务器优先使用。
◆ mode: 指定数据报文mode字段的值。
◆ minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
◆ maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
◆ iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。
------------------------------------------------
server 192.168.0.1 prefer
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
------------------------------------------------
(4)确保localhost(这个常用的IP地址用来指Linux服务器本身)有足够权限.使用没有任何限制关键词的语法:
------------------------------------------------
restrict 127.0.0.1
restrict -6 ::1
------------------------------------------------
3、配置/etc/ntp/stpe-tickers文件
修改/etc/ntp/stpe-tickers文件,内容如下(当ntpd服务启动时,会自动与该文件中记录的上层NTP服务进行时间校对)
------------------------------------------------
[root@CentOS7 ~]# cat /etc/ntp/step-tickers
# List of NTP servers used by the ntpdate service.
0.centos.pool.ntp.org
[root@CentOS7 ~]#
------------------------------------------------
关于ntp.conf and step-tickers区别:
step-tickers is used by ntpdate where as ntp.conf is the configuration file for the ntpd daemon. ntpdate is initially run to set the clock before ntpd to make sure time is within 1000 sec. ntp will not run if the time difference between the server and client by more then 1000 sec ( or there about). The start up script will read step-tickers for servers to be polled by ntpdate.
4、配置/etc/sysconfig/ntpd文件
ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。
#允许BIOS与系统时间同步,也可以通过hwclock -w 命令
SYNC_HWCLOCK=yes
5、防火墙配置
由于NTP服务需要使用到UDP端口号123,所以当系统的防火墙启动的情况下,必须开放UDP端口号123。或直接关闭防火墙
6、启动NTP服务
CentOS6下
-------------------------------------------
service ntpd status #查看ntpd服务状态
service ntpd start #启动ntpd服务
service ntpd stop #停止ntpd服务
service ntpd restart #重启ntpd服务
检查ntp服务是否开机启动,将其设置为开机启动。
chkconfig ntpd on ##在运行级别2、3、4、5上设置为自动运行
chkconfig --list ntpd ##检查ntp服务是否开机启动
-------------------------------------------
CentOS7下
-------------------------------------------
systemctl status ntpd.service #查看ntpd服务状态
systemctl start ntpd.service #启动ntpd服务
systemctl stop ntpd.service #停止ntpd服务
systemctl restart ntpd.service #重启ntpd服务
检查ntp服务是否开机启动,将其设置为开机启动。
systemctl enable ntpd.service #置为开机启动
-------------------------------------------
四、NTP服务端配置举例
1、安装ntp
2、设置ntpd服务开机启动
3、防火墙开放UDP端口号123
4、先手工同步下时间,如果不能连接外网,手动更改系统时间和硬件时间为北京时间
ntpdate ntp.ntsc.ac.cn
5、配置ntpd主配置文件ntp.conf
vim /etc/ntp.conf 增加如下内容
------------------------------------------------------------
# 允许内网其他机器同步时间
restrict 192.168.239.0 mask 255.255.255.0 nomodify notrap
# 配置外部时间服务器,将配置文件中默认的全部注释掉
server ntp.ntsc.ac.cn prefer ##中国国家授时中心
server ntp1.aliyun.com ##中国授时,当上面服务器同步不了,则寻找第二个
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0 ## local clock 如果上面的服务器都无法同步时间,就和本地系统时间同步。127.127.1.0在这里是一个IP地址,不是网段。
fudge 127.127.1.0 stratum 10 ##127.127.1.0 为第10层。ntp 和127.127.1.0同步完后,就变成了11层。 ntp是层次阶级的。同步上层服务器的stratum 大小不能超过或等于16。
------------------------------------------------------------
6、开启ntp服务
7、查看时间同步状态 ntpstat (表示本地时间服务器已经和外网的NTP服务同步上了)
------------------------------------------------------------
[root@CentOS7 ~]# ntpstat
synchronised to NTP server (114.118.7.163) at stratum 3
time correct to within 68 ms
polling server every 64 s
[root@CentOS7 ~]#
------------------------------------------------------------
该指令可列出NTP服务器是否与上层联机。由上述输出结果可知,时间校正约
为68*10(-6)秒,且每隔64秒会主动更新时间
注:常见的错误:
------------------------------------------------------------
unsynchronized time server re-starting polling server every 64 s
// 或者
25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found
------------------------------------------------------------
其实,这不是一个错误。而是由于每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了。
8、查看ntp服务器与上层ntp的状态
------------------------------------------------------------
指令"ntpq -p"可以列出目前我们的NTP与相关的上层NTP的状态,以上的几个字段的意义如下:
remote :即NTP主机的IP或主机名称。注意最左边的符号,如果由"+"则代表目前正在作用钟的上层NTP,如果是"*"则表示也有连上线,不过是作为次要联机的NTP主机。
refid :参考的上一层NTP主机的地址
st :即stratum阶层
when :几秒前曾做过时间同步更新的操作
poll :下次更新在几秒之后
reach :已经向上层NTP服务器要求更新的次数
delay :网络传输过程钟延迟的时间
offset :时间补偿的结果
jitter :Linux系统时间与BIOS硬件时间的差异时间
查看ntpd进程的状态
【命令】watch "ntpq -p"
【终止】按 Ctrl+C 停止查看进程。
第一列中的字符指示源的质量。星号 ( * ) 表示该源是当前引用。
remote:列出源的 IP 地址或主机名。
when:指出从轮询源开始已过去的时间(秒)。
poll:指出轮询间隔时间。该值会根据本地时钟的精度相应增加。
reach:是一个八进制数字,指出源的可存取性。值 377 表示源已应答了前八个连续轮询。
offset:是源时钟与本地时钟的时间差(毫秒)。
四、NTP客户端配置举例
和NTP服务端配置举例配置一样,只是当作客户端来进行时间同步则配置文件不需要配置那么复杂,只需要配置下面的内容就行
------------------------------------------------------------
# 配置时间服务器,将配置文件中默认的全部注释掉
server 192.168.0.1 prefer ##局域网内的NTP服务器
------------------------------------------------------------
参考:
https://www.cnblogs.com/kerrycode/p/4744804.html
https://www.cnblogs.com/williamjie/p/10768657.html
https://blog.csdn.net/vic_qxz/article/details/80343351