原文: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啟動時間超過指定限制(可使用負值來禁用限制),沒有更多時鍾更新時才生效。 |
rtcsync |
rtcsync指令將啟用一個內核模式,在該模式中,系統時間每11分鍾會拷貝到實時時鍾(RTC) |
allow/deny |
這里你可以指定一台主機、子網,或者網絡以允許或拒絕NTP連接到扮演時鍾服務器的機器 |
keyfile |
指定包含NTP驗證密鑰的文件 |
logchange |
該指令設置調整系統時鍾的閾值,超過該閾值將生成系統日志消息。通過NTP數據包,參考時鍾或通過chronyc的settime命令輸入的時間戳檢測到時鍾錯誤。默認情況下,閾值為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
手動指向要同步時間的服務器即可。
參考: