伺服器時間同步架構與實現chrony

實驗背景

模擬企業局域伺服器時間同步,保障各伺服器系統準確性和時間一致性。

時間伺服器系統搭建

實驗架構圖

image-20220822145222999

環境設備

設備IP規劃

  • 中國互聯網NTP伺服器

    ntp.aliyun.com #阿里雲NTP授時伺服器地址
    ntp.tencent.com #騰訊雲NTP授時伺服器地址
    ntp.ntsc.ac.cn #中國科學院國家授時中心NTP授時伺服器地址
    time.edu.cn #教育網內的授時伺服器
    
  • 企業外網NTP伺服器

    192.168.100.30  #NTPserver1,os:centos8
    192.168.100.31  #NTPserver2,os:rocklinux8
    
  • 企業內網區域網NTP客戶端

    192.168.100.10 #NTPClient1
    192.168.100.11 #NTPClient2
    192.168.100.12 #NTPClient3
    

時間同步系統實現

  1. 對NTPserver1、NTPserver2、NTPClient1、NTPClient2、NTPClient3安裝chronyd同步數據軟體。

    yum install chrony -y  #centos,yum安裝chronyd軟體
    #apt install chrony -y  #Ubuntu,yum安裝chronyd軟體
    
  2. 配置NTPserver1、NTPserver2同步互聯網NTP伺服器,並授權允許同步時鐘的客戶端網段。

    編輯配置文件:/etc/chrony.conf

    #1、禁用默認的國外時間伺服器地址
    #pool 2.centos.pool.ntp.org iburst 
    
    #2、添加中國互聯網時間伺服器域名地址
    server ntp.aliyun.com iburst 
    server ntp.tencent.com iburst
    server ntp.ntsc.ac.cn iburst
    server time.edu.cn iburst
    
    #3、添加允許客戶端同步時鐘的網段
    allow 0.0.0.0/0
    
    #4、設置即使server指令中時間伺服器不可用,也允許將本地時間作為標準時間授時給其它客戶端
    local stratum 10
    
  3. 允許NTPserver1、NTPserver2的chrony服務,

    systemctl start chronyd
    
  4. 驗證配置文件是否配置成功,並查看服務狀態是否運行,查看udp埠123是否開啟,是否運行任何IP訪問(0.0.0.0)

    systemctl status chronyd
    ss -anu
    

    image-20220822211031703

    image-20220822211119246

  5. 查看NTPserver1、NTPserver2是否已正常同步互聯網時間伺服器

    chronyc sources -V
    

    image-20220822210733373

    image-20220822210859457

  6. 配置客戶端:NTPClient1、NTPClient2、NTPClient3同步NTPserver1和NTPserver2

    #1、centos7系統配置,禁用系統默認時間伺服器地址
    #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
    
    #或centos8禁用默認的國外時間伺服器地址
    #pool 2.centos.pool.ntp.org iburst
    
    #2、添加企業外網時間同步伺服器地址
    server 192.168.100.30 iburst 
    server 192.168.100.31 iburst
    
  7. 重啟客戶端chrony服務

    systemctl restart 
    
  8. 驗證客戶端NTPClient1、NTPClient2、NTPClient3是否同步NTPserver1和NTPserver2時間伺服器

    chronyc sources -V
    

    image-20220822210609330

    image-20220822210623724

    image-20220822210545142

  9. 可在NTPserver1和NTPserver2驗證接入哪些客戶端連接

    chronyc clients
    

    image-20220822212547044

    image-20220822212615913

命令和配置文件及詳解

  • chrony介紹

    • 兩個主要程式:chronyd和chronyc

      chronyd:後台運行的守護進程,用於調整內核中運行的系統時鐘和時鐘伺服器同步。它確定電腦增減時間的比率,並對此進行補償
      chronyc:命令行用戶工具,用於監控性能並進行多樣化的配置。它可以在chronyd實例控制的電腦上工作,也可在一台不同的遠程電腦上工作
      
    • 服務unit 文件: /usr/lib/systemd/system/chronyd.service

    • 監聽埠: 服務端: 123/udp,客戶端: 323/udp

    • 配置文件: /etc/chrony.conf

  • 配置文件chrony.conf

    server #可用於時鍾伺服器,iburst 選項當伺服器可達時,發送一個八個數據包而不是通常的一個數據
    包。 包間隔通常為2秒,可加快初始同步速度
    pool #該指令的語法與server 指令的語法相似,不同之處在於它用於指定NTP伺服器池而不是單個
    NTP伺服器。池名稱應解析為隨時間可能會變化的多個地址
    driftfile #根據實際時間計算出電腦增減時間的比率,將它記錄到一個文件中,會在重啟後為系統時鐘作
    出補償
    rtcsync #啟用內核模式,系統時間每11分鐘會拷貝到實時時鐘(RTC)
    allow / deny #指定一台主機、子網,或者網路以允許或拒絕訪問本伺服器
    cmdallow / cmddeny #可以指定哪台主機可以通過chronyd使用控制命令
    bindcmdaddress #允許chronyd監聽哪個介面來接收由chronyc執行的命令
    makestep # 通常chronyd將根據需求通過減慢或加速時鐘,使得系統逐步糾正所有時間偏差。在某些特定
    情況下,系統時鐘可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鐘。該指令強制chronyd在
    調整期大於某個閥值時調整系統時鐘
    local stratum 10 #即使server指令中時間伺服器不可用,也允許將本地時間作為標準時間授時給其它
    客戶端
    
  • chronyc 可以運行在互動式和非互動式兩種方式

    help 命令可以查看更多chronyc的交互命令
    accheck 檢查是否對特定主機可訪問當前伺服器
    activity 顯示有多少NTP源在線/離線
    sources [-v] 顯示當前時間源的同步資訊
    sourcestats [-v]顯示當前時間源的同步統計資訊
    add server 手動添加一台新的NTP伺服器
    clients 報告已訪問本伺服器的客戶端列表
    delete 手動移除NTP伺服器或對等伺服器
    settime 手動設置守護進程時間
    tracking 顯示系統時間資訊
    
  • 判斷時間客戶端是否連接上時間伺服器:chronyc sources -v

    [21:28:46 root@rocky8 ~]#chronyc sources -v
    
      .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
     / .- Source state '*' = current best, '+' = combined, '-' = not combined,
    | /             'x' = may be in error, '~' = too variable, '?' = unusable.
    ||                                                 .- 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               
    ===============================================================================
    ^+ 203.107.6.88                  2   9   377   451  +2493us[+2375us] +/-   39ms
    ^* 139.199.215.251               2   9   337   206   +205us[ +145us] +/-   49ms
    ^+ 114.118.7.161                 1   9   231   259    +22ms[  +22ms] +/-   50ms
    ^? 202.112.0.7                   0   9     0     -     +0ns[   +0ns] +/-    0ns
    
    
    
    #--------------------------------------------
    ^+ 203.107.6.88 #表示可用時間伺服器地址
    ^* 139.199.215.251 #表示客戶端正在連接同步時間的伺服器地址
    ^? 202.112.0.7 #表示不可用的伺服器地址