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