如何统一局域网中unix服务器的时间

在我们常见的应用系统中,都会有多台服务器在同时工作。由于应用的需要,所有服务器要求有尽可能一致的时间,否则可能会引起一些意想不到的后果,以前就曾出现过因为应用服务器时间还在23点50多分,而数据库服务器已跨过24点,导致正在进行的整个批处理日切或数据归档等重要处理失败或根本无法进行的情况,其实应用和数据库服务器时间也只是相差了几分钟而已。为了避免出现这种情况,系统管理员要经常关注服务器的时间,发现时间差距较大时可以手工调整,但由系统管理员手工调整既不准确、并且随着服务器数量的增加也显得越来越不现实,因此有必要让系统自动完成同步多个服务器的时间。

针对我们经常接触到的IBM-AIX、HP-UNIX、LINUX三种系统,一一分析如何实现自动同步时间。

一、IBM-AIX中用ntp实现时间自动同步

在AIX中可以用两种方法来实现局域网中多台服务器的系统时间的统一。一个方法是启动xntpd 守护进程,另一个方法是启动timed进程,为了保证时间的一致性,在同一台服务器上只启动xntpd 或 timed中的一个。在AIX中,这两个进程缺省是不启动,每个AIX系统使用自己的系统时间,这里选择采用xntpd守护进程来实现时间同步。

xntpd 是一个关于网络时间协议的守护进程,它遵循了因特网时间服务器的通用标准。在启动 xntpd 时, xntpd 会读取 /etc/ntp.conf 配置文件来确定网络中系统时钟服务器,以 ntp 服务器的系统时间为标准,来调整本机的系统时间。使用 ntp 时应注意,xntpd 服务器和 xntpd 客户端的时钟不能相差超过1000秒。若有大于1000秒的偏移,在客户端启动 xntpd 守护进程前,用 data 命令或smitty date 命令调整本机的系统时间,使偏移量在1000秒之内,然后启动xntpd。


1、设置NTP 服务器 (MASTER)

必须指定一个NTP主服务器,其它NTP客户服务器以此服务器的时间为准,与其进行时间同步。编辑 /etc/ntp.conf 文件, 内容如下:

broadcastclient

server 127.127.1.0

driftfile /etc/ntp.drift

tracefile /etc/ntp.trace

注意文件中的 server 127.127.1.0 这一行, 此处的127.127.1.0 是一固定的地址,表示NTP主服务器是与自身的系统时钟同步。编辑好/etc/ntp.conf后,启动xntpd守护进程。

# startsrc -s xntpd也可通过调用smitty,使xntpd在以后重启服务器时能自动启动,

# smitty xntpd

刚启动xntpd时,sys peer为'insane',表明xntpd还没有完成同步,
#lssrc -ls xntpd
Program name: --/usr/sbin/xntpd
Version: -------3
Leap indicator: 11 (Leap indicator is insane.)
Sys peer: ------no peer, system is insane

……

等待5分钟后, sys peer 就不再是'insane'了,

#lssrc -ls xntpd
Program name: --/usr/sbin/xntpd
Version: -------3
Leap indicator: 00 (No leap second today.)
Sys peer: ------127.127.1.0

……

2、NTP客户端的设置

(1)、编辑所有NTP 客户端上的/etc/ntp.conf文件,内容如下:

#broadcastclient
server 10.118.0.3
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace

其中的server 10.118.0.3表明,此客户端与IP地址为 10.118.0.3的NTP服务器进行时间同步。

(2)、在NTP客户端启动xntpd守护进程

# startsrc -s xntpd

也可通过调用smitty,使xntpd在以后重启服务器时能自动启动(next System Restart)。

# smitty xntpd

(3)、查询xntpd的状态

当 system peer 不为'insane'时,表明客户端已与服务器端成功地进行了同步(通常启动xntpd服务10分钟后)。

# lssrc -ls xntpd

Program name: /usr/sbin/xntpd

Version: 3

Leap indicator: 00 (No leap second today.)

Sys peer: dbs1

……

3、NTP客户端查询NTP服务器

在ntp客户端使用ntpdate命令来确认是否可用指定的ntp服务器进行时间同步。命令的结果会显示客户端与服务器的时间偏移。
#ntpdate -d 10.118.0.3
13 Jun 11:20:01 ntpdate[36094]: adjust time server 10.118.0.3 offset -0.000993 sec
上面例子中的两台服务器时间差了0.000993秒,即0.993 毫秒,这是可以接受的正常偏差。若时间间隔大于1000秒,最好先使用smitty date进行调整。
这种方法在AIX4.3上和AIX5L上均可以实现。

二、HP-UNIX中用ntp实现时间自动同步

与在IBM-AIX中方法类似,用ntp来实现时间同步,由于采用相同的ntp协议来同步时间,因此就直接举个例子说明,只是具体的配置文件与在AIX中不完全相同。

下面是一个具体的配置例子:

两台主机host1(10.118.0.18)和host2(10.118.0.25)作时钟同步,host1为时钟服务器端,host2为客户端。
服务端host1上的操作:
1. 编辑/etc/hosts文件,将host2地址(10.118.0.25)加入
2. 编辑/etc/ntp.conf文件,加入一行
server 10.118.0.18
3. 通过rcmgr命令编辑/etc/rc.config文件
#/usr/sbin/rcmgr set XNTPD_CONF YES
#/usr/sbin/rcmgr set XNTP_SERV1 host1
#/usr/sbin/rcmgr set XNTP_SERV2 host2
#/usr/sbin/rcmgr set XNTPD_OPTS "-gl"
4. 编辑/etc/rc.config.d/netdaemons
更改两个参数的值:
export NTPDATE_SERVER=127.127.1.1 (表示以本机为主服务器)
export XNTPD=1 (1表示启动xntpd;0表示不启动xntpd)
5. 启动xntpd daemon
#/sbin/init.d/xntpd start
如果这个命令无法启动,则使用下列命令
#/sbin/init.d/xntpd -g -c /etc/ntp.conf
6. 确定ntp是否工作
#/usr/bin/ntpq -p

客户端host2上的操作:
1. 编辑/etc/hosts文件,将host1地址(10.118.0.18)加入。
2. 编辑/etc/ntp.conf文件,加入以下内容
server host1 version 3
server host2 version 3
3. 通过rcmgr命令编辑/etc/rc.config文件
#/usr/sbin/rcmgr set XNTPD_CONF YES
#/usr/sbin/rcmgr set XNTP_SERV1 host1
#/usr/sbin/rcmgr set XNTP_SERV2 host2
#/usr/sbin/rcmgr set XNTPD_OPTS "-gl"
4. 编辑/etc/rc.config.d/netdaemons
更改一个参数:
export XNTPD=1
5. 启动xntpd daemon
#/sbin/init.d/xntpd start
如果这个命令无法启动,则使用下列命令
#/sbin/init.d/xntpd -g -c /etc/ntp.conf
6. 确定ntp是否工作
#/usr/bin/ntpq -p
在host2上使用ntp -v host1可查看同步情况。

当然也可以通过Sam来配置, 最后一项 time --> NTP network time source
在启动时间服务器和客户端的xntpd进程以后,需要5-10分钟的时间,才会进行同步。可以使用ntpdate来根据ntp server设置客户端服务器的时间。
如果主服务器和客户机器的时间相差超过1000秒,那么这个时间同步系统会认为服务器出现了系统故障,从而停止同步,需要注意这一点。
可以通过查看/var/adm/syslog/syslog.log文件,查看xntpd的运行状况。

三、Linux中用rdate实现时间自动同步

在各种linux中都有rdate命令,只是一般很少有人使用,我们可以利用rdate命令来同步局域网中的linux服务器时间。首先找一台时间最准确的服务器作为主服务器(master),以它的时间为标准,其他服务器统一以它的时间为准,这样,即使这台主服务器的时间出现偏差,但至少有两个好处,一是对于业务时间是统一的,不会出现前后台不一致的情况;二是对于系统管理员减少了手工调整每台服务器的工作,只要调整一台主服务器即可,并且这样的准确性也比手工调整高。

在主服务器上(10.118.36.3)启动检查时钟的服务:

#chkconfig time on

如果不启动这个服务,在客户端(10.118.36.7)同步时会报如下错误:

#rdate: couldn't connect to host 10.118.36.3: Connection refused

在每台需要同步的服务器上执行:

#rdate –s 10.118.36.3

这样就完成了一次手动的同步,如果想要系统自动去完成,可以把这句命令加入到root 用户的计划任务中,例如:crontab –l

00 07 * * * rdate –s 10.118.36.3

表示每天早晨业务开始前的7点按照10.118.36.3来同步所有服务器时钟。

如果觉得以某台服务器为主服务器不够准确,在网络情况允许的情况下,可以用标准服务器的时间来同步:

#rdate -s time.nist.gov(生产环境中不可能实现也不建议这样)
全世界约有100多个ntp服务器,从下面地址找一个离你最近的
http://www.eecis.udel.edu/~mills/ntp/clock1a.html
我选择了两个
clock.nc.fukuoka-u.ac.jp 133.100.9.2
clock.tl.fukuoka-u.ac.jp 133.100.11.8

综上各种常见系统,系统管理员为了提高系统的准确性,自动同步时间是必要和可行的

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 66 queries in 1.295 seconds