实例86 设置Linux时间服务器
实现目的
在局域网系统特别是分布式的计算网络环境中,时间同步有时会显得非常重要,因为时间同步有助于建立和维护事件的顺序,也是事务事件和其它数据库的修改可以被定时地正确执行的保证。这就需要时间同步服务来提供相应的保障。
常用的时间同步策略有两种方式:
(1)在地理位置接近的网络中使用一个单一的引用时间服务器,这个时间服务器是这个网络中时间的唯一来源,时间的任何改变都在这个服务器上进行设置,然后其它的服务器与它进行同步;
(2)在地理分布较广的网络中可以使用的时间服务器有以下几种:
在地理分布网络上使用的基本服务器,和其它基本时间服务器或一个参考时间服务器进行时间同步,并且对高层时间服务器提供正确的时间。如果在一个网络上存在多个基本服务器,它们“投票”决定使用哪个通用网络时间。
参考服务器:参考服务器从外部资源(例如收音机报时)获得时间,并且它还是一种确定外部世界应该
是什么时间的联络员。参考服务器不使用,或改变它的内部时钟。参考服务器通过“投票”过程帮助基本时间服务器设置公共时间。最后,所有的时间服务器都设置到由参考服务器的外部时间来源指示的时间。
高层服务器:网络上的所有其它服务器都可以是高级时间服务器。它们或参考时间服务器那里获得时间,并不参予网络上的公共时间的建立。
可根据长途广域网(WAN)链路的费用决定使用那种类型的时间服务器。高级服务器将从一个本地基本的或参考的服务器那里获得它们的时间,而不是通过使用WAN链路来访问一个远程的时间服务器。在跨越很广的地理区域的互联网络上,需要使用多个基本时间服务器。
OSF的分布式计算环境(DCE)中的时间服务 OSF时间服务是一个DCE的构件,它允许应用程序对活动进行调度并确定事件的顺序和持续时间。这种服务跟踪多个网络上的时间,并确定用作同步时间的每个时钟的准确性。这个服务为本地和广域网的系统都提供容错时钟同步。也就是说,能够确定具有错误时钟的服务器,并且它们的时间在进行同步的期间不使用。为支持使用网络时间协议(NTP)的分布地点,OSF时间服务还允许使用来自外部资源的时间数值。
本例简单介绍如何在局域网上设置一台Linux时间服务器。
实现技术
先从网上免费获取或通过其它途径获得源代码ntp-4.1.,然后编译、安装。在安装完成后,再进行相应配置,将其配置成局域网内的时间服务器。
再使这台时间服务器与外部时间服务器的时间同步,并同时为局域网内的计算机提供时间服务,这样,整个局域网内的计算机的时间就同步了。
实现方法
1、选择合适的时间服务器
当计算机与互联网相连后,就可以同互联网上存在的很多时间服务器通信,从而获得精确的时间。在TCP/IP协议中,用于同步时间的协议为ntp协议,互联网上提供ntp服务的站点有很多,如:clepsydra.dec、ben.cs.wisc.edu、truechimer.等。虽然ntp 协议本身考虑了网络延迟,但网络延迟毕竟会对时间的精确性造成影响,因此,在互联网上选择时间服务器是要选用一个离本地计算机最近的时间服务器。
使用/stand/sysinstall也能设定时间同步,可以根据地域来选择合适的时间服务器,然而由于网络连接并不一定和地域相一致,因此不能完全根据地域的远近来选择时间服务器。
2、时间同步命令
利用应用程序ntpdate可以很简单地使用ntp协议更新自己计算机上的时间,当然,这需要使用root权限执行:
# ntpdate clepsydra.dec
30 Oct 19:26:49 ntpdate: step time server 204.123.2.5 offset 517.837146
ntpdate运行过之后就会退出,为了保持时间的正确性,每隔一段时间需要自动进行时间同步,可以将ntpdate 放入cron中,每隔一段时间就执行一次。Linux系统中还提供了另一个守护进程xntpd,它能够自动周期进行时间同步的工作,因此比较适合于为与互联网有永久连接的计算机进行时间同步工作。要运行xntpd守护进程,首先要创建/f 文件,其中应包括时间服务器的名字和一个临时文件名。如:
server clepsydra.dec
driftfile /etc/ntp.drift
然后就需要运行这个守护进程,进行时间同步:
# xntpd -c /f -p /var/run/xntpd.pid
其中:
-c指定了f作配置文件,
xntpd.pid记录xntpd的进程标识序号。免费永久的linux服务器
ntpdate和xntpd都可以通过更改rc.conf中的选项,在启动时自动执行。
xntpd_enable="YES"# Run xntpd Network Time Protocol (or NO).
xntpd_program="xntpd"# path to xntpd, if you want a different one.
xntpd_flags="-c /f -p /var/run/xntpd.pid" # Flags to xntpd (if e nabled).
3、局域网内计算机的时间同步
如果局域网内的多台计算机都需要进行时间同步,是不是需要将每台计算机都与外部时间服务器连接呢?理论是可行的,但并不是最好的办法。比较好的办法是使一台计算机与外部时间服务器同步,将它的时间设为标准时间,同时又将它用作本地时间服务器,其他计算机只需与这台本地时间服务器同步就可以了。xntpd就是为这个目的设计的,它可以用作提供时间同步服务的ntp服务器。用作时间服务器的xntpd的配置文件应该为:
server clepsydra.dec
driftfile /etc/ntp.drift
broadcast 202.197.89.255
其中:202.197.89.255为广播地址,能定期向局域网上的其他计算机广播正确的时间。这个广播地址要根据自己的网络进行修改,或者使用对应于NTP协议的D类组播(multicast)网址224.0.1.1,但用户的网络必须支持组播能力。由于使用了广播或组播,这样网络内的其他计算机可以不配置f,直接启动 xntpd,xntpd就能通过听服务器的广播信息来得到精确的时间。当然也可以不设定广播地址,而配置每个计算机中的f文件,指定所有的计算机都访问这台时间服务器即可。
4、配置实例
(1)设定时间服务器:
#touch /f 生成配置文件f
===================== f ===============
server 202.197.89.0
fudge 202.197.89.0 stratum 10
driftfile /etc/ntp.drift
broadcast 202.197.89.255
#touch /etc/ntp.drift 生成ntp.drift文件
#ntpd -c /f -p /var/run/ntpd.pid 启动时间daemon
(2)客户端的配置
#touch /f
================ /f ==============
server the_time_server
driftfile /etc/ntp.drift
#touch /etc/ntp.drift
#ntpd -c /f -p /var/run/ntpd.pid start the Network Time Protocol daemon
(3)将某计算机作为Internet标准时间服务器的客户端,以便得到准确的时间,同时又将其作为局域网内的标准时间源、时间服务器,向网络提供标准时间
#touch /f
================= /f ==============
server v
server ntp.ise.canberra.edu.au
server 202.197.89.0
fudge 202.197.89.0 stratum 10
driftfile /etc/ntp.drift
broadcast 202.197.89.255
#touch /etc/ntp.drift
Q & A
问:有没有什么简便方法保证几台机器的系统时钟同步?
答:有。ntpdate程序是为这个目的设计,而且简单易用。它使用一种协议查询一个或多个时间服务器,然后为你的机器设置正确的系统时间。
首先你应该确定使用哪一个时间服务器。虽然你可以设置自己的某一台机器作为时间服务器,然后用这台机器同步其他机器的时钟,但这样做会要求你完成额外的管理工作,而且你必须保证时间服务器的时钟精确。
ntpdate命令的语法很简单,但必须以root身份运行它。你可以在命令行中指定一个或者多个时间服务器,这样,ntpdate将能够选择一个最好的时间服务器进行同步。
# ntpdate ntp2.usno.navy.mil tock.usno.navy.mil tick.usno.navy.mil
30 Otc 17:19:04 ntpdate[16015]: adjust time server 192.5.41.40 offset -0.017641 sec
时间服务器的清单可以从tycho.usno.navy.mil/ntp.html获得。
为了保证时钟精确,还可以把ntpdate命令放入crontab。但是,对于那些不经常开启的计算机,将这个命令放入启动脚本或手工运行更合适。
值得注意的是,ntpdate设置的是系统时钟,不设置硬件时钟,如果要让硬件时钟反应系统时钟的值,需要使用如下命令:
# hwclock -systohc

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。