Chrony詳解:代替ntp的時間同步服務


原文:https://chegva.com/3265.html

1.chrony簡介


Chrony是一個開源的自由軟件,它能保持系統時鍾與時鍾服務器(NTP)同步,讓時間保持精確。

它由兩個程序組成:chronyd和chronyc。

chronyd:是守護進程,主要用於調整內核中運行的系統時間和時間服務器同步。它確定計算機增減時間的比率,並對此進行調整補償。

chronyc:提供一個用戶界面,用於監控性能並進行多樣化的配置。它可以在chronyd實例控制的計算機上工作,也可以在一台不同的遠程計算機上工作。

chrony是CentOS7.x上自帶的時間同步軟件,chrony既可以做服務端,又可以做客戶端,ntp相對來說更簡單一些。

 

chrony相對於ntp的優勢:

  • 更快的同步只需要數分鍾而非數小時時間,從而最大程度減少了時間和頻率誤差,這對於並非全天 24 小時運行的台式計算機或系統而言非常有用。

  • 能夠更好地響應時鍾頻率的快速變化,這對於具備不穩定時鍾的虛擬機或導致時鍾頻率發生變化的節能技術而言非常有用。

  • 在初始同步后,它不會停止時鍾,以防對需要系統時間保持單調的應用程序造成影響。

  • 在應對臨時非對稱延遲時(例如,在大規模下載造成鏈接飽和時)提供了更好的穩定性。

  • 無需對服務器進行定期輪詢,因此具備間歇性網絡連接的系統仍然可以快速同步時鍾。

 

2.CentOS7安裝chrony


1.CentOS7系統默認已經安裝,如未安裝,請執行以下命令安裝:

$ yum install chrony -y

2.啟動並加入開機自啟動

$ systemctl enable chronyd.service
$ systemctl restart chronyd.service
$ systemctl status chronyd.service

3.Firewalld設置

$ firewall-cmd --add-service=ntp --permanent
$ firewall-cmd --reload

因NTP使用123/UDP端口協議,所以允許NTP服務即可。

4.設置時區

查看當前系統時區:

$ timedatectl
      Local time: Fri 2018-2-29 13:31:04 CST
  Universal time: Fri 2018-2-29 05:31:04 UTC
        RTC time: Fri 2018-2-29 08:17:20
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

如果你當前的時區不正確,請按照以下操作設置。
查看所有可用的時區:

$ timedatectl list-timezones

篩選式查看在亞洲S開的上海可用時區:

$ timedatectl list-timezones |  grep  -E "Asia/S.*"

Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk

設置當前系統為Asia/Shanghai上海時區:

$ timedatectl set-timezone Asia/Shanghai

設置完時區后,強制同步下系統時鍾:

$ chronyc -a makestep
200 OK

查看時間同步源:
$ chronyc sources -v

查看時間同步源狀態:
$ chronyc sourcestats -v

設置硬件時間,硬件時間默認為UTC:
$ timedatectl set-local-rtc 1

啟用NTP時間同步:
$ timedatectl set-ntp yes

校准時間服務器:
$ chronyc tracking

  

3.CentOS6安裝chrony


CentOS6.8安裝chrony

# 安裝chrony

root@study ~# > yum install -y chrony

  # 查看配置文件目錄

root@study ~# > 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/rc.d/init.d/chronyd
/etc/sysconfig/chronyd
/usr/bin/chronyc
/usr/sbin/chronyd
/usr/share/doc/chrony-2.1.1
/usr/share/doc/chrony-2.1.1/COPYING
/usr/share/doc/chrony-2.1.1/FAQ
/usr/share/doc/chrony-2.1.1/NEWS
/usr/share/doc/chrony-2.1.1/README
/usr/share/doc/chrony-2.1.1/chrony.txt.gz
/usr/share/info/chrony.info.gz
/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.查看chrony配置

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst

# Ignore stratum in source selection.
stratumweight 0

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Allow NTP client access from local network.
#allow 192.168/16

# Serve time even if not synchronized to any NTP server.
#local stratum 10

# Specify file containing keys for NTP and command authentication.
keyfile /etc/chrony.keys

# Specify key number for command authentication.
commandkey 1

# Generate new command key on start if missing.
generatecommandkey

# Disable logging of client accesses.
noclientlog

# Send message to syslog when clock adjustment is larger than 0.5 seconds.
logchange 0.5

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

  

2.chrony.conf配置參數說明

參數 參數說明

server

該參數可以多次用於添加時鍾服務器,必須以"server "格式使用。一般而言,你想添加多少服務器,就可以添加多少服務器

stratumweight

stratumweight指令設置當chronyd從可用源中選擇同步源時,每個層應該添加多少距離到同步距離。默認情況下,CentOS中設置為0,讓chronyd在選擇源時忽略源的層級

driftfile

chronyd程序的主要行為之一,就是根據實際時間計算出計算機增減時間的比率,將它記錄到一個文件中是最合理的,它會在重啟后為系統時鍾作出補償,甚至可能的話,會從時鍾服務器獲得較好的估值

makestep

通常,chronyd將根據需求通過減慢或加速時鍾,使得系統逐步糾正所有時間偏差。在某些特定情況下,系統時鍾可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鍾。該指令強制chronyd在調整期大於某個閥值時步進調整系統時鍾,但只有在因為chronyd啟動時間超過指定限制(可使用負值來禁用限制),沒有更多時鍾更新時才生效。maketep 1 3 如果它的偏移大於一秒,則時鍾將在前三次更新中校准。通常,建議僅在前幾次更新中允許該步驟,但在某些情況下(例如,沒有RTC或虛擬機的計算機可以在不正確的時間內暫停和恢復)可能需要允許任何步驟時鍾更新。上面的例子可以改為 maketep 1 -1

rtcsync

rtcsync指令將啟用一個內核模式,在該模式中,系統時間每11分鍾會拷貝到實時時鍾(RTC)

allow/deny

這里你可以指定一台主機、子網,或者網絡以允許或拒絕NTP連接到扮演時鍾服務器的機器

keyfile

指定包含NTP驗證密鑰的文件

logchange

該指令設置調整系統時鍾的閾值,超過該閾值將生成系統日志消息。通過NTP數據包,參考時鍾或通過chronyc的settime命令輸入的時間戳檢測到時鍾錯誤。默認情況下,閾值為1秒。使用的一個例子是:logchange 0.1如果開始補償超過0.1秒的系統時鍾錯誤,將導致生成系統日志消息。

logdir

指定日志文件的目錄。

3.配置chrony.conf

 

server pool.ntp.org iburst
stratumweight 0
driftfile /var/lib/chrony/drift
makestep 1 3
rtcsync
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
noclientlog
logdir /var/log/chrony

  

4.設置時區,啟動chrony

root@study ~# > date
Sun Dec 30 12:01:14 CST 2018

root@study ~# > cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false

root@study ~# > /etc/init.d/chronyd start

root@study ~# > chronyc sourcestats
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
ntp1.ams1.nl.leaseweb.net   4   3     7    -29.989   4320.438  -1166us   649us

root@study ~# > 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
===============================================================================
^* ntp1.ams1.nl.leaseweb.net     2   6    17    49   -472us[-1469us] +/-  277ms

  

5.chronyc命令參數說明:

參數 參數說明

sources

查看時間同步源

sourcestats

查看時間同步源狀態

accheck

檢查NTP訪問是否對特定主機可用

activity

該命令會顯示有多少NTP源在線/離線

add server

手動添加一台新的NTP服務器。

clients

在客戶端報告已訪問到服務器

delete

手動移除NTP服務器或對等服務器

settime

手動設置守護進程時間

tracking

顯示系統時間信息

注意:

1.需要注意的是,配置完/etc/chrony.conf后,需重啟chrony服務,否則可能會不生效。

2.chrony與ntp都是時間同步軟件,兩者最好不要同時開啟。

3.若內網時間同步服務器有問題,直接把同步程序關掉,ntpdate host_ip 手動指向要同步時間的服務器即可。

 

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM