chrony时间同步服务


chrony时间同步服务



1.chrony时间同步服务

1.1 chrony介绍

1.1.1 时间同步的意义

时间同步就是通过对本地时钟的某些操作,达到为分布式系统提供一个统一时间的过程。在集中式系统中,由于所有进程都可以从系统唯一的全局时钟获取时间,因此系统内任何两个事件都有着明确的先后关系。而在分布式系统中,由于物理上的分散性,系统无法为彼此间相互独立的模块提供一个统一的全局时钟,而由各个进程各自维护它们的本地时钟。由于这些本地时钟的计时速率运行环境不一致性,因此所有本地时钟在某一时刻都被校准,一段时间后,这些本地时钟也会出现不一致。为了这些本地时钟再次达到相同的时间值,所以需要进行时间同步的操作。

在运维工作的场景当中,存在着众多主机协同完成不同的任务;比如LNMP架构,也是可以分别部署在三台不同的主机上;那么这三台主机在工作时,由于分别位于不同的主机之上,它们需要根据文件或者数据流所生成的时间,来决定我们响应给客户端的结果该如何进行展示;此时就需要同一网络中的主机时间一致。

但这个时间一致并不是说一定得是正确的,如果现在当前时间是下午2点,但是这三台主机的时间精确一致是昨天凌晨5点,这对于有些场景中时间不正确也不行,比如https应用,客户端与服务端通讯时,如果客户端时间是准确的,而服务端时间来自昨天,或者来自未来的响应,则会提示存在风险,而不予接受。

1.1.2 chrony与ntp实现的区别

假如时间慢了20个小时,调整时间有如下两种方式:

  • 类似于手表,转动表针,把时间调整正确;
  • 类似于使用date命令,直接跳跃时间,跳跃的过程中造成部分文件出现空白段;

ntp和chrony实现时间同步的方式:

  • ntp

    类似于手表一样,转动表针快一些,让时间过的快一些,例如正常的1min,ntp会使用10s来完成,通过更快的时间来实现时间的校对,这种方式可能会导致时间同步完成的较慢;

  • chrony

    类似于使用date命令一样,直接改变系统的时间,能更精确的时间和更快的速度同步时钟;

1.1.3 chrony的优势

Chrony是NTP的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。

chrony相比ntp的优势:

  • 更快的同步,只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,这对于并非全天 24 小时运行的台式计算机或系统而言非常有用。
  • 能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。

1.2 chrony的实现

Chrony运行于UDP323端口,ntp运行于UDP123端口,使用chrony服务器可以同时为chrony客户端和ntp客户端提供服务。

Chrony包括两个核心组件:

1、chronyd:一个后台运行的守护进程,用于调整内核中运行的系统时钟与NTP服务器同步。它确定服务器增减时间的比率,并对此进行调整补偿,即是服务器端进程也可以是客户端进程;

2、chronyc:提供用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的服务器上工作,也可以在一台不同的远程服务器上工作。

1.2.1 chrony程序环境

安装chrony软件包

[root@xuzhichao ~]#yum install chrony

chrony包在centos7上默认安装进行时间同步,其对应的文件有:

[root@xuzhichao ~]# rpm -ql chrony
/etc/NetworkManager/dispatcher.d/20-chrony
/etc/chrony.conf                  <==chrony的主配置文件
/etc/chrony.keys
/etc/dhcp/dhclient.d/chrony.sh
/etc/logrotate.d/chrony
/etc/sysconfig/chronyd
/usr/bin/chronyc               <==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.4
/usr/share/doc/chrony-3.4/COPYING
/usr/share/doc/chrony-3.4/FAQ
/usr/share/doc/chrony-3.4/NEWS
/usr/share/doc/chrony-3.4/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   <==日志文件

1.2.2 chrony配置文件

[root@xuzhichao ~]# cat /etc/chrony.conf
# 配置时间服务器,以server开头,理论上添加多少时间服务器都可以。
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server 192.168.170.8 iburst

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整
driftfile /var/lib/chrony/drift

#如果系统时钟的偏移量大于1秒,则允许系统时钟在前三次更新中步进。
makestep 1.0 3

# 将启用一个内核模式,在该模式中,系统时间每1分钟会拷贝到实时时钟(RTC)。
rtcsync

# 指定一台主机、子网,或者网络以允许或拒绝向自己同步时间
#allow 192.168.0.0/16
#deny 192.168/16
allow 192.168.0.0/16  允许该网段客户端来同步时间

# 当chrony服务器提供的时间不可用时,采用本地时间作为同步标准继续作为时间服务器让其他主机来同步时间
local stratum 10

# 指定包含NTP验证密钥的文件
keyfile /etc/chrony.keys

# 指定存放日志文件的目录
logdir /var/log/chrony

#选择日志文件要记录的信息
#log measurements statistics tracking

1.2.3 chrony服务端配置

修改配置文件:

[root@xuzhichao ~]# vim /etc/chrony.conf
server ntp1.aliyun.com iburst
allow 192.168.20.0/24

重启服务:

[root@xuzhichao ~]#systemctl restart chronyd.service

查看服务运行情况:

#查看服务端口
[root@xuzhichao ~]# ss -uan
State      Recv-Q Send-Q   Local Address:Port                  Peer Address:Port              
UNCONN     0      0            127.0.0.1:323                              *:*        <==此为chrony的端口            
UNCONN     0      0                    *:67                               *:*                  
UNCONN     0      0                    *:68                               *:*                  
UNCONN     0      0                    *:68                               *:*                  
UNCONN     0      0                [::1]:323                           [::]:*    

[root@xuzhichao ~]# systemctl status chronyd.service 
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-06-05 21:29:22 EDT; 1 day 12h ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
 Main PID: 674 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─674 /usr/sbin/chronyd

1.2.4 chrony客户端

  • 方式一:使用chrony或ntpdate手动同步时间

    #使用ntp同步
    [root@centos7_6 ~]# yum install ntpdate
    [root@centos7_6 ~]# ntpdate 192.168.20.17
     1 Jan 00:00:10 ntpdate[15550]: step time server 192.168.20.17 offset -46884.601585 sec
    
    #使用chrony同步
    [root@centos7_6 ~]# chronyc -a makestep
    200 OK
    
  • 方式二,修改chrony配置文件,使用chrony守护进程进行自动同步时间

    [root@centos7_6 ~]# vim /etc/chrony.conf
    server 192.168.20.17 iburst
    
    [root@centos7_6 ~]# systemctl restart chronyd.service
    
  • 方式三:打开ntp自动同步

    [root@centos7_6 ~]# timedatectl set-ntp true 
    [root@centos7_6 ~]# timedatectl 
          Local time: Fri 2021-01-01 00:06:49 CST
      Universal time: Thu 2020-12-31 16:06:49 UTC
            RTC time: Thu 2020-12-31 16:06:49
           Time zone: Asia/Shanghai (CST, +0800)
         NTP enabled: yes
    NTP synchronized: yes
     RTC in local TZ: no
          DST active: n/a
    

1.2.5 chronyc查看同步状态

  • 查看ntpserver及同步时间情况chronyc sources -v:

    [root@centos7_6 ~]# chronyc sources
    210 Number of sources = 1
    MS Name/IP address         Stratum Poll Reach LastRx Last sample               
    ===============================================================================
    ^* 192.168.20.17                10   6   377    29   +173us[ +449us] +/-  778us
    
    [root@centos7_6 ~]# 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               
    ===============================================================================
    ^* 192.168.20.17                10   6   177    42   -128us[ -361us] +/- 1295us
    
    #注意:*代表同步状态正常
    
  • 查看时间同步源状态:chronyc sourcestats -v

    [root@centos7_6 ~]# 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
    ==============================================================================
    
    192.168.20.17              16   9   850     +0.001      0.371    +10ns    68us
    
  • chronyc可以进行交互模式

    常用指令说明:

    • help:查看完整的命令帮助列表

    • tracking:显示系统时间信息

    • activity:检查多少NTP源在线/离线

    • add server:手动添加一台新的NTP服务器

    • delete:手动移除NTP服务器或对等服务器

    • clients:在客户端报告已访问到的服务器

    • accheck:在服务端检查NTP服务是否对特定客户端主机可用

    [root@centos7_6 ~]# chronyc 
    chrony version 3.2
    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> help
    System clock:               
    tracking                    Display system time information
    makestep                    Correct clock by stepping immediately
    makestep <threshold> <updates>
    .....
    


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM