時間同步和chrony
時間同步:多主機協作工作時,各個主機時間同步很重要,時間不一致會造成很多重要應用的故障,如:加密協議,日志,集群等, 利用NTP(Network Time Protocol) 協議使網絡中的各個計算機時間達到同步。
目前NTP協議屬於運維基礎架構中必備的基本服務之一。
時間同步實現:ntp,chrony
ntp:將系統時鍾和世界協調時UTC同步,精度在局域網內可達0.1ms,在互聯網上絕大多數的地方精度可以達到1-50ms,項目官網:http://www.ntp.org
chrony:實現NTP協議的的自由軟件。可使系統時鍾與NTP服務器,參考時鍾(例如GPS接收器)以及使用手表和鍵盤的手動輸入進行同步。還可以作為NTPv4(RFC 5905)服務器和對等體運行,為網絡中的計算機提供時間服務。設計用於在各種條件下良好運行,包括間歇性和高度擁擠的網絡連接,溫度變化(計算機時鍾對溫度敏感),以及不能連續運行或在虛擬機上運行的系統。通過Internet同步的兩台機器之間的典型精度在幾毫秒之內,在LAN上,精度通常為幾十微秒。利用硬件時間戳或硬件參考時鍾,可實現亞微秒的精度。
chrony介紹
chrony 的優勢:
- 更快的同步只需要數分鍾而非數小時時間,從而最大程度減少了時間和頻率誤差,對於並非全天 24 小時運行的虛擬計算機而言非常有用。
- 能夠更好地響應時鍾頻率的快速變化,對於具備不穩定時鍾的虛擬機或導致時鍾頻率發生變化的節能技術而言非常有用。
- 在初始同步后,它不會停止時鍾,以防對需要系統時間保持單調的應用程序造成影響。
- 在應對臨時非對稱延遲時(例如,在大規模下載造成鏈接飽和時)提供了更好的穩定性。
- 無需對服務器進行定期輪詢,因此具備間歇性網絡連接的系統仍然可以快速同步時鍾。
chrony官網:https://chrony.tuxfamily.org
chrony官方文檔:https://chrony.tuxfamily.org/documentation.html
chrony包介紹
兩個主要程序:chronyd和chronyc
chronyd:后台運行的守護進程,用於調整內核中運行的系統時鍾和時鍾服務器同步。它確定計算機增減時間的比率,並對此進行補償
chronyc:命令行用戶工具,用於監控性能並進行多樣化的配置。它可以在chronyd實例控制的計算機上工作,也可在一台不同的遠程計算機上工作
服務unit 文件: /usr/lib/systemd/system/chronyd.service
監聽端口: 323/udp,123/udp
配置文件: /etc/chrony.conf
配置文件chrony.conf
- server - 可用於時鍾服務器,iburst 選項當服務器可達時,發送一個八個數據包而不是通常的一個數據包。 包間隔通常為2秒,可加快初始同步速度
- 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 手動設置守護進程時間 sracking 顯示系統時間信息
公共NTP服務
pool.ntp.org:項目是一個提供可靠易用的NTP服務的虛擬集群cn.pool.ntp.org,0-3.cn.pool.ntp.org
阿里雲公共NTP服務器
Unix/linux類:ntp.aliyun.com,ntp1-7.aliyun.com
windows類: time.pool.aliyun.com
大學ntp服務
s1a.time.edu.cn 北京郵電大學 s1b.time.edu.cn 清華大學 s1c.time.edu.cn 北京大學
國家授時中心服務器
210.72.145.44
實現ntp同步時間
原理:在客戶端選出一個主機與服務器端的時間進行同步,其他客戶端與此客戶端進行同步時間,此客戶端需要一直在線,實時與服務器做同步,ntp同步時間較長。
配置與服務器時間同步的客戶端
將挑選的客戶端代表,與服務器端進行時間同步,在ntp配置文件中修改配置文件,添加服務器端的IP地址,進行時間同步(注意:此客戶端的IP地址是192.168.37.7),此時ntp監聽UDP:123端口號。
vim /etc/ntp.conf
#restrict default nomodify notrap nopeer noquery 注釋掉此行,運行其他客戶端主機進行同步此 time server主機 server 172.0.0.10 iburst 此IP地址是服務器IP地址,iburst代表的是快速同步時間 server 172.0.0.11 iburst 可以多寫幾個IP地址,防止第一個服務器宕機,備用其他IP地址繼續進行同步時間。 server 172.0.0.20 iburst server 172.0.0.30 iburst
在代表客戶端同步服務器時間的主機上將ntpd服務啟動,並設置為開機啟動
[root@centos7~]#systemctl start ntpd [root@centos7~]#systemctl enable ntpd Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
配置與以上客戶端時間同步
在其他客戶端進行設置同步時間,設置與代表客戶端同步到服務器時間的IP地址(即將上面設置的客戶端IP地址寫入:192.168.37.7)
vim /etc/ntp.conf
設置完之后啟動ntpd服務,並設置為開機啟動
[root@centos7~]#systemctl start ntpd [root@centos7~]#systemctl enable ntpd Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
實現chrony時間同步
配置與服務器時間同步的客戶端
1、修改chronyd服務器的配置文件,與服務器端時間同步的客戶端主機:vim /etc/chrony.conf
[root@centos27~]#vim /etc/chrony.conf server 172.0.0.10 iburst 設置服務器的IP地址,與服務器的IP地址進行時間同步 server 172.0.0.20 iburst 設置其他幾個服務器的IP地址,防止其他服務器宕機,無法實現時間同步 server 172.0.0.30 iburst server 172.0.0.40 iburst #allow 192.168.37.0/24 允許此IP地址段訪問 allow 0.0.0.0/0 允許所有主機訪問 local stratum 10 本地局域網同步時間服務器(第十層的局域網主機),建議打開。
2、啟動chronyd服務,並設置為開機啟動。
[root@centos7~]#systemctl start chronyd [root@centos7~]#systemctl enable chronyd
配置與以上客戶端時間同步
1、其他客戶端只需要與代表的客戶端(即與服務器端時間同步的客戶端主機)進行同步即可。
vim /etc/chrony.conf
2、啟動chronyd服務,並設置為開機啟動。
[root@centos7~]#systemctl start chronyd [root@centos7~]#systemctl enable chronyd