ntp时间同步

一、前言
1、NTP简介
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
NTP基于UDP报文进行传输,使用的UDP端口号为123。
2、为什么需要NTP服务器
出于诸多原因,精确的时间对于网络至关重要,比如:
网络管理:从不同网络设备采集来的日志信息进行分析时,需要以时间作为参照依据。如果不同设备上的系统时间不一致,会因先后顺序等问题给故障定位带来障碍。
计费系统:计费业务对于时间尤其敏感,要求所有设备的时间保持一致,否则会引起计费不准确,导致用户质疑、投诉等。
协同处理:多个系统协同处理同一个复杂事件,为保证正确的执行顺序,多个系统必须参考同一时钟。
系统时间:某些应用或服务需要准确的时间来标记用户登录、交易等操作信息,确保可追溯记录。
因此有一个统一的标准时间对于网络而言意义重大。
3、NTP时钟层级
NTP允许客户端从服务器请求和接收时间,而服务器又从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC。
NTP以层级来组织模型结构,层级中的每层被称为Stratum。通常将从权威时钟获得时钟同步的NTP服务器的层数设置为Stratum 1,并将其作为主时间服务器,为网络中其他的设备提供时钟同步。而Stratum 2则从Stratum 1获取时间,Stratum 3从Stratum 2获取时间,以此类推。时钟层数的取值范围为1~16,取值越小,时钟准确度越高。层数为1~15的时钟处于同步状态;层数为16的时钟被认为是未同步的,不能使用的。
4、NTP同步原理
NTP最典型的授时方式是Client/Server方式,如下图所示。
客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳t1;
NTP请求报文到达NTP服务器,此时NTP服务器的时刻为t2。当服务端接收到该报文时,NTP服务器处理之后,于t3时刻发出NTP应答报文。该应答报文中携带报文离开NTP客户端时的时间戳t1、到达NTP服务器时的时间戳t2、离开NTP服务器时的时间戳t3;
客户端在接收到响应报文时,记录报文返回的时间戳t4。
客户端用上述4个时间戳参数就能够计算出2个关键参数:
NTP报文从客户端到服务器的往返延迟delay。
客户端与服务端之间的时间差offset。
根据方程组:
可以解得时间差为:
NTP客户端根据计算得到的offset来调整自己的时钟,实现与NTP服务器的时钟同步。
二、准备工作
1、服务器规划
环境说明:Linux Server CentOS 7.6 NTP 4.2.6
ntp01
10.0.0.11
同步公网的时间
ntp02
10.0.0.12
同步ntp01的时间
ntp03
10.0.0.13
同步ntp02的时间
三、部署过程
1、ntp01上操作:(有公网可以直接yum安装ntp)yum install -y ntp 2、修改ntp配置文件
#在配置中增加以下配置:
/etc/ntp.conf
#允许上层时间服务器主动修改本机时间
restrict ntp.aliyun.com nomodify notrap noquery
#同步服务器
server ntp.aliyun.com
fudge ntp.aliyun.com stratum 10
3、与公共NTP服务器预先同步
为了保证本地NTP服务器能正常与公共NTP服务器进行同步,先跟公共NTP服务器同步一次。
再启动NTP服务
systemctl start ntp.service
查看ntp服务状态
remote:当前远程NTP服务器,+表示可用,-表示不可用,*表示推荐
refid:用于和本地时钟同步的远程服务器的 IP 地址
st:Stratum(阶层),表示经过n=2次NTP同步到当前服务器
t:类型,u表示单播(unicast)。其它值包括本地(local)、多播(multicast)、广播(broadcast)。
when:自从上次和服务器交互后经过的时间(以秒数计)。
poll:和服务器的轮询间隔,以秒数计。
reach:表示和服务器交互是否有任何错误的八进制数。值 337 表示 100% 成功(即十进制的255)。
delay:服务器和远程服务器来回的时间。
offset:我们服务器和远程服务器的时间差异,以毫秒数计。
jitter:两次取样之间平均时差,以毫秒数计。
2、ntp02上操作(没有公网,采用rpm包方式安装ntp服务)
autogen-libopts-5.18-5.el7.x86_64.rpm #不安装这个包会报错,服务起不来
ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
1、安装rpm包
rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
rpm -ivh ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
rpm -ivh ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
2、修改配置文件
vim /etc/ntp.conf
driftfile /var/lib/ntp/drift restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap restrict 127.0.0.1 restrict ::1 server 10.0.0.11 fudge 10.0.0.11 stratum 11 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys disable monitor
3、启动服务
systemctl start ntpd.service && systemctl enable ntpd.service
ntp03
安装ntpdate
同步ntp02时间
ntpdate 10.0.0.12
为什么要预同步?
预同步是指在与公共NTP服务器进行时间同步之前,先进行一次时间校准。这是为了确保本地时钟与公共NTP服务器的时钟之间的时间差距不会太大。
在开始与公共NTP服务器同步之前,本地时钟可能已经与公共NTP服务器相差几秒钟或更多。如果直接启动同步,那么调整过程将会非常漫长,因为系统需要逐渐调整时钟频率来弥补较大的时钟偏差。
通过进行一次预同步,可以将本地时钟与公共NTP服务器的时间差距减小到几毫秒甚至更少的范围内。这样,在启动实际同步之后,系统就只需要进行微调即可达到稳定的同步状态,从而提高同步的效率和精度。
因此,为了确保时间同步的准确性和效率,与公共NTP服务器进行时间同步之前要进行一次预同步。
使用restrict管理权限控制
restrict [address] mask [mask] [parameter]
其中parameter的参数主要有下面这些:
ignore: 拒绝所有类型的NTP联机;
nomodify: 客户端不能使用ntpc与ntpq这两个程序来修改服务器的时间参数,但客户端仍可透过这个主机来进行网络校时;
noquery: 客户端不能使用ntpq,ntpc等指令来查询时间服务器,等于不提供NTP的网络校时;
notrap: 不提供trap这个远程事件登录(remote event logging)的功能;
notrust: 拒绝没有认证的客户端;
如果你没有在 parameter 的地方加上任何参数的话,这表示该IP或网段不受任何限制。