NTP服务器搭建

    1、NTP(Network Time Protocol)    

    在计算机世界中,NTP(Network Time Protocol,网络时间协议)被广泛用于对时间的统一性和准确性要求非常高的场景,是用来使网络中的各个计算机时间同步的一种协议。它可以把计算机时钟同步到世界协调时UTC(Universal Time Coordinated,世界协调时)。UTC是由原子钟报时的国际标准时间,而NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可从internet上面获取。在NTP协议中,定义了时间按照服务器等级传播,依据离外部UTC源的远近,将所有服务器归入不同的stratum(层)中,直接从时间源如GPRS(Global Positioning System,全球定位系统)获得时间的服务器称之为stratum-1,而后依次序递归传播给下层服务器stratum-2、stratum-3…,层的总数限制在15以内。此阶梯结构示意图如下:

    d0c8a786c9177f3e95090eb873cf3bc79f3d5642.jpg

    2、linux时间相关

    2.1、时区

    现实生活中时间以时区的方式定义,地球绕太阳旋转的24小时中,世界各地的不同时间由UTC+地区所属时区决定,全球划分为24个不同的时区。比如中国标准时间晚上8点半,可以有以下两种表示方式:

    20:00 CST(Chinese Standard Time,中国标准时间)

    12:00 UTC(Universal Time Coordinated,世界协调时)

    2.1.1、Linux中设置时区

    linux中的glibc已提供许多编译好的时区文件,存放于/usr/share/zoneinfo中,包含大多数国家和城市的时区

    blob.png

    可以使用zdump命令查询对应时区的当前时间,例如香港时间:

    blob.png

    修改linux系统时区有多种方式,本文介绍两种:

    第一种方法,修改/etc/localtime文件,这个文件定义了当前系统所在的local time zone,将/usr/share/zoneinfo中的time zone文件符号链接至该文件即可。

    查看当前时区

    blob.png

    修改时区为Shanghai

    blob.png

    实际上,更改时区的同时,时间也会跟随调整。

    第二种方法,使用tzselect命令修改TZ变量的值,注意这种方法所做更改会覆盖localtime中的时区设定,如果要使更改长期有效,刻意将TZ变量的设置写入到/etc/profile中。

    将时区更改为上海时区

    blob.png

    blob.png

    2.2、时间设置

    linux系统环境中,值得注意的是,一台计算机上我们有两个时钟:硬件时钟 RTC,(Real Time Clock)和系统时钟(System Clock)。硬件时钟是指镶嵌在主板上的特殊电路,它可以使计算机关机之后仍然计算时间;系统时钟是操作系统kernel用来计算时间的时钟,其值是由1970年1月1日00:00:00 UTC时间至当前时间所经历的秒数总和。系统在开机时,会自动将系统时间同步为硬件时钟时间,而后各自独立运行,长时间运行两者将会产生误差。

    查看并对比当前系统硬件时间和系统时间

    blob.png

    可以看到,两者已经有误差了,实现两者同步,可以采用以下命令

    将硬件时间设置为系统时间

    blob.png

    将系统时间设置为硬件时间

    blob.png

    如果想设置硬件时间,可以在开机时在BIOS里面设定,或者同过hwclock命令设定

    # hwclock –set –date="mm/dd/yy hh:mm:ss"

    如果想设置系统时间,可以使用date命令来设置

    # hwclock -s "dd/mm/yyyy hh:mm:ss"

    虽然我们可以通过上述内容来调整时间,但是如果硬件时间和系统时间都不准确的话,我们就需要通过NTP协议来向时间源服务器来同步时间了。

    3、配置NTP服务器

    3.1、安装NTP

    安装ntp服务器搭建程序,可以使用rpm包安装或者yum工具自动安装,本文使用yum安装

    blob.png

    blob.png

    可以看到ntpdate程序也被依赖安装完毕

    blob.png

    确认已安装

    3.2、手动同步NTP服务器时间

    在NTP服务器上使用ntpdate手动向上层NTP服务器同步时间,以保证服务器自身时间

    选择下面两个NTP服务器为其同步时间

    asia.pool.ntp.org

    0.asia.pool.ntp.org

    1.asia.pool.ntp.org

    blob.png

    注意,配置NTP服务器之前,手动同步时间是很有必要的,原因如下:

    1、根据NTP的设置,如果服务器时间比准确时间要快的话,NTP协议不回自动为其调整。

    2、如果服务器当前时间与准确时间相差甚大,NTP将会花较长一段时间来进行调整,手动调整可以节省时间

    3.3、配置运行NTP Server

    本文演示配置的NTP Server,应用于局域网中,为局域网中的成员提供NTP事件源服务器,实际上,无论我们的计算机配置多好,运行时间长了都会出现时间误差,不足以给互联网上的其它服务器做NTP Server,因此我们自己假设的服务器只能称之为NTP Delay Server,它从上层获取相对准确的时间,而后为内部成功提供时间同步源。、

    3.3.1配置文件修改

    修改配置文件/etc/ntp.conf,定义NTP Server和权限设定

     一、driftfile 默认存放于/var/lib/ntp/drift中 driftfile:由于system clock频率都略有误差,因此机器运行一段时间后,时间会不精确,NTP会自动检测误差值并予以调整,这个冗长的过程会被记录到driftfile中,用以保证开机后之前的计算结果也不会丢失。

    注2-注5:

    NTP安全设置,而安全的设定分两个方面:

    一个方面:允许哪些客户段连接到服务器来同步时间;

    第二个方面:连过来的客户端不能修改我们服务器上的时间。

    权限的设定以restrict来设定,语法如下:

    restrict IP地址 mask 子网掩码 参数

    其中,IP可以是IP地址,也可以是default,default指所有IP

    参数解释如下:

    ignore:关闭所有NTP联机服务

    nomodify:客户端不能更改服务器端的时间参数,但是可以通过服务端进行网络校时。

    notrust:客户端除非通过认证,否则客户端来源将视为不信任子网

    noquery:不提供客户端的时间查询

    注意:如果参数没有设定,就表示该IP(或子网)没有任何限制

    配置如下:

    首先,默认客户端拒绝所有操作

    blob.png

    允许本机的任何操作

    blob.png

    允许局域网内的客户端同步时间,不允许更改服务器时间

    blob.png

    添加如下配置,确保internet断开时,客户端仍可以从该NTP服务器同步时间

    blob.png

    注6:上层NTP Server,NTP服务器将会尝试向此组服务器请求同步时间,参数prefer,表示优先选择该服务器为其上层NTP服务器。

    blob.png

    配置文件修改完成后,启动ntpd,服务,设置为开机启动

    blob.png

    启动ntpd服务后,需等待几分钟到十几分钟的时间后,就可以实现时间同步了。

    3.3.2、查看NTP服务运行情况

    ntpstat命令查看同步状态信息

    blob.png

    上图所示,第一行,此NTP服务器的上层服务器地址59.149.185.193,上层服务器是stratum-2层服务器;第二行,为校正时间差;第三行,每过128s执行时间同步。

    使用ntpq -p查询NTP Server状态

    blob.png

    上图所示,解释如下   

    remote: 它指的就是本地机器所连接的远程NTP服务器

    refid: 它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器

    st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.

    when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步

    poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小

    reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加

    delay: 从本地机发送同步要求到服务器的round trip time

    offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近

    jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确

    每一行前面的特殊符号含义:

    * 它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供

    + 它将作为辅助的NTP Server和带有*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管

    - 远程服务器被clustering algorithm认为是不合格的NTP Server

    x 远程服务器不可用

    3.3.3、配置NTP Client端

    一、linux作为客户端自动同步时间

    结合crond实现自动时间同步

    # crontab -e

    blob.png

    # service crond restart

    上面的设置,定义每天8:30同步时间

    二、Windows作为客户端同步时间

    1、打开windows time和RPC两个服务

    2、如果打开windows time出现1058错误,则执行如下操作

        1、运行cmd进入命令行界面,键入w32tm /register 进行注册

        正确的响应:W32Time成功注册

    3、上一步成功完成后,执行net start "windows time"或net start w32time 启动服务。

    3.3.4、无法成功同步时间的原因

    1、客户端的日期必须设置正确,不能超出正常时间24小时;确保客户端时区设置正确,不回更新成其它时区时间。

    2、fudge 127.127.1.0 stratum 10 如果是linux作为NTP服务器,stratum(层级)不能太大

    3、linux的NTP服务器必须能够正常将从上层服务器获得的时间从系统时间写入到硬件时钟,确保下面的参数的

值为yes

    默认NTP只会同步system clock.如果需要同步硬件时钟的话,需要做如下操作。

    blob.png

    blob.png



原创文章,作者:Silently,如若转载,请注明出处:http://www.178linux.com/9320

评论列表(2条)

  • stanley
    stanley 2015-11-18 11:08

    已置顶! 整齐简洁吸睛,内容丰满干货

  • jemmy
    jemmy 2015-11-19 15:02

    不错,学习了,秒赞一个!

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code