什么是ntp
网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正。NTP服务器从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC,客户端再从服务器请求和接收时间。
NTP基于UDP报文进行传输,使用的UDP端口号为123。
为什么需要ntp
因为精确的时间对于网络至关重要:
- 日志:我们可能需要对每一个系统的日志信息进行采集,需要以时间作为参考依据,如果不同系统上的时间都是不一致的话,对于定位问题会有很大的影响
- 协同:多个系统以不同的顺序来处理一个复杂的事件,如果各个系统的时间没有同步,而是各自有自己的校准机制的话,那么就会造成多个系统的先后顺序的不同,从而导致事件处理失败
更多详细的可以参考:ntp解释
其实总的来说,ntp就是一个时间同步的服务,通过为每一个系统设置相同的时钟源来达到时间的一致性
ntp安装
直接使用:yum -y install ntp
基本使用
分为ntpq和ntpdate这两种命令使用方式
-
ntpdate
类似于手动的强制同步的感觉,ntpdate nameserver 会强制将系统的时间变为nameserver(ntp时钟源)的时间,是一种非平滑的方式同步时间,一般是在系统开机,部署在上面的服务都还没有启动的时候使用。不推荐在服务启动的过程中进行,如果你的系统时间快于ntp时钟源,这个时候你使用这个命令,就会强制时间变成ntp时钟源的时间,对于同一个定时任务就会出现两次执行,这种情况基本是不允许的
比较常用的命令是:ntpdate nameserver(强制同步时间) ntpdate -d nameserver(作为检测连通性测试用) -
ntpq
相较于ntpdate更加的平滑,至少对于同一个时间点,它不会经历两次,使用一种平滑的方式来达到同步时间。我的理解是,它会以一种延长或缩短到达下一秒的时间这种机制来达到同步时间。
ntpq -p的输出值解释(还有一个ntp -pw能完整的显示remote的名字,因为remote可能显示的是域名,长度过长的话,输出会隐藏后面超出部分)
这个基本网上都有了,我只是做了些补充
- remote 响应这个请求的NTP服务器的名称,前面的*表示正常,正在使用;+表示正常,备用;没有则表示不响应,还有其他的,比如-
啥的,都是表示不可用了
- refid NTP服务器使用的更高一级服务器的名称
- st 正在响应请求的NTP服务器的级别
- when 上一次成功请求之后到现在的秒数
- poll 本地和远程服务器多少时间进行一次同步,单位秒,在一开始运行NTP的时候这个poll值会比较小,服务器同步的频率大,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小
- reach 用来测试能否和服务器连接,是一个八进制值,每成功连接一次它的值就会增加,一般正常的标志就是377
- delay 从本地机发送同步要求到ntp服务器的往返时间
- offset 主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒,offset越接近于0,主机和ntp服务器的时间越接近。简单理解:当前主机时间 + offset = ntp时钟源时间。还有需要注意的是,offset显示的长度是:符号数字,数字的长度最长为六位,所以你可能会看到+12345.这样的时间,所以,ntpd最大允许偏差时间为999999ms,也就是1000s的话,服务大概率就停了
- jitter 统计了在特定个连续的连接数里offset的分布情况。简单地说这个数值的绝对值越小,主机的时间就越精确
以上是我使用ntpd作为客户端服务使用的一些内容,如有错误,烦请指出,不胜感激