【51CTO 专稿】我单位网络属于中等规模网络,随着信息系统的不断升级和新系统的投入应用,一段时间以来各应用系统之间的时间不统一问题严重的影响到了我单位上端应用系统的正常应用。尤其是那些对系统时间要求严格的应用,更是因为计算机彼此的时间问题,导致应用系统频繁报错或者出现莫名其妙的数据库连接失败等严重故障。加上网络中各路由器及其它应用系统的前端设备时间不统一,给现场生产系统操作及维护人员带来很多不必要的麻烦。更严重的时候因为前端应用面向的是客户,遭致客户投诉也就再所难免。为此,我们结合生产环境需求采用了分布式方式部署了一套NTP校时应用方案,较好的解决了各分散应用系统存在的系统时差带来的问题,现将整体方案及部署细节进行总结,希望给广大系统维护人员以帮助和启发。
需求分析
我们的前期网络中各应用系统部署时间不同,但随着需求的更新发展,应用系统间又需要进行数据库或者其他数据流的相互共享及操作,并且部分应用系统又需要分别以不同的方式向客户提供同一源数据。有些数据还需要向客户显示当时的真实记录时间。缺少统一时间导致同一源数据在不同系统中时间记录各异,非常容易导致源数据混乱,并出现数据库访问故障(这些问题其实已经存在,并给客户造成了混乱)。而我们的中型规模网络(网络子网数在100左右)如果采取集中授时的方式,所有节点通过单一授时服务器进行时钟同步服务,必然给整个网络带来流量增加及授时服务器负载过大的风险。为此我们只允许网络中子网路由器的时钟同步可以与NTP授时服务核心层中的服务器进行。
子网路由器下端用户的时钟同步则直接由本地子网路由器负责。这种分布式部署可以最大限度的减少整个网络的数据流量,同时也更大限度的减轻了NTP授时核心服务器的负载压力。从安全角度看,目前市场出售的通过GPS进行取时的硬件设备尽管可以通过网络接口直接进行时钟同步服务,但其未能通过防火墙设备和企业私有网络进行很好的隔离,存在一定的通过GPS设备使信息外泻的安全风险。而如果我们采用分布式分层结构的NTP授时部署方案,则可以非常好的规避以上存在的问题。在NTP授时服务的核心层设计中为了满足NTP授时服务的7X24小时的有效要求。我们采用了双NTP授时服务器交叉部署的方式来满足以上应用的要求。拓扑图如下:
实施细节
一、 NTP授时服务核心层规划及应用服务器参数配置
在该核心层中我们分别使用两台GPS取时设备与两台安装Linux操作系统的授时服务器通过以太网方式相连,并且分别将两个相连设备IP地址设置在只包含两个有效IP地址的子网内,列如:GPS时钟源1的IP地址可以设置为:192.168.*.1,地址掩码:255.255.255.252。那么授时服务器NtpServer1的IP地址应为:192.168.*.2, 地址掩码:255.255.255.252。这样以上两台设备进行通讯看起来非常类似于点到点的数据交互。同时我们可以在Linux操作系统中使用iptables防火墙设置规则只允许时钟同步数据进行通讯,这样可以非常好的将GPS取时设备与企业私有网络进行较高安全级别的隔离,有效的规避GPS设备外泻信息的安全风险。
NTP授时服务器组建安装及参数配置以如下:
1、组建安装,因为我们使用的是REDHAT公司的RHEL5.5,因此组建安装可是使用如下命令进行,命令模式如下:
- [root@localhost~]# yum install ntpd
执行该命令后,系统会自动安装NTP时钟同步相关的依赖包及默认配置参数等文件。
2、参数配置,使用vi /etc/ntp.conf对该文件进行修改,命令模式如下:
- [root@localhost~]# vi /etc/ntp.conf
之后在该文件中添加如下内容:
- server 192.168.*.1
- restrict 192.168.*.1 mask 255.255.255.255 nomodify notrap noquery
其中server 192.168.*.1的作用就是指定上端授时服务器地址,因为我们已经将该服务器连接的GPS取时设备地址修改为以上地址,因此管理员需要根据自己的实际情况进行修改。后一行参数的目的是让授时服务器根据上端GPS取时设备的时间来对自己的系统时间进行同步。之后管理员需要找到配置文件中如下两行:
- #server 127.127.1.0 # local clock
- #fudge 127.127.1.0 stratum 10
并将之前的"#"号注释去掉,以启用该两行参数,其中行fudge 127.127.1.0 stratum 10的内容可以定义该服务器在NTP时钟校对中错处的层次,该参数在windows系统时钟同步报"时间例子被拒绝,因为:对等机器的层次(stratum)比主机层次少。"错误时可以将stratum 10中的数值改大,应该就可以消除该错误。修改完成后可是使用如下命令模式启用时钟同步服务,命令模式如下:
- [root@localhost~]# /etc/init.d/ntpd restart
等待2-5分钟后使用如下命令模式查看时钟同步服务状态,命令模式如下:
- [root@localhost~]# ntpq -p
系统返回包含如下输出信息时说明时钟同步服务已经正常启动,返回信息如下:
- *192.168.*.1 .GPS. 1 u 6 64 177 1.917 -1000.1 0.292
- LOCAL(0) .LOCL. 10 l 11 64 177 0.000 0.000 0.001
之后使用如下命令模式将时钟同步服务修改为开机启用模式,命令模式如下:
- [root@localhost~]# chkconfig ntpd on
以上配置我们以NtpServer1配置为例,NtpServer2的配置管理员只须根据实际情况将上端授时服务器地址修改为NtpServer2所连接的GPS取时设备地址即可。通过网络拓扑图我们可以看到,两台授时服务器实际上还分别接入了不同的子网,那么我们还需要在各自的网络接口上为其配置相应的IP地址。以便未来下端路由器可以通过该授时服务器进行时钟同步。在Linux下的IP地址配置不在详述,读者可以查阅相关资料来根据自己的网络地址规划进行自行设置。为了举例说明我们假设NtpServer1在A网络中的地址为10.109.1.3,在B网络中的地址为196.0.0.3;而NtpServer2在A网络中的地址为10.109.1.4,在B网络中的地址为196.0.0.4。到此我们的授时方案中的核心层基本部署完成。
二、 NTP授时服务分布层的规划及参数配置
在NTP授时分布层我们主要是利用了相应网络中子网路由器的时钟同步功能,配置相应NTP应用服务参数,让路由器对上向NTP授时服务核心层配置的NtpServer服务器请求时钟同步,同时这些路由器也将负责本地节点的时钟同步请求服务。这样可以避免局部网络故障导致的全局性问题,并且减少了网络的全局数据流量。有效了规避了集中部署可能带来的数据流量压力。我们主要应用的路由器产品是CISCO系列路由设备以及H3C系列路由产品。尽管它们都提供了NTP时钟同步服务的支持功能,但配置参数略有不同。
NTP授时服务分布层的参数配置如下:
1、CISCO系列产品配置方法包括以下命令,首先登录到路由器中使用如下命令进入全局模式,命令模式如下:
- Route#conf t
之后如果CISCO路由器型号低于2811C则在提示符下依次输入以下两条命令,命令模式如下:
- Route(config)#ntp server 10.109.1.3
- Route(config)#ntp server 10.109.1.4
对型号高于2811C的路由器则在命令提示符下输入依次输入以下三条命令,命令模式如下:
- Route(config)#ntp update-calendar
- Route(config)#ntp server 10.109.1.3 version 3 burst iburst
- Route(config)#ntp server 10.109.1.4 version 3 burst iburst
其中以上两个IP地址就是为NtpServer分配的相关网络对应的子网IP地址。管理员可根据自己的实际情况进行设置。配置好后可退出全局模式,等待一段时间之后输入如下命令,命令模式如下:
- Route#show ntp associations
如果系统返回信息包含以下内容:
- *~10.109.1.3 83.84.69.80 16 33 64 374 6.743 -19.450 3.292
- * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
则说明NTP时钟同步已经正常运行。
2、H3C系列产品配置方法包括以下命令,首先登录到路由器中使用如下命令进入全局模式,命令模式如下:
- <Route>system-view
之后在提示符下依次输入以下两条命令,命令模式如下:
- [Route]ntp-service unicast-server 196.0.0.3
- [Route]ntp-service unicast-server 196.0.0.4
等待一段时间之后输入如下命令,命令模式如下:
- [Route]dis ntp-service sessions
如果系统返回信息包含以下内容:
- [12345]196.0.0.3 10.109.30.210 2 255 64 43 -2.1 4.0 0.9
- note: 1 source(master),2 source(peer),3 selected,4 candidate,5 configured
则说明NTP时钟同步已经正常运行。
需要特别说明的是,在路由器上进行NTP时钟同步设置前,管理员需要首先将路由器时间修改为当前时间,如果路由器时间与NtpServer服务器时间相差太大,那么NTP同步将会失败。
三、客户端用户主机配置
客户端的NTP服务需要在用户终端机器上进行,目前应用服务器及日常桌面系统包括Linux及WINDOWS操作系统,下面就分别就两个操作系统下的NTP服务器设置进行讲述。
1、windows下的NTP时钟同步设置
在windows下设置NTP时钟同步,用户可以直接选择控制面板中管理工具下的服务并点击进入,并找到Windows Time维护在网络上的所有客户端和服务器的时间和日期同步,将启动类别选择为"自动",并点击启动按扭。如图:
之后可以双击任务栏中的系统时间,并在其界面上选择internet时间,在服务器输入拦内输入本地已经配置过NTP时间同步的路由器地址,如图:
有时在Windows下进行时钟同步,系统会报"在获取最近一次同步状态时出错。RPC服务器不可用"错误。这时用户可以直接使用命令regsvr32对W32time服务进行重新注册。命令模式如下:
- C:\>regsvr32 /u w32time
- C:\ >regsvr32 w32time
在windows系统中,系统的默认时钟同步间隔时间为7天,如果系统对实时性要求较高,那么管理员可以通过修改注册表来缩短校时间隔已提高系统内各计算机节点的时间准确度,展开注册表中HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->W32Time->TimeProviders->NtpClient分支,并双击SpecialPollInterval键值,将对话框中的"基数栏"选择到"十进制"上,输入框中显示的数字正是自动对时的间隔(以秒为单位),比如默认的604800就是由7(天)×24(时)×60(分)×60(秒)计算来的。设定时间同步周期为一天,即24小时(86400秒),填入对话框,选十进制就填86400,选十六进制就填15180,点击确定保存关闭对话框。管理员可以根据自己的需求进行计算后修改。
2、linux下的NTP时钟同步设置
目前多数Linux下默认采用GNOME桌面,点击时间设置中的网络时间时需要安装NTPD服务器才能让这个网络时间按钮成为开启状态,之后就可以直接想WINDOWS那样直接输入本地已经配置过NTP时间同步的路由器地址就可以进行时钟同步服务了。而目前代表未来技术发展方向的更新的Linux发行版如Fedora20中的网络时间同步软件默认安装的是Chronyd时钟同步服务,其实你在GNOME下开不开那个网络时间的按钮。网络时间同步都在进行中。Chronyd的配置文件位于/etc/chrony.conf 。在该文件中相应段内添加本地已经配置过NTP时间同步的路由器地址,重起服务后系统将自动进行时钟同步服务。Chronyd的管理命令如下:
- chronyc sources
- chronyc sourcestats
- chronyc sources
- chronyc tracking
后记
在一个网络中,计算机节点的系统时间同步问题已经逐步的成为了网络规划及设计实施的基础性功能问题之一,尤其是大中型网络更是如此。一个良好的网络校时方案的部署将很好的为用户及应用系统提供时间层面的统一。我们在NTP授时服务核心层规划中采用了GPS授时设备及核心层NtpServer双机的模式,这样可以最大限度的保证核心层的强壮性,同时在整个应用部署中又利用原有路由设备将其规划为针对用户节点视角的分布式结构,这样又可以有效的减小整个网络的数据流量,同时也更大限度的减轻了NTP授时核心服务器的负载压力。该方案已经可以非常好的满足粒度不小于分钟级的时钟同步需求。而要满足分钟级以下的时钟同步需求,我们则需要采用REDHAT公司制定的精密时间协议PTP因为它可确保对跨网络分布式时钟精确到亚微秒的同步。
【作者信息】
作者:解宝琦 荆斌
单位:陕西安康市安康车务段信息技术科
邮编:725000