一、原理
NTP是用来使系统和一个精确的时间源保持时间同步的协议。建议大家在自己管理的网络中建立至少一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易,而且不会出错。
官方网站是:http://www.ntp.org/
从上面我们可以获得Linux下的源代码,以及互联网上的公开的NTP服务器,其地址列表如下:
http://ntp.isc.org/bin/view/Servers/NTPPoolServers
http://ntp.isc.org/bin/view/Servers/WebHome
NTP协议是通过Server和Client的方式进行的,通讯的过程是:
1.首先,主机需要启动这个NTP服务
2.Client 会向 NTP Server 发送出调校时间的 message
3.然后 NTP Server 会送出目前的标准时间给 Client
4.Client 接收了来自 Server 的时间后,会据以调整自己的时间,以实现网络校时。
虽然网络上有很多公开的NTP服务器,但在使用的时候需要注意。由于网络传输是有延时的,当Client对一个延时比较厉害的服务器发送请求后,直到最后Client获得时间,期间可能会出现一个由于网络延时导致的的时间差。所以,建议大家选择离自己最近的NTP服务器作为校验的标准。
☆系统环境:红旗DC Server 5.0 for x86
二、配置
安装我就不说了,红旗DC Server服务器在最大化安装的时候就已经安装有NTP的服务端和客户端套件。下面我们就只讲如何配置NTP服务端,以及客户端如何做时间同步。
◎规划
很多时候,作为提供数据应用的服务器都不能直接联通互联网。此时,我们就需要在局域网内部署一台专用于时间同步的机器(通常是网管机),这样,服务器通过局域网对网管机进行时间同步即可。当然,如果你只要保证多台服务器之间的时间一致,那可以更简单,只要其中一台服务器为基准,然后其他服务器对它做同步,那是最简单的。
1、配置服务端
NTP服务端的配置比较简单,只有一个配置文件:/etc/ntp.conf。而且文件中已经有很多例子可以参考,描述一下:
→语法1:
引用
restrict IP mask 掩码 参数
IP是允许或不允许访问的地址,配合掩码可以对一段网段使用;
参数包括:
ignore:关闭所有NTP联网服务
nomodify:客户端不能修改服务端的时间,但可以作为客户端的校正服务器
notrust:除通过认证外,否则指定的网段为不信任网段
noquery:不提供时间查询
IP是允许或不允许访问的地址,配合掩码可以对一段网段使用;
参数包括:
ignore:关闭所有NTP联网服务
nomodify:客户端不能修改服务端的时间,但可以作为客户端的校正服务器
notrust:除通过认证外,否则指定的网段为不信任网段
noquery:不提供时间查询
(若不设置参数,表示对该IP或网段没有任何限制)
而配置文件中有几个是默认设置好的,包括:
引用
restrict default nomodify notrap noquery
#default就是0.0.0.0,也就是关闭所有
restrict 127.0.0.1
#这是允许本级查询
#default就是0.0.0.0,也就是关闭所有
restrict 127.0.0.1
#这是允许本级查询
→语法2:
引用
server [IP|FQDN] [prefer]
IP|FQDN就是给出作为你服务端同步的基准NTP服务器
prefer是用于指定主次服务器的,有标识的就是主要服务器咯
IP|FQDN就是给出作为你服务端同步的基准NTP服务器
prefer是用于指定主次服务器的,有标识的就是主要服务器咯
而配置文件默认的包括了:
引用
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
这些都是比较公开的、常用的NTP服务器,也可以改为你指定的服务器,如:
引用
server cn.pool.ntp.org prefer
→其他:
引用
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
要注意的就是driftfile定义,driftfile 规定我们的主机在与Time Server沟通时所花费的时间,时间记录在 driftfile 后面接的文件内
→添加:
这里就添加上允许访问这台服务器的IP或网段,在配置文件上增加:
引用
restrict 192.168.228.0 mask 255.255.255.0 nomodify
这样,在192.168.228.0/24网段内的服务器就可以通过这台NTP Server进行时间同步了!
※留意:
为了方便配置,这里是已经配置好的文件,可以下载使用:点击
2、启动NTP服务端
在启动NTP服务前,先对提供服务的这台主机手动的校正一次时间咯。(因为启动服务器,端口会被服务端占用,就不能手动同步时间了)
# ntpdate cn.pool.ntp.org
25 Apr 14:33:51 ntpdate[8310]: step time server 80.85.129.2 offset 6.655976 sec
25 Apr 14:33:51 ntpdate[8310]: step time server 80.85.129.2 offset 6.655976 sec
然后,启动ntpd服务:
# service ntpd start
查看端口:
# netstat -ln|grep 123
udp 0 0 192.168.228.153:123 0.0.0.0:*
udp 0 0 127.0.0.1:123 0.0.0.0:*
udp 0 0 0.0.0.0:123 0.0.0.0:*
udp 0 0 :::123 :::*
udp 0 0 192.168.228.153:123 0.0.0.0:*
udp 0 0 127.0.0.1:123 0.0.0.0:*
udp 0 0 0.0.0.0:123 0.0.0.0:*
udp 0 0 :::123 :::*
3、设置客户端
NTP的客户端可以是Linux,也可以是通过软件在Windows上实现。
Linux客户端
同步的方法非常简单,运行一个命令即可:
# ntpdate 192.168.228.153
当然,这只是修改系统时间,你需要用hwclock -w把系统时间写入硬件时间中。也可以用计划任务做定时更新:
# crontab -e
0 0 * * * /usr/sbin/ntpdate 192.168.228.153;/sbin/hwclock -w;
Windows XP professional客户端
可以用下面的命令进行:
NET TIME /SETSNTP:192.168.228.153
NET TIME /QUERYSNTP
NET START w32time
NET TIME /QUERYSNTP
NET START w32time
第一行是配置同步的服务器,第二行是察看设置结果,第三行是启动“Windows Time”服务。Windows Time服务默认是自动启动的,并会定时
同步指定的服务器。
若系统是Home版等,可以通过日期/时间属性里面的Internet同步服务器,指定服务器地址为192.168.228.153即可。
三、可能出现的问题
虽然NTP服务的配置非常的简单,但总是可能出现问题的,可以从下面几方面入手:
1、相关命令
# ntptrace 服务器IP
可以最终NTP服务器的通讯路径
# ntpq -p
检查时间服务器同步的状态
可以最终NTP服务器的通讯路径
# ntpq -p
检查时间服务器同步的状态
2、检查配置文件
保证配置文件中没有使用ignore参数,如没有restrict default ignore等。
3、检查防火墙配置
由于NTP服务是使用UDP 123端口的,有防火墙的话,需要打开该端口。
4、常见错误
引用
25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found
其实,这不是一个错误。而是由于每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了!若之后还有问题,则才是真正有故障咯!