一、NTP 是什么?

NTP ( Network Time Protocol,网络时间协议)是用来使计算机时间同步化的一种协议。它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶意的协议攻击。

模式采用c/s模式

31180054_630f3156bb78398072.webpntp的查找/安装

检查是否安装了ntp相关包。如果没有安装ntp相关包,使用rpm或yum安装,安装也非常简单方便

rpm -qa|grep ntp

ntp安装

yum install -y ntp

1679470123707.jpg一般情况下,NTP服务包括三个rpm包:

1: autogen-libopts-5.18-5.el7.x86_64.rpm

2: ntpdate-4.2.6p5-28.el7.centos.x86_64.rpm

3: ntp-4.2.6p5-28.el7.centos.x86_64.rpm

注:版本号会根据源服务端包的实际版本变化,以服务端版本为准。

在开始安装NTP服务前,建议最好先查看下本机系统的时区信息,并且保证所有关联的设备时区信息保持一致。

在Centos7下使用timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。具体的可查阅timedatectl文档。

    #查看当前系统时区及其它关联信息

    [root@localhost ~]# timedatectl status

          Local time: 二 2019-01-22 17:11:33 CST

      Universal time: 二 2019-01-22 09:11:33 UTC

            RTC time: 二 2019-01-22 09:11:33

           Time zone: Asia/Shanghai (CST, +0800)

         NTP enabled: yes/no

    NTP synchronized: yes/no

     RTC in local TZ: no

          DST active: n/a

其中Time zone即为时区数据。

NTP服务的安装其实非常简单,使用yum指令进行安装即可。

    #通过yum安装NTP服务

    [root@localhost ~]# yum install -y ntp

在配置及启动服务前,建议先对本机进行校时。这里采用的是阿里的NTP服务器,毕竟阿里的还是比较稳定。

    [root@localhost ~]# ntpdate ntp1.aliyun.com

    22 Jan 16:38:28 ntpdate[2938]: adjust time server 120.25.115.20 offset 0.243404 sec

内部网络在没有时同设备的情况下,需要指定一台NTP服务器与外网授时中心连接,进行时间同步。其它NTP客户端将服务端指向到这台内部NTP服务进行时间同步。

四、内部NTP服务端的配置

NTP安装完成后,首先需要查看NTP安装在哪里。根据查询,大部分时候,NTP都默认安装在/etc目录下。

    [root@localhost ~]# whereis ntp

    ntp: /etc/ntp /etc/ntp.conf

NTP的配置文件默认是ntp.conf,文件存储目录在/etc目录下,没有在/etc/ntp目录里。

该配置文件主要需要注意的是两个参数:restrict 和server

restrict 主要用于配置访问权限,即哪些IP可以访问本机NTP服务,server主要用于配置本机访问的上层NTP服务器IP。

上层NTP服务配置

要设定上层NTP服务器主要以 server 这个参数来设定,语法为:

        # server [IP|HOST Name] [prefer]

        # server 参数后面的 perfer,表示主要以该IP来作为时间校正。

        # 为了解决更新时间封包的传送延迟动作,可以使用 driftfile 来定义当前NTP服务主机在与外部NTP服务校时所花费的时间

        # 而与外部通信的信息记录在 driftfile 后面接的文件内

        # 例如下面的范例中,内部NTP服务与外部NTP服务联机时所花费的时间会记录在 /etc/ntp/drift文件内

        server ntp1.aliyun.com

        server ntp2.aliyun.com

        server cn.pool.ntp.org prefer

    driftfile /etc/ntp/drift

   末尾参数说明:

       perfer:表示优先级最高,主要以该IP来作为时间校正。

       burst :当一个运程NTP服务器可用时,向它发送一系列的并发包进行检测。

       iburst :当一个运程NTP服务器不可用时,向它发送一系列的并发包进行检测。

其他设置值,以系统默认值即可。

五、NTP客户端的配置

首先确定客户端已经正确安装NTP服务(如上第三节 NTP服务的部署)。

然后,我们开始对客户端进行配置。客户端的配置很简单,也是对/etc/ntp.conf文件进行编辑,主要修改server参数,将server指定为内部NTP服务端的IP即可。

如果在同步时,提示异常,可先检查服务端防火墙是否开放了相应端口。

    [root@localhost ~]# ntpdate 192.168.61.188

    23 Jan 15:16:31 ntpdate[16810]: no server suitable for synchronization found

六、NTP基本操作指令

    #启动NTP服务

    systemctl start ntpd

    #开机自启

    [root@localhost ~]# systemctl enable ntpd

    Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

    #查看NTP服务是否已正常占用指定端口

    netstat -ln|grep 123

    #验证NTP同步上层NTP服务状态

    ntpq –p

特别提醒:在启动NTP服务前,先对提供服务的这台主机手动的校正一次时间。如前所述,如果NTP发现时间差不多,不会更新本地时间,可能导致时间有误差,对于时间一致要求非常高的应用场景非常不利。

如何确认我们的NTP服务器已经更新了自己的时间呢?

    #没有启动NTP或NTP配置异常时   

    [root@localhost ~]# ntpstat

    Unable to talk to NTP daemon. Is it running?

    #使用ntpstat来查看同步状态

    [root@localhost etc]# ntpstat

    synchronised to NTP server (120.25.115.20) at stratum 3

       time correct to within 37 ms

       polling server every 256 s

    [root@localhost ~]# timedatectl status

          Local time: 二 2019-01-22 17:11:33 CST

      Universal time: 二 2019-01-22 09:11:33 UTC

            RTC time: 二 2019-01-22 09:11:33

           Time zone: Asia/Shanghai (CST, +0800)

         NTP enabled: yes/no

    NTP synchronized: yes/no

     RTC in local TZ: no

          DST active: n/a

查看系统时间状态时,其中NTP enabled参数的控制指令为:

    timedatectl set-ntp yes/no

在没开启NTP enabled情况下,NTP synchronized参数一般为no,表示还没有进行过时间同步,在时间同步后会由no变为yes。当然,如果使用过ntpdate手工同步过,该参数也会是yes状态。

    #如果时区不对,还需要使用timedatectl设置时区

    timedatectl set-timezone Asia/Shanghai