今有一小型项目,彻底自主弄,原来觉得很简单的NTP服务,我给折腾了2个多小时才整撑头(之前都是运维搞,没太注意,因此这技术的东西,在简单都须要亲尝啊),这里记录为之后别再浪费时间。php
目标环境,5台linux centos 6.3, 一台做为NTPD服务与外部公共NTP服务同步时间,同时做为内网的NTPD服务器,其余机器与这台服务作时间同步。
html
服务器IP | 角色 | 说明 | 同步方式 |
192.168.1.135 | NTPD服务 | 一、负责与外部公共NTPD服务同步标准时间linux 二、做为内外网络的NTPD服务vim |
NTPD服务平滑同步centos |
192.168.1.xxx | 内外NTP客户端 | 内网设备与192.168.1.135同步时间 | NTPD服务平滑同步 |
…… | 内外NTP客户端 | 内网设备与192.168.1.135同步时间 | NTPD服务平滑同步 |
一、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先手动同步一次)。less
二、安装配置运维
CentOS 6.3系统已经自带了NTPD服务,通常默认是按照了的,若是没有安装,先检查下,而后配置好yum仓库,yum方式安装下就OK,具体以下:ide
# 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::6cae:8bff:fe3d:f65:123 :::* 23103/ntpd
udp 0 0 fe80::6eae:8bff:fe3d:f65:123 :::* 23103/ntpd
udp 0 0 ::1: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
三、错误问题处理
用于收集安装,配置和应用中出现的问题
错误1:ntpdate -u ip -> 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服务后,ntp server自身或者与其server的同步的须要一个时间段,这个过程多是5分钟,在这个时间以内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
处理:等待几分钟后,重试通常解决。
也可使用命令 ntpq -p查看状况