NTP服务及时间同步(CentOS6.x)
今有一小型项目,完全自主弄,原来以为很简单的NTP服务,我给折腾了2个多小时才整撑头(以前都是运维搞,没太注意,所以这技术的东西,在简单都需要亲尝啊),这里记录为以后别再浪费时间。
目标环境,5台linux centos 6.3, 一台作为NTPD服务与外部公共NTP服务同步时间,同时作为内网的NTPD服务器,其他机器与这台服务做时间同步。
服务器IP | 角色 | 说明 | 同步方式 |
192.168.1.135 | NTPD服务 | 1、负责与外部公共NTPD服务同步标准时间 2、作为内外网络的NTPD服务 | NTPD服务平滑同步 |
192.168.1.xxx | 内外NTP客户端 | 内网设备与192.168.1.135同步时间 | NTPD服务平滑同步 |
…… | 内外NTP客户端 | 内网设备与192.168.1.135同步时间 | NTPD服务平滑同步 |
1、NTP时间同步方式选择
NTP同步方式在linux下一般两种:使用ntpdate命令直接同步和使用NTPD服务平滑同步。有什么区别呢,简单说下,免得时间长了,概念又模糊。
现有一台设备,系统时间是 13:00 , 真实的当前时间(在空中,也许卫星上,这里假设是在准备同步的上级目标NTP服务器)是: 12:30 。如果我们使用ntpdate同步(ntpdate -u 目标NTP服务器IP),操作系统的时间立即更新为12:30,假如,我们的系统有一个定时应用,是在每天12:40运行,那么实际今天这个的任务已经运行过了(当前时间是13:00嘛),现在被ntpdate修改为12:30,那么意味作10分钟后,又会执行一次任务,这就糟糕了,这个任务只能执行一次的嘛!!我想你(其实是我)已经懂了ntpdate时间同步的隐患,当然这个例子有些极端,但的确是有风险的,生产环境我不打算这么干,还是稳妥点好。所以解决该问题的办法就是时间平滑更改,不会让一个时间点在一天内经历两次,这就是NTPD服务方式平滑同步时间,它每次同步时间的偏移量不会太陡,是慢慢来的(问:怎么来,没有细究,只晓得一次一点的同步,完全同步好需要较长时间,所以一般开启NTPD服务同步前先用ntpdate先手动同步一次)。
2、安装配置
CentOS 6.3系统已经自带了NTPD服务,一般默认是按照了的,如果没有安装,先检查下,然后配置好yum仓库,yum方式安装下就OK,具体如下:
# rpm -q ntp
ntp-4.2.4p8-2.el6.x86_64 // 这表示已安装了,如果没有安装,这是空白。
如果没有安装,我们按照下
# yum install ntp
……
按上面的安装方式在内网每台服务器上都安装好NTP软件包。
完成后,都需要配置NTP服务为自启动
# chkconfig ntpd on
# chkconfig —list ntpd
ntpd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
在配置前,先使用ntpdate手动同步下时间,免得本机与外部时间服务器时间差距太大,让ntpd不能正常同步。
# ntpdate -u 202.112.10.36
22 Dec 16:52:38 ntpdate[6400]: adjust time server 202.112.10.36 offset 0.012135 sec
配置内网NTP-Server(192.168.1.135)
下面主要是配置内网的NPTD服务器(192.168.1.135), NTPD服务配置核心就在/etc/ntp.conf文件,配置好了就OK。网上特别是老外的文章都很简单,我上当了,妈哟,基础环境不一样,我们得中国特色才行。先上配置文件再说,红色部分是我的修改,其他的是默认。
# For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict -6 ::1
# Hosts on local network are less restricted. # 允许内网其他机器同步时间 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). # 中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn server 210.72.145.44 perfer # 中国国家受时中心 server 202.112.10.36 # 1.cn.pool.ntp.org server 59.124.196.83 # 0.asia.pool.ntp.org
#broadcast 192.168.1.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client
# allow update time by the upper server # 允许上层时间服务器主动修改本机时间 restrict 210.72.145.44 nomodify notrap noquery restrict 202.112.10.36 nomodify notrap noquery restrict 59.124.196.83 nomodify notrap noquery
# Undisciplined Local Clock. This is a fake driver intended for backup # and when no outside source of synchronized time is available. # 外部时间服务器不可用时,以本地时间作为时间服务 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10
# Enable public key cryptography. #crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys
# Specify the key identifiers which are trusted. #trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility. #requestkey 8
# Specify the key identifier to use with the ntpq utility. #controlkey 8
# Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats |
配置参数和命令简单说明请参考:http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf
配置文件修改完成,保存退出,启动服务。
# service ntpd start
……
启动后,一般需要5-10分钟左右的时候才能与外部时间服务器开始同步时间。可以通过命令查询NTPD服务情况。
查看服务连接和监听
# netstat -tlunp | grep ntp
udp 0 0 192.168.1.135:123 0.0.0.0:* 23103/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 23103/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 23103/ntpd
udp 0 0 fe80:8bff
f65:123 :::* 23103/ntpd
udp 0 0 fe80:8bff
f65:123 :::* 23103/ntpd
udp 0 0 :123 :::* 23103/ntpd
udp 0 0 :::123 :::* 23103/ntpd
看红色加粗的地方,表示连接和监听已正确,采用UDP方式
ntpq -p 查看网络中的NTP服务器,同时显示客户端和每个服务器的关系
# ntpq -p
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*202.112.10.36 202.112.10.60 2 u 277 128 314 201.553 9.193 17.068
+59.124.196.83 129.6.15.28 2 u 88 128 377 71.153 -25.111 14.004
LOCAL(0) .LOCL. 10 l 15 64 377 0.000 0.000 0.000
位置 | 标志 | 含义 |
符号 | * | 响应的NTP服务器和最精确的服务器 |
+ | 响应这个查询请求的NTP服务器 | |
blank(空格) | 没有响应的NTP服务器 | |
标题 | remote | 响应这个请求的NTP服务器的名称 |
refid | NTP服务器使用的更高一级服务器的名称 | |
st | 正在响应请求的NTP服务器的级别 | |
when | 上一次成功请求之后到现在的秒数 | |
poll | 本地和远程服务器多少时间进行一次同步,单位秒,在一开始运行NTP的时候这个poll值会比较小,服务器同步的频率大,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小 | |
reach | 用来测试能否和服务器连接,是一个八进制值,每成功连接一次它的值就会增加 | |
delay | 从本地机发送同步要求到ntp服务器的往返时间 | |
offset | 主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒,offset越接近于0,主机和ntp服务器的时间越接近 | |
jitter | 统计了在特定个连续的连接数里offset的分布情况。简单地说这个数值的绝对值越小,主机的时间就越精确 |
ntpstat 命令查看时间同步状态,这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。
刚启动的时候,一般是:
# ntpstat
unsynchronised
time server re-starting
polling server every 64 s
连接并同步后:
synchronised to NTP server (202.112.10.36) at stratum 3
time correct to within 275 ms
polling server every 256 s
OK,内网的NTPD服务已经配置完成,如果所有正常后,开始配置内网的其他设备与这台服务器作为时间同步服务。
配置内网NTP-Clients
内网其他设备作为NTP的客户端配置,相对就比较简单,而且所有设备的配置都相同。
首先需要安装NTPD服务,然后配置为自启动(与NTP-Server完全一样)。然后找其中一台配置/etc/ntp.conf文件,配置完成验证通过后,拷贝到其他客户端机器,直接使用即可。
# yum install ntp
…
# chkconfig ntp on
# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1
# 配置时间服务器为本地的时间服务器 server 192.168.1.135
restrict 192.168.1.135 nomodify notrap noquery
server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys |
为了简单,这里只列出了配置项,注释全部清理了。
OK,保存退出,请求服务器前,请先使用ntpdate手动同步下时间
# ntpdate -u 192.168.0.135
22 Dec 17:09:57 ntpdate[6439]: adjust time server 192.168.1.135 offset 0.004882 sec
这里有可能出现同步失败,一般情况下原因都是本地的NTPD服务器还没有正常启动起来,一般需要几分钟时间后才能开始同步。
错误判断请参考后面的错误处理。
# service ntpd start
….
启动后,查看同步情况
# ntpq -p
# ntpstat
…..
因为是内网,一般ntpstat很快就可以同步上,几分钟需要等下.
OK,本机客户端配置完成后,使用SCP拷贝/etc/ntp.conf到其他需要同步的客户端机器,启动NTPD服务即可。
其他客户端机器上操作配置如下:
# ntpdate -u 192.168.0.135
22 Dec 17:09:57 ntpdate[6439]: adjust time server 192.168.1.135 offset 0.004882 sec
# scp 192.168.1.xxx:/etc/ntp.conf /etc/ntp.conf
# service ntpd start
3、错误问题处理
用于收集安装,配置和应用中出现的问题
no server suitable for synchronization found
当用ntpdate -d 来查询时会发现导致 no server suitable for synchronization found 的错误的信息有以下2个:
错误1.Server dropped: Strata too high
在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronization found的错误。
在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。
这是因为NTP server还没有和其自身或者它的server同步上。
以下的定义是让NTP Server和其自身保持同步,如果在/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。
server 127.127.1.0 fudge
127.127.1.0 stratum 8
在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
那么如何知道何时ntp server完成了和自身同步的过程呢?
在ntp server上使用命令:
# watch ntpq -p
出现画面:
Every 2.0s: ntpq -p Thu Jul 10 02:28:32 2008
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.30.22 LOCAL(0) 8 u 22 64 1 2.113 179133. 0.001
LOCAL(0) LOCAL(0) 10 l 21 64 1 0.000 0.000 0.001
注意LOCAL的这个就是与自身同步的ntp server。
注意reach这个值,在启动ntp server服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒*5=320秒的时间。
如果之后从ntp客户端同步ntp server还失败的话,用ntpdate –d来查询详细错误信息,再做判断。
错误2.Server dropped: no data
从客户端执行netdate –d时有错误信息如下:
transmit(192.168.30.22)
transmit(192.168.30.22)
transmit(192.168.30.22)
transmit(192.168.30.22)
transmit(192.168.30.22)
192.168.30.22: Server dropped: no data
server 192.168.30.22, port 123
…..
28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found
出现这个问题的原因可能有2:
1。检查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。
使用以下命令检查ntp的版本:
# ntpq -c version
下面是来自ntp官方网站的说明:
The behavior of notrust changed between versions 4.1 and 4.2.
In 4.1 (and earlier) notrust meant “Don’t trust this host/subnet for time”.
In 4.2 (and later) notrust means “Ignore all NTP packets that are not cryptographically authenticated.” This forces remote time servers to authenticate themselves to your (client) ntpd
解决:
把notrust去掉。
2。检查ntp server的防火墙。可能是server的防火墙屏蔽了upd 123端口。
可以用命令
#service iptables stop
来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。
错误3.the NTP socket is in use, exiting
ntpdate ip时,会出现the NTP socket is in use, exiting错误。造成该原因是系统ntpd服务器正在运行中,可以通过ps aux | grep ntpd查看,如果还是要手动同步时间,就必须先停止该服务,service ntpd stop。
如果使用ntpdate -d ip时,则不存在此问题。
还没有评论,来说两句吧...