分类:
2007-03-30 17:47:56
介绍网络时间协议(NTP)
目标:
完成这一章,你能做以下事情:
1.列出网络中系统时钟同步的三个理由。
2.描述NTP中级的概念。
3.定义如下的术语:
NTP服务器
NTP对等服务器(peer)
NTP广播客户端
NTP直接访问客户端
配置一个NTP服务器。
配置一个NTP广播客户端。
配置一个NTP直接访问客户端。
使用ntpq命令来监视NTP状态
1.介绍网络时间协议(NTP)
以下的应用需要系统之间时钟同步:
-NFS的时钟标记
-加密算法产生的密匙的过期日期
-增量备份使用的时间标记,程序员的make文件,和应用程序。
HP-UX 使用NTP来维持时钟的同步:
没有使用NTP:主机1(9:02:15)--主机2(9;03:02)--主机3(9:01:02)
使用了NTP:主机1(9:02:15)--主机2(9:02:15)--主机3(9:02:15)
在下面几种情况下需要对网络中成员的时钟进行同步:
1.在备份服务器和客户机之间进行增量备份要求这两个系统之间的时钟同步。
2.确保系统之间的RPC(远程系统调用)能够正常进行。因为为了保证一个系统调用不会重复进行,一个调用只在一个时间间隔内有效。如果系统间的时钟不同步。一个调用可能在还没有发生之前就因为超时而不能进行。
3.有的应用程序需要知道一个用户登录系统的时间,或者文件的修改时间。
4.在一个网络中,系统之间的时钟相差一分钟或者更少的情况很多。如果网络很大,不可能完全依靠系统管理员手工使用date命令来调节各个系统的时钟。
5.在HP-UX中,网络时间服务是和操作系统绑定在一起的,它是通过调用网络时间协议(NTP)来实现的,这个协议的作用就是同步网络中系统时钟。网络时间服务在系统中是一个叫xntpd的守护进程提供的。
NTP可以通过命令来配置,还可以通过SAM等系统管理工具来配置。
2.NTP时间源
NTP时间源有:
GPS卫星发射的无线的时钟信号 (需要大约$1000,非常精确)
internet上的网络时间源 (免费,但是不是很精确)
内置的系统时钟 (免费,但是非常不精确)
NTP在进行时钟同步的时候可以使用不同的时间源:
1.HP-UX系统可以通过串口连接一个无线时钟。无线时钟接收GPS(全球卫星定位系统)的卫星发射的信号来决定当前时间。无线时钟是一个非常精确的时间源,但是需要花费几百到1000美元
2.如果无线时钟对于你来说太昂贵的话,你可以使用网络中NTP时间服务器,通过这个服务器来同步网络中的系统的时钟。~ntp列出了公众网上有效的的一级时间服务器。
3.如果只是需要在本局域网内进行系统间的时钟同步,那么你可以使用局域网中任何一个系统的时钟。你需要选择局域网中的一个节点的时钟作为“权威的”的时间源,然后其它的节点就只需要与这个时间源进行时间同步即可。使用这种方式,所有的节点都会使用一个公共的系统时钟,但是不需要和局域网外的系统进行时钟同步。如果一个系统在一个局域网的内部,同时又不能使用无线时钟,这种方式是最好的选择。
3.NTP的级别
时间源的的级别决定它的精确度:
stratum = 1 最精确
stratum = 5 最不精确
服务器1 (使用无线时钟的系统)
|
v
服务器2 (从第一级NTP服务器获取时间)
|
v
服务器3 (从第二级NTP服务器获取时间)
在一个大型网络中,可以将所有系统分为几个级别来同步网络中系统时钟。最高级别的时钟服务器从外部的时间源接收时钟信号(例如无线时钟),下一级的时钟服务器通过参考同级或者更高一级的时钟服务器的时钟来确定自己的时间。
每一个时间服务器会频繁的检测从远程服务器传送过来的时钟标记,通过这个标记来更新自己的时钟,并且补偿网络传输中的时间延迟。对最低级别的系统来说,它只是一个纯粹的客户端,因为它只是从时间服务器上接收时间而不提供时间给别的系统。
4.NTP的角色
在处理网络中的NTP请求时候,一个系统可能扮演的角色有四种:
1.服务器 提供时间给其它系统的的NTP服务器
2.对等服务器(peer) 一个NTP 对等服务器(peer)可以从同级的一个或多个NTP服务器获取时间。NTP使用一种特殊的算法来协调不同服务器时间的差异,形成一个唯一的时间,这个时间被认为十 分精确,这个时间是基于其它服务器的级别还有其它的一些条件。
3.直接请求客户端 这个客户端通过发送一个请求给一个指定时间服务器,直接取得时间。
4.广播客户端 这个客户端监听NTP时间服务器广播的时间请求。
在上例中,机器Larry和Frank(两个一级NTP服务器)为系统John服务。John上面的NTP的工作就是比较时间上的差异(大多数很小)并形成唯一一个的时间。如果John与Larry失去了联系,它会单独从Frank取得时间信息。如果John和Larry和Frank都失去了联系,它会查询它的等价服务器(Brian和Darren)来决定当前的时间。
5.通过/etc/ntp.conf来定义一个NTP的角色
/etc/ntp.conf文件定义系统在网络的NTP服务中扮演什么角色。
定义一个服务器使用无线时钟信号:(上图中的Frank)
# vi /etc/ntp.conf
server 127.127.4.1
peer Larry
定义一个第二级的时间源: (上图中的John)
# vi /etc/ntp.conf
server Larry
server Frank
peer Brian
broadcast 128.1.255.255
driftfile /etc/ntp.drift
/etc/ntp.conf文件的作用之一就是定义系统与网络中的其他服务器之间(NTP)的关系。这个关系是在系统启动的时候定义的。
配置一个一级NTP服务器(使用无线时钟)
想要配置一个一级服务器,在/etc/ntp.conf文件中加上下面两行:
server 127.127.4.1
peer Larry
上面的IP地址是一个“假的”IP地址,其作用是确定一个无线时钟作为时间源。
IP地址的前三段:127.127.4,用来在NTP中定义一个无线时钟为时间源。
第四个段:1,通过和4一起可以确定时钟的设备文件。无线时钟的设备文件是/dev/wwvb1,这个设备文件的最后一个数字和IP地址的最后一段的数字是一致的。
每一个无线时钟服务器在本地的无线时钟失效的时候都会转向去查询同一级的其它服务器,条目peer Larry就说明在本地的无线时钟失效的时候,系统会转从Larry获得时间。
配置一个二级服务器
以下是一个配置二级服务器的例子,其中的John作为上例中的一个二级服务器。注意John已经peer了系统Brian和Darren(在一级服务器失效的时候),同时John担当了本地网络中的一个广播服务器。
server Larry
server Frank
peer Brian
peer Darren
broadcast 128.1.255.255
driftfile /etc/ntp.drift
在上例中:
"server" 定义更高一级的服务器
"peer" 定义同一级的服务器
"broadcast"定义了NTP的广播地址,这个地址用来在网络中广播时钟信号。
"driftfile"指定了一个文件名,这个文件的作用是用来跟踪本地时钟的时间的“漂移”
经过一段时间,NTP会使用driftfile来补偿时钟的漂流,从而使访问NTP服务器的次数减少。
6.更多的/etc/ntp.conf的例子
以下是一些的NTP配置例子:
配置一个使用自己内部时钟的本地NTP服务器
要配置一个使用系统时钟作为时间源的NTP服务器,需要在/etc/ntp.conf文件中添加如下的记录:
server 127.127.1.1
fudge 127.127.1.1 stratun 10
在以上的记录中:
指定的IP地址是一个“伪”IP地址,确定本地系统为时间源。
指定的IP地址127.127.1.1告诉NTP使用内部时钟作为时间源。
"fudge"定义了这个时钟的级别,如果没有这个记录,节点就是一级服务器。将级别重新定义为10是个好的办法,这样客户端在查询这个服务器的时候就会知道这个服务器不是一个可靠的时间源
这种时间同步的方式只应该在本地的网络不能使用外部的时间源的时候使用.
配置一个使用直接查询方式的客户端
要配置一个客户端让它可以直接查询指定的NTP服务器,在客户端的/etc/ntp.conf文件中增加:
server brian
driftfile /etc/ntp.drift
这个客户端会直接向服务器brian发送查询请求来确认自己的时间。
默认的查询的时间间隔为64秒,并可以调节。
driftfile用来跟踪客户机的时间和服务器的时间差异。如果driftfile保持稳定,系统更多的是用它来调节客户端的时间,这样会减少对服务器的查询。
配置一个使用广播方式的客户端
要配置一个监听时间广播信息的客户端,在客户端的/etc/ntp.conf文件中加上:
broadcastclient yes
driftfile /etc/ntp.drift
以上信息的解释:
客户端会被动地监听NTP的广播信息,并依靠它来调节自己的时钟。
对许多节点的大型网络推荐使用这种方式进行时间同步,而不使用直接查询指定服务器的方式。
因为这种方式可以显著减少NTP对网络资源的占用。
客户端必须和NTP服务器在同一个子网内。
7.NTP如何调节系统时钟
NTP中用来保持网络中的节点之间的时钟同步的机制有三种。
ntpdate命令
ntpdate命令被用来立即同步客户端和服务器的时钟。这是同步客户端和服务器的时钟的最快方式。
系统每次启动的时候会使用这个命令,用来确保客户端和服务器的时钟的同步。
这个命令通常指定一个NTP服务器作为一个参数,客户端的时钟被设置为和服务器的时间匹配。然而,如果这个命令使用多个NTP服务器作为参数,客户端会使用最低级的NTP服务器。如果级别相等,客户端会使用平均数。
xntpd守护进程
xntpd守护进程在后台持续运行,并且会定时校验客户端的时钟和NTP服务器的时钟。xntpd守护进程通常是在系统启动的时候启动。
因为客户端的时钟可能产生漂移,以致与实际的NTP时钟有差异。xntpd守护进程会周期性地发送一个NTP服务器的网络请求,并且与客户端的时钟对比,在必要的时候修正客户端的时间,同时将时间差存到一个/etc/ntp.conf文件。
默认的xntpd时间检查的间隔为64秒,在第一次检查的时候,客户端的时钟和NTP服务器上的时钟的差异会被记录下来,同时依靠这个时间差异来计划下一次检查的计划。如果这个时间差异很大,下一次的时间检查会很快发生。如果这个差异很小,下一次的检查到来的时间会相应的延长。
/etc/ntp.conf文件
/etc/ntp.conf文件被用来在记录每次校验发生时候客户端和服务器时钟之间的差(或者叫漂移)。
一旦xntpd守护进程预计到这个时间差,它会开始使用这个“可预期”的漂移,来调节本机的时钟,这样就避免每次都去查询网络中的ntp服务器,从而可以减轻网络负载。
xntpd守护进程会慢慢的转成使用这个drift文件,而查询NTP服务器的次数会慢慢变少。当这个值逐渐稳定并且保持同一个值,对NTP服务器的查询会变得更少,直到达到NTP请求的最小值。
8.配置一个NTP服务器
配置NTP服务器的步骤:
1.编辑/etc/rc.config.d/netdaemons文件,让xntpd守护进程在每次系统启动的时候自动启动。设置XNTPD变量的值为1。
export NTPDATE_SERVER=
export XNTPD=1
export XNTPD_ARGS=
对NTP服务器来说,不要设置NTPDATE_SERVER变量(让它为空)。这个变量是为NTP客户端使用。
2.编辑/etc/TIMEZONE文件来指定系统时区。设置TZ和系统的时区相同。/usr/lib/tztab文件中有所有的时区变量。
TZ=CST6CDT
export TZ
3.编辑/etc/ntp.conf文件同时定义NTP服务器(与上一章中描述的类似)。以下是配置使用本地时钟作为时间源的NTP服务器的例子:
server 127.127.1.1
fudge 127.127.1.1 stratum 10
4.通过执行如下的命令,手工启动xntpd守护进程:
/sbin/init.d/xntpd start
5.等待,xntpd守护进程启动会花费6分钟的时间。
6.检验NTP服务器的配置,执行下列的命令:
ntpq -p
9.配置NTP客户端
配置一个NTP客户端的过程和配置一个NTP服务器相同,不同的只是配置文件的内容。
配置一个NTP客户端的步骤如下:
1.编辑/etc/rc.config.d/netdaemons文件,让xntpd守护进程在每次系统启动的时候自动启动。设置XNTPD变量的值为1,同时指定ntpdate命令查询的是哪一个NTP服务器:
export NTPDATE_SERVER="NTP_server1 NTP_server2"
export XNTPD=1
export XNTPD_ARGS=
2.编辑/etc/TIMEZONE文件,为客户机指定正确的时区。/var/lib/tztab文件中有所有的时区变量的列表。
TZ=CST6CDT
export TZ
3.编辑/etc/ntp.conf文件,定义本机为一个NTP客户端。下面是一个定义NTP广播客户端的例子:
broadcastclient yes
dirftfile /etc/ntp.drift
4.执行如下的命令手工启动xntpd守护进程:
/sbin/init.d/xntpd start
5.等待xntpd守护进程启动,建立与NTP服务器和同伴服务器的联系大约需要6分钟。
6.要验证其它的NTP服务器和peers的联系是否正确建立。执行下面的命令:
ntpg -p
10.验证NTP的功能
NTP查错推荐使用三种方式:
检测syslog文件
当xntpd守护进程启动,它会在/var/adm/syslog/syslog.log文件中添加几条记录,包括:
xntpd启动和停止的时间
与其它的运行NTP的节点之间的关系。
/etc/ntp.conf文件中发现的错误。
验证xntpd守护进程是否正在运行。
xntpd守护进程必须存在,否则就不能同步其它系统的时钟。
浏览NTP服务器节点的状态和与客户端的联系。
命令:ntpg -p
查询网络中的NTP服务器,同时显示客户端和每个服务器的关系,例如:
# ntpg -p
remote refid st when poll reach delay offset disp
----------------------------
* John Larry 3 64 64 377 0.87 10.56 16.11
+ Brian Renay 3 100 264 376 9.89 5.94 16.40
Darren 0.0.0 .015 - 64 0 0.00 0.00 1600.00
* 指出响应的NTP服务器和最精确的服务器
+ 指出响应这个查询请求的NTP服务器
Blank 指出没有响应的NTP服务器
Remote 响应这个请求的NTP服务器的名称
Refid NTP服务器使用的更高一级的服务器的名称
St 正在响应请求的NTP服务器的级别
When 上一次成功请求之后到现在的秒数
Poll 当前的请求的时钟间隔的秒数
Others 其它的被用于决定精确度和不一致性的统计信息