Chrony是NTP(Network Time Protocol,網絡時間協議,服務器時間同步的一種協議)的另一種實現,與ntpd不同,它可以更快且更准確地同步系統時鍾,最大程度的減少時間和頻率誤差。
在CentOS6中,默認是使用ntpd來同步時間的,但ntpd同步時間並不理想,有可能需要數小時來同步時間。而且ntp也已經很老了。所以在Centos7中換成了chrony來實現時間同步。chrony並且兼容ntpd監聽在udp123端口上,自己則監聽在udp的323端口上。
如果在chrony配置文件中指定了ntp服務器的地址,那么chrony就是一台客戶端,會去同步ntp服務器的時間,如果在chrony配置了允許某些客戶端來向自己同步時間,則chrony也充當了一台服務器,所以,安裝了chrony即可充當客戶端也可以充當服務端。一般我們只需要做客戶端就好,不需要對外提供時間同步功能。
一、chrony是兩個用來維持計算機系統時鍾准確性的程序,這兩個程序命名為chronyd和chronyc。
chronyd是一個在系統后台運行的守護進程。主要用於調整內核中運行的系統時間和時間服務器同步,他根據網絡上其他時間服務器時間來測量本機時間的偏移量從而調整系統時鍾。對於孤立系統,用戶可以手動周期性的輸入正確時間(通過chronyc)。在這兩種情況下,chronyd決定計算機快慢的比例,並加以糾正。chronyd實現了NTP協議並且可以作為服務器或客戶端。
chronyc是用來監控chronyd性能和配置其參數的用戶界面。他可以控制本機及其他計算機上運行的chronyd進程。
服務unit文件: /usr/lib/systemd/system/chronyd.service
監聽端口: 323/udp,123/udp
配置文件: /etc/chrony.conf
二、chrony 的優勢:
更快的同步,從而最大程度減少了時間和頻率誤差,對於並非全天 24 小時運行的虛擬計算機而言非常有用
能夠更好地響應時鍾頻率的快速變化,對於具備不穩定時鍾的虛擬機或導致時鍾頻率發生變化的節能技術而言非常有用
在初始同步后,它不會停止時鍾,以防對需要系統時間保持單調的應用程序造成影響
在應對臨時非對稱延遲時(例如,在大規模下載造成鏈接飽和時)提供了更好的穩定性
無需對服務器進行定期輪詢,因此具備間歇性網絡連接的系統仍然可以快速同步時鍾
chrony官網:https://chrony.tuxfamily.org
chrony官方文檔:https://chrony.tuxfamily.org/documentation.html
三、安裝及配置chrony
------------------------------------
yum install chrony ##CentOS7默認已安裝chrony
------------------------------------
配置文件
/etc/chrony.conf
server - 可用於時鍾服務器,iburst 選項當服務器可達時,發送八個數據包而不是通常的一個數據包。 包間隔通常為2秒,可加快初始同步速度
driftfile - chronyd程序的主要行為之一,就是根據實際時間計算出計算機增減時間的比率,將它記錄到一個文件中是最合理的,它會在重啟后為系統時鍾作出補償,甚至可能的話,會從時鍾服務器獲得較好的估值。
rtcsync - 啟用內核模式,系統時間每11分鍾會拷貝到實時時鍾(RTC)
allow/deny - 這里你可以指定一台主機、子網,或者網絡以允許或拒絕NTP連接到扮演時鍾服務器的機器。
cmdallow / cmddeny - 跟上面相類似,只是你可以指定哪個IP地址或哪台主機可以通過chronyd使用控制命令
bindcmdaddress - 該指令允許你限制chronyd監聽哪個網絡接口的命令包(由chronyc執行)。該指令通過cmddeny機制提供了一個除上述限制以外可用的額外的訪問控制等級
makestep - 通常,chronyd將根據需求通過減慢或加速時鍾,使得系統逐步糾正所有時間偏差。在某些特定情況下,系統時鍾可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鍾。該指令強制chronyd在調整期大於某個閥值時步進調整系統時鍾,但只有在因為chronyd啟動時間超過指定限制(可使用負值來禁用限制),沒有更多時鍾更新時才生效
local stratum 10 - 當server中提供的公網NTP服務器不可用時,采用本地時間作為同步標准
keyfile - 指定包含NTP驗證密鑰的文件
logdir - 指定日志文件的目錄
備注:詳細指令參數可以使用命令# man chrony.conf查看
四、chronyd服務管理
------------------------------------
systemctl start chronyd.service #啟動
systemctl status chronyd.service #查看
systemctl restart chronyd.service #重啟
systemctl stop chronyd.service #停止
systemctl enable chronyd.service #設置開機啟動
------------------------------------
五、防火牆配置
開放 323/udp,123/udp端口,或直接關閉防火牆
六、使用chronyc
chronyc命令有兩種模式,一種是交互式模式,一種是命令行模式。輸入chronyc回車就進入交互式模式,進入交互式模式可以使用help命令查看幫助列表
常用指令說明:
accheck - 檢查NTP訪問是否對特定主機可用
activity - 該命令會顯示有多少NTP源在線/離線
add server - 手動添加一台新的NTP服務器。
clients - 在客戶端報告已訪問到服務器
delete - 手動移除NTP服務器或對等服務器
settime - 手動設置守護進程時間
tracking - 顯示系統時間信息
說明:chronyd和chronyc的詳細使用方法可以使用命令# man chronyd和# man chronyc查看
八、NTP服務端配置舉例
1、安裝chrony
2、設置chrony服務開機啟動
3、防火牆開放UDP端口號123和323
5、配置chrony主配置文件chrony.conf
/etc/chrony.conf 增加如下內容,其它保持默認即可
----------------------------------------------------------
# 配置外部時間服務器,將配置文件中默認的全部注釋掉
server ntp.ntsc.ac.cn prefer ##中國國家授時中心
server ntp1.aliyun.com ##中國授時
#只允許192.168.0網段的客戶端進行時間同步,(allow 0.0.0.0/0代表允許所以任意設備)
allow 192.168.0.0/24
# 啟用RTC(實時時鍾)的內核同步
rtcsync
#當外部時間服務器不可用時,采用本地時間作為同步標准
local stratum 10
----------------------------------------------------------
6、啟動Chronyd 服務,以加載新的配置。
Chronyd 服務啟動成功后,會立即同步時鍾服務器的時間,同時會監聽以下兩個端口。
端口 123/udp 為標准的 NTP 監聽端口,如果要對外提供 NTP Server 功能,必須開啟防火牆和監聽地址為外部可訪問地址。如需修改,你可以通過配置 port 參數來修改。
端口 323/udp 為默認的管理端口。如需修改,你可以通過配置 cmdport 參數來修改。
7、命令行模式查看時間同步源 # chronyc sources -v

8、查看時間同步源狀態: # chronyc sourcestats -v

9、直接輸入命令chronyc進入交互式模式

九、NTP客戶端配置舉例
和NTP服務端配置舉例配置一樣,只是當作客戶端來進行時間同步則配置文件不需要配置那么復雜,只需要配置下面的內容就行,其它的默認
------------------------------------------------------------
# 配置時間服務器,將配置文件中默認的全部注釋掉
# 配置外部時間服務器,將配置文件中默認的全部注釋掉
server ntp.ntsc.ac.cn prefer ##中國國家授時中心
server ntp1.aliyun.com ##中國授時
# 啟用RTC(實時時鍾)的內核同步
rtcsync
------------------------------------------------------------
參考:
https://blog.51cto.com/qiuyue/2344678
https://cloud.tencent.com/developer/article/1546322
