#部署内部ntp时间服务器
Description:本文是部署内部的NTP时间服务器,分别介绍了用ntpd软件和chronyd软件来部署NTP服务器,在实际应用中,只需要用其中一款软件来部署NTP服务器即可。
NET-TOP: NTP-Server:node11-IP:192.168.11.11 <----------------> NTP-Client:node12-IP:192.168.11.12

Linux的NTP总结(百度文库):https://wenku.baidu.com/view/3dc46b4403020740be1e650e52ea551811a6c97a.html?rec_flag=default&sxts=1553654764639

#NTP协议简介
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?
NTP就是用来解决这个问题的,NTP(网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议***。

NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。新的标准时间,是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时)。所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。

#安装ntpd软件
yum install -y ntp

#配置内部ntpd服务器
[ -f /etc/ntp.conf.bak ] || cp -v /etc/ntp.conf{,.bak}
vi /etc/ntp.conf 添加如下内容
server 192.168.11.11 #把本机作为ntp服务端
fudge 192.168.11.11 stratum 10 #本时间服务器的层次为第10层。

#重启ntpd服务,并设为开机启动
systemctl restart ntpd
chmod -v +x /etc/rc.d/rc.local
echo 'systemctl restart ntpd' >> /etc/rc.d/rc.local

#查看ntp服务信息
ntpq -p

#防火墙放行ntp服务
iptables -I INPUT -p udp --dport 123 -j ACCEPT

#node12客户端与192.168.11.11时间服务器校对时间
ntpdate 192.168.11.11

#查看系统时间,查看硬件时间,并将系统时间写入硬件时钟
date
hwclock
hwclock -w

#centos 7的chrony网络时间服务器------------------------
#关闭ntpd时间服务
systemctl stop ntpd

#安装chrony时间服务器软件
yum install -y chrony

#修改配置文件
vi /etc/chrony.conf 修改如下内容
allow 192.168.11.11/24 #允许此网段的主机同步时间
local stratum 10 #设置本地时间服务器为第10层(用于定义内部时间服务器)

#重启chronyd服务
systemctl restart chronyd
systemctl enable chronyd

#查网络进程
netstat -atunlp|grep chrony

#客户端时间同步
date -s "20120303"
chronyc sources
date

#chrony服务配置和测试完毕-----------

NTP 工作原理
参考文档1:https://blog.csdn.net/xiaoshengqdlg/article/details/37695293
参考文档2:https://wenku.baidu.com/view/d4e61446a8956bec0975e321.html

上图1所示的是NTP基本工作原理,路由器A和路由器B通过网络相连,它们都有自己独立的系统时钟,要实现各自系统时钟的自动同步,作如下假设:
路由器A和B的系统时钟同步之前,路由器A的时钟设定为10:00:00am,路由器B的时钟设定为11:00:00am。
以路由器B为NTP时间服务器,即路由器A将使自己的时钟与路由器B的时钟同步。
数据包在路由器A和B之间单向传输所需要的时间为1秒。

系统时钟同步的工作过程如下:
路由器A发送一个NTP消息包给路由器B,该消息包带有它离开路由器A时的时间戳,该时间戳为10:00:00am(T1)。
当此NTP消息包到达路由器B时,路由器B加上自己的时间戳,该时间戳为11:00:01am(T2)。
当此NTP消息包离开路由器B时,路由器B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
当路由器A接收到该响应消息包时,加上一个新的时间戳,该时间戳为10:00:03am(T4)。

至此,RouterA 拥有足够信息来计算以下两个重要参数:
NTP 消息来回一个周期的时延:Delay=(T4-T1)-(T3-T2)。
RouterA 相对RouterB 的时间差:Offset=((T2-T1)+(T3-T4))/2。
RouterA 根据这些信息来设定自己的时钟,实现与RouterB 的时钟同步。

NTP的四种工作模式:
服务器 / 客户模式(server / client)
这种模式只需要在客户端配置,服务器端除了配置NTP 主时钟外,不需要进行其他专门配置。并且,只能是客户端同步到服务器,服务器不会同步到客户端。
配置完成后:
客户端向服务器发送同步请求报文,报文中的 Mode 字段设置为3(客户模式)。
服务器端收到请求报文后,自动工作在服务器模式,并发送应答报文,报文中的
Mode 字段设置为4(服务器模式)。
客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器端。