Linux学习101 Linux时间服务-chrony时间全面介绍

一、时间同步

  1、我们系统启动的时候会将硬件的时钟读取至内核。硬件时钟和系统时钟都在分开运行。特别是在虚拟机上这两种时间很不好保持一致。

  2、NTP:Network Time Protocol:网络时间协议

    a、ntp,yum info ntp

  3、ntp主机既可以用作为客户端又可以用作为服务端来使用,即便我们是ntp的客户端我们也应该启用ntp的守护进程,因为他要不停的去连到服务器上从服务器获取时间到本地。不过他自己本地的时间不需要也不允许别人将自己当做时间服务器,不过如果我们将其时间服务授时功能给其开起来那么其就即是客户端又是服务端了,他们靠同一个程序来提供。

  4、我们来实验一下

    a、首先我们安装ntp包

      yum install -y ntp

    b、然后我们来查看配置文件/etc/ntp.conf

[root@node3 /]# cat /etc/ntp.conf |grep -Ev "^#|^$"
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1 #允许谁来我们这儿同步时间,默认获取到上游时间后不允许其他人和自己同步的,因此就是回环地址,此处我们只需要开启说允许谁来时间同步就意味着我们是一个时间服务器了。
restrict ::1
server 0.centos.pool.ntp.org iburst #把谁当做时间服务器,这四台是互连网上的时间服务器。
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor

    c、修改上述对应的参数后重启服务就可以将我们的服务器作为相应的客户端或服务端。

  5、我们来讲一讲时间同步是怎么完成的,比如我们服务器启动起来发现时间是错的,比别人慢了24小时,那么他怎么能确保把时间调准确呢?什么叫把时间调正确呢?就好比我们拿着自己的表一样,发现时间错了,基于这个调时间的方式调到正确的轴上就可以了。那么我们的时间是跳过来的还是你自己划过来的呢?即假如我们自己的表慢了两小时,我们是直接把表针搬到正确的位置还是说我们慢慢转到正确的位置呢?肯定是转过来的,即我们调的时候他只是走的快一些然后追上正确的时间位置,却不会直接跳跃到正确的时间位置我们服务器date命令调时间就相当于是一下蹦过来的。

    a、我们服务器上如果让时间直接跳过来的话我们服务器上有些文件对应的时间是空白的。这是不应该发生的事情。因此我们基于ntp调时间是通过我们将表针播快一点来实现而不是直接越过时间来实现。怎么播呢?即别人一分钟是60秒你一分钟是30秒,这样你就可以走的很快了。对于我们的ntp来说,他不可能一分钟之内把时间播快24小时,很有可能我们同步时间需要几小时或者几天才能成功。所以ntp这个时间服务器人们发现还是有一些问题。因此在CentOS7上我们就使用了chrony。

  6、chrony中我们同步时间只需要几秒钟或者几分钟就能完成,而我们的ntp有时候需要几个小时或几天才能完成。因此我们chrony拨针的方式可以走的非常快。并且中间不会出现空白期间。即跨越互联网的时间同步几毫米就能完成,如果在局域网内几十微妙内都能完成,因此现在我们基本都使用chrony来提供时间服务,并且其还兼容ntp,我们有123和323两个端口,123是传统的ntp所监听的端口,而323是chrony所监听的端口,因此我们启动chrony以后你使用ntp或者chrony当客户端都可以,所以我们CentOS7启动一个chrony时间服务我们在CentOS6上把时间服务器指向CentOS7上的chrony也是可以的,同样的我们CentOS7把chrony作为客户端指向我们的chrony服务端也是可以的。

     

  7、我们来进行试验

    a、我们安装chrony

      yum install -y chrony

    b、我们来看我们生成的文件 

[root@node3 /]# rpm -ql chrony
/etc/NetworkManager/dispatcher.d/20-chrony
/etc/chrony.conf #主配置文件
/etc/chrony.keys
/etc/dhcp/dhclient.d/chrony.sh
/etc/logrotate.d/chrony
/etc/sysconfig/chronyd
/usr/bin/chronyc #交互式测试程序
/usr/lib/systemd/ntp-units.d/50-chronyd.list
/usr/lib/systemd/system/chrony-dnssrv@.service
/usr/lib/systemd/system/chrony-dnssrv@.timer
/usr/lib/systemd/system/chrony-wait.service
/usr/lib/systemd/system/chronyd.service
/usr/libexec/chrony-helper
/usr/sbin/chronyd #服务端和客户端进程,两个用的都是他
/usr/share/doc/chrony-3.1
/usr/share/doc/chrony-3.1/COPYING
/usr/share/doc/chrony-3.1/FAQ
/usr/share/doc/chrony-3.1/NEWS
/usr/share/doc/chrony-3.1/README
/usr/share/man/man1/chronyc.1.gz
/usr/share/man/man5/chrony.conf.5.gz
/usr/share/man/man8/chronyd.8.gz
/var/lib/chrony
/var/lib/chrony/drift
/var/lib/chrony/rtc
/var/log/chrony

    c、我们来时间配置

      (1)、配置客户端

        1)、作为客户端的话配置如下即可

[root@node3 /]# cat /etc/chrony.conf |grep -Ev "^#|^$"
server 0.centos.pool.ntp.org iburst #指向的时间服务器
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

        2)、如果我们添加相应的需要同步的时间服务器然后启动服务即可进行时间同步

          systemctl start chronyd.service

      (2)、作为服务端的话配置如下

        1)、配置

[root@node3 /]# cat /etc/chrony.conf |grep -Ev "^#|^$"
server 0.centos.pool.ntp.org iburst #指向的时间服务器
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.10.0/24 #允许哪些客户端来向本机同步时间
logdir /var/log/chrony

        2)、但是我们这儿会有一个问题,即如果我们的服务器连不到互联网上的话要怎么办呢?或者说我们自己的服务器连不上我们配置的时间服务器他就没法确定自己的时间是不是准确的了,他如果无法确定自己的时间是否准确那么别人来同步的时候他就会把错误的时间同步给别人了。因此我们可以配置如果我们同步不到上游时间服务器的时间就拒绝把自己的时间同步给下游的时间服务器,我们chrony默认就是这样的配置。而如果我们要配置允许接收不精确时间,表示即使自己的时间没能同任何ntpserver做时间同步也照样给我们的时间客户端提供服务,此时我们需要启动local stratum 10这一项配置。

[root@node3 ~]# cat /etc/chrony.conf |grep -Ev "^#|^$"
server 0.centos.pool.ntp.org iburst #指向的时间服务器
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.10.0/24 #允许哪些客户端来向本机同步时间
local stratum 10 #允许接收不精确时间,表示即使自己的时间没能同任何ntpserver做时间同步也照样给我们的时间客户端提供服务。
logdir /var/log/chrony

        3)、然后我们重启服务即可

        systemctl restart chronyd

    d、相应同步操作

      (1)、ntp方式。我们在上面启动的服务在192.18.10.15上,现在我们在192.168.10.14上去同步时间发现可以同步成功。

        1)、同步

[root@node2 ~]# ntpdate 192.168.10.15
 8 Jun 13:37:41 ntpdate[1279]: step time server 192.168.10.15 offset -28802.972077 sec

        2)、不过我们这种是强行调试的方式,即中间会有时间空百,因此我们建议在192.168.10.14中修改/etc/ntp.conf中将server指向我们的时间服务器192.168.10.15

[root@node2 ~]# cat /etc/ntp.conf |grep -Ev "^#|^$"
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1 
restrict ::1
server 192.168.10.15 iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor

        3)、然后在本地启动我们192.168.10.14上的ntpd时间服务即可,注意,他只是客户端。

          systemctl start ntpd

      (2)、chrony方式

        1)、首先我们在192.168.10.14的/etc/chrony.conf中添加相应的时间服务器192.168.10.15然后启动服务

[root@node2 ~]# cat /etc/chrony.conf |grep -Ev "^$|^#"
server 192.168.10.15 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
[root@node2 ~]# systemctl restart chronyd

        2)、然后我们设置开机自启动即可

          systemctl enable chronyd

    e、我们查看时间同步状态,可以通过chronyc命令来查看

      (1)、chronyc命令交互式模式

[root@node2 ~]# chronyc 
chrony version 3.1
Copyright (C) 1997-2003, 2007, 2009-2017 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY.  This is free software, and
you are welcome to redistribute it under certain conditions.  See the
GNU General Public License version 2 for details.

chronyc> sources #连到哪个时间服务器的,当前时间怎么同步的
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* node3.wohaoshuai.com          3   6    37    53   -536us[-5144us] +/-   42ms
chronyc> sourcestats #看看我们时间有没有完成同步还差多少时间,时间片等
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
node3.wohaoshuai.com        5   3    70    -13.749    226.550   -832us   109us
chronyc> 

      (2)、也可以在非交互模式下使用

        1)、chronyc sources

[root@node2 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* node3.wohaoshuai.com          3   6   377    45   -129us[ -228us] +/-   38ms
[root@node2 ~]# chronyc sources -v #更详细的显示
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* node3.wohaoshuai.com          3   6   377    48   -129us[ -228us] +/-   38ms

          MS Name/IP address         Stratum Poll Reach LastRx Last sample意思为

          M表示module,^表示通过server获取时间, =表示对等时间,#表示通过本地获取时间,因为我们是通过192.168.10.15服务器时间因此为^。

          S表示当前时间状态:*表示已经完成同步了,+表示已经合并了,-表示还没有合并。

          Poll:表示我们完成了几次轮询

          Reach :表示我们向服务器注册了几次,即连了多少次服务器了

        2)、chronyc sourcestats

[root@node2 ~]# chronyc sourcestats
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
node3.wohaoshuai.com        6   3   322     -0.002      0.414     -4ns    13us
[root@node2 ~]# chronyc sourcestats -v
210 Number of sources = 1
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
node3.wohaoshuai.com        6   3   322     -0.002      0.414     -8ns    13us

二、总结

  1、程序环境

    a、配置文件:/etc/chrony.conf

    b、主程序文件:chronyd

    c、工具程序:chronyc

    d、unit file:chronyd.service

  2、配置文件:chrony.conf

    a、server:指明时间服务器地址

    b、allow NETADD/NETMASK

      allow all:允许所有客户端主机

    c、deny NETADDR/NETMASK

      deny all:拒绝所有客户端

    d、bindcmdaddress:命令管理接口监听的地址

    e、local stratum 10:即使自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授时给其它客户端

 

posted @ 2020-06-08 10:50  Presley  阅读(1189)  评论(0编辑  收藏  举报