首页 运维干货NTP中间服务器(Relay Server)设置及其日常维护

NTP中间服务器(Relay Server)设置及其日常维护

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

NTP(Network Time Protocol)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。

NTP顶级时钟源都是由国际组织管理维护的,那么我们如何自己架设一个NTP中间服务器(NP Relay Server),以及NTP服务器日常维护都需要关注些什么呢?请往下看……

1. 架设一个NTP Relay Server其实非常简单,我们先把需要的RPM包装上

# rpm -ivh ntp-4.2.2p1-5.el5.rpm

2. 找到在互联网上给我们提供同步服务的NTP Server,可以在TekTea前面文章提到的pool.ntp.org上找你所在地区的上级NTP服务器,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个个NTP Server,那么在中国大陆就可以选择下面这两个服务器(这两个域名分别解析到中国大陆和香港地区)

cn.pool.ntp.org
hk.pool.ntp.org

3. 在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间,这里我们可以用ntpdate命令

# ntpdate cn.pool.ntp.org
6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec
# ntpdate hk.pool.ntp.org
6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec

4. 假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次,那么为什么在打开NTP服务之前先要手动运行同步呢?
1)因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步
2)当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整,所以手动同步可以减少这段时间

5. 配置和运行NTP Server
现在我们就来创建NTP的配置文件了, 它就是/etc/ntp.conf. 我们只需要加入上面的NTP Server和一个driftfile就可以了

# vi /etc/ntp.conf
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
driftfile /var/lib/ntp/ntp.drift

非常的简单,接下来我们就启动NTP Server,并且设置其在开机后自动运行

# /etc/init.d/ntpd start
# chkconfig –level 35 ntpd on

6. 查看NTP服务的运行状况
现在我们已经启动了NTP的服务,但是我们的系统时间到底和服务器同步了没有呢?为此NTP提供了一个很好的查看工具: ntpq (NTP query)
我建议大家在打开NTP服务器后就可以运行ntpq命令来监测服务器的运行.这里我们可以使用watch命令来查看一段时间内服务器各项数值的变化

# watch ntpq -p
Every 2.0s: ntpq -p Sat Jul 7 00:41:45 2007
remote refid st t when poll reach delay offset jitter
==============================================================================
+193.60.199.75 193.62.22.98 2 u 52 64 377 8.578 10.203 289.032
*mozart.musicbox 192.5.41.41 2 u 54 64 377 19.301 -60.218 292.411

现在我就来解释一下其中的含义
remote:
它指的就是本地机器所连接的远程NTP服务器

refid:
它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器

st:
远程服务器的级别,由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端,所以服务器从高到低级别可以设定为1-16,为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的。

t:
这个…..我也不知道啥意思^_^

when:
我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步

poll:
本地机和远程服务器多少时间进行一次同步(单位为秒),在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小

reach:
这是一个八进制值,用来测试能否和服务器连接,每成功连接一次它的值就会增加

delay:
从本地机发送同步要求到服务器的round trip time

offset:
这是个最关键的值,它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近

jitter:
这是一个用来做统计的值,它统计了在特定个连续的连接数里offset的分布情况,简单地说这个数值的绝对值越小我们和服务器的时间就越精确

那么大家细心的话就会发现两个问题: 第一我们连接的是cn.pool.ntp.org为什么和remote server不一样?第二那个最前面的+和*都是什么意思呢?
第一个问题不难理解,因为NTP提供给我们的是一个cluster server所以每次连接的得到的服务器都有可能是不一样.同样这也告诉我们了在指定NTP Server的时候应该使用hostname而不是IP。
第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务。那么如何知道这些服务器的状态呢?这就是第一个记号会告诉我们的信息
*
它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供
+
它将作为辅助的NTP Server和带有*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管

远程服务器被clustering algorithm认为是不合格的NTP Server
x
远程服务器不可用
了解这些之后我们就可以实时监测我们系统的时间同步状况了

7. NTP安全设置
运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务,但是一些基本的安全设置还是很有必要的。
那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器,第二个就是这些client不能修改我们服务器上的时间
在/etc/ntp.conf文件中我们可以用restrict关键字来配置上面的要求
首先我们对于默认的client拒绝所有的操作

restrict default kod nomodify notrap nopeer noquery
然后允许本机地址一切的操作

restrict 127.0.0.1
最后我们允许局域网内所有client连接到这台服务器同步时间,但是拒绝让他们修改服务器上的时间

restrict 192.168.1.0 mask 255.255.255.0 nomodify
把这三条加入到/etc/ntp.conf中就完成了我们的简单配置,NTP还可以用key来做authenticaiton,这里就不详细介绍了

8. NTP client的设置
做到这里我们已经有了一台自己的Relay Server,如果我们想让局域网内的其他client都进行时间同步的话那么我们就都应该照样再搭建一台Relay Server,然后把所有的client都指向这两台服务器(注意不要把所有的client都指向Internet上的服务器)。只要在client的ntp.conf加上这你自己的服务器就可以了,例如:

server ntp1.leonard.com
server ntp2.leonard.com
server 10.1.0.41

9. 一些补充和拾遗
1)配置文件中的driftfile是什么?
我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确,NTP会自动来监测我们时钟的误差值并予以调整。但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile,这样即使你重新开机以后之前的计算结果也就不会丢失了。

2)及时同步到硬件时钟?
NTP一般只会同步system clock,但在架设NTP服务器时,必须考虑及时把时间更新同步到RTC,否则NTP服务器重启后时间会发现变化。

本文链接:https://www.yunweipai.com/203.html

网友评论comments

回复 jj66 取消回复

您的电子邮箱地址不会被公开。

  1. jj66说道:

    t=type ntp数据包的类型,u=unicast,单播,b=broadcast,广播,l=local,本地

  2. 周人假说道:

    顶级时钟服务器可以自己架设的,我们就使用的泰福特的时钟服务器,好多年了都没问题

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部