一、chrony概述
?
chrony是一款開源的NTP時間同步軟件,被廣泛應用于unix-like操作系統(比如Linux、BSD和macos)以提供高精度的時間同步服務。該軟件專注于性能和可靠性,在時間同步中具有低延遲、低CPU占用率和低內存消耗等優勢。chrony由兩個關鍵組件組成,分別是chronyd(服務器端)和chronyc(客戶端)。
- chronyd:作為一個后臺運行的守護進程,負責調整系統時鐘并與時鐘服務器同步,它通過平滑調整計算機的時鐘增減速率來確保時間的準確性。
- chronyc:提供用戶友好的界面,用于監控性能指標和靈活配置。它可在與chronyd實例相同的計算機上運行,也可以在遠程計算機上運行以進行相關操作。
二、實驗環境
2.1 實驗拓撲
如圖,兩臺服務器Server1、Server2連接到同一網絡
2.2 本地環境規劃
主機名 | IP地址 | 操作系統版本 | 內核版本 |
---|---|---|---|
Server1 | 172.16.0.134/24 | Rocky Linux 8.9 (Green Obsidian) | Linux 4.18.0-513.5.1.el8_9.x86_64 |
Server2 | 172.16.0.150/24 | Rocky Linux 8.9 (Green Obsidian) | Linux 4.18.0-513.5.1.el8_9.x86_64 |
?
Net1網絡中配置了NAT(網絡地址轉換),兩臺服務器均可以訪問公網
三、配置時間同步
3.1 安裝chrony
[root@Server1?~]#?rpm?-qa?|?grep?chrony chrony-4.2-1.el8.rocky.1.0.x86_64
Rokcy Linux 8.9版本默認安裝了chrony,驗證安裝狀態:
3.2 配置Server1從公網時間源服務器同步時間
編輯“/etc/chrony.conf”文件:
[root@Server1?~]#?vim?/etc/chrony.conf #?Use?public?servers?from?the?pool.ntp.org?project. #?Please ?consider?joining?the?pool?(http://www.pool.ntp.org/join.html). #?pool?2.rocky.pool.ntp.org?iburst???? ??#?注釋該行,添加如下兩行,理論上想添加多少時間服務器都可以 Server?ntp.aliyun.com?iburst????????????#?阿里時間源服務器 Server?time1.cloud.tencent.com?iburst????#?騰訊時間源服務器
重啟chronyd服務,并設置開機自啟:
[root@Server1?~]#?systemctl?restart?chronyd [root@Server1?~]#?systemctl?enable?chronyd [root@Server1?~]#?systemctl?is-active?chronyd??????#?查看chronyd服務是否正常運行 active [root@Server1?~]#
查看時間同步狀態:
[root@Server1?~]#?chronyc?sources MS?Name/IP?address?????????Stratum?Poll?Reach?LastRx?Last?sample??????????????? =============================================================================== ^*?203.107.6.88??????????????????2???6????37????63????+49us[+2956us]?+/-???23ms ^-?106.55.184.199????????????????2???6???127????60??+1891us[+1891us]?+/-???47ms [root@Server1?~]#? [root@Server1?~]#?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???6????77?????3??-3557us[-3824us]?+/-???26ms ^+?106.55.184.199????????????????2???6???257?????1??+2021us[+2021us]?+/-???46ms [root@Server1?~]#
chronyc sources輸出結果解析:
?
M
這表示信號源的模式。^表示服務器,=表示對等方,#表示本地連接的參考時鐘。
S
此列指示源的狀態。
* 表示chronyd當前同步到的源。
+ 表示可接受的信號源,與選定的信號源組合在一起。
– 表示被合并算法排除的可接受源。
?指示已失去連接性或其數據包未通過所有測試的源。它也顯示在啟動時,直到從中至少收集了3個樣本為止。
x 表示chronyd認為是虛假行情的時鐘(即,其時間與大多數其他來源不一致)
? 表示時間似乎具有太多可變性的來源。
Name/IP address
這顯示了源的名稱或IP地址,或參考時鐘的參考ID。
Stratum
這顯示了來源的層,如其最近收到的樣本中所報告的那樣。層1表示一臺具有本地連接的參考時鐘的計算機。與第1層計算機同步的計算機位于第2層。與第2層計算機同步的計算機位于第3層,依此類推。
Poll
這顯示輪詢源的速率,以秒為單位的時間間隔的以2為底的對數。因此,值為6表示每64秒進行一次測量。chronyd會根據當前情況自動更改輪詢速率。
Reach
這顯示了源的可達性寄存器以八進制數字打印。寄存器有8位,并在每個從源接收或丟失的數據包上更新。值377表示從最后八次傳輸中收到了對所有用戶的有效答復。
LastRx
此列顯示多長時間前從來源接收到了最后一個好的樣本(在下一列中顯示)。未通過某些測試的測量將被忽略。通常以秒為單位。字母m,h,d或y表示分鐘,小時,天或年。
Last sample
此列顯示上次測量時本地時鐘與源之間的偏移。方括號中的數字表示實際測得的偏移量。可以用ns(表示納秒),us (表示微秒),ms(表示毫秒)或s(表示秒)作為后綴。方括號左側的數字表示原始測量值,已調整為允許此后施加于本地時鐘的任何擺度。
+/-指示器后面的數字表示測量中的誤差范圍。正偏移表示本地時鐘位于源時鐘之前。
例如:現有時鐘服務器time_server:它的層級是2,一臺主機node1從time_server同步時間,那么node1主機的層級就是3,以此類推另一臺在node1同步時間,那它的層級就是4。
3.3 配置Server2從Server1時間源同步時間
Server1上再次編輯“/etc/chrony.conf”文件:
[root@Server1?~]#?vim?/etc/chrony.conf? #?Use?public?servers?from?the?pool.ntp.org?project. #? Please?consider?joining?the?pool?(http://www.pool.ntp.org/join.html). #?pool?2.rocky.pool.ntp.org?iburst Server?ntp.aliyun.com?iburst Server?time1.cloud.tencent.com?iburst #?Record?the?rate?at?which?the?system?clock?gains/losses?time. driftfile?/var/lib/chrony/drift #?Allow?the?system?clock?to?be?stepped?in?the?first?three?updates #?if?its?offset?is?larger?than?1?second. makestep?1.0?3 #?Enable?kernel?synchronization?of?the?real-time?clock?(RTC). rtcsync #?Enable?hardware?timestamping?on?all?interfaces?that?support?it. #hwtimestamp?* #?Increase?the?minimum? number?of?selectable?sources?required?to?adjust #?the?system?clock. #minsources?2 #?Allow?NTP?client?acc ess?from?local?network. #allow?192.168.0.0/16 allow?172.16.0.0/24????#?配置訪問規則,僅允許該網絡的客戶端訪問 #?Serve?time?even?if?not?synchronized?to?a?time?source. #local?stratum?10 local?stratum?10??????#?即使未同步到時間源,也要提供時間同步服務,當前系統層級為10 #?Specify?file?containing?keys?for?NTP?authentication. keyfile?/etc/chrony.keys #?Get?TAI-UTC?offset?and?leap?seconds?from?the?system?tz?database. leapsectz?right/UTC #?Specify?directory?for?log?files. logdir?/var/log/chrony #?Select?which?information?is?logged. #log?measurements?statistics?tracking
重啟chronyd服務:
[root@Server1 ~]# systemctl restart chronyd
防火墻放行ntp服務:
[root@Server1?~]#?firewall-cmd?--add-service=ntp?--permanent? success [root@Server1?~]#?firewall-cmd?--reload success
Server2上編輯“/etc/chrony.conf”文件:
[root@Server2?~]#?vim?/etc/chrony.conf #?Use?public?servers?from?the?pool.ntp.org?project. #?Please?consid er?joining?the?pool?(http://www.pool.ntp.org/join.html). #?pool?2.rocky.pool.ntp.org?iburst????#?注釋該行,添加下面一行 Server?172.16.0.134?iburst
重啟chronyd服務,并設置開機自啟:
[root@Server2?~]#?systemctl?restart?chronyd [root@Server2?~]#?systemctl?enable?chronyd
查看時間同步狀態: