Chrony是一個開源的自由軟件,在RHEL 7操作系統,已經是默認服務,默認配置文件在 /etc/chrony.conf 它能保持系統時間與時間服務器(NTP)同步,讓時間始終保持同步。相對NTP時間同步軟件,速度更快、配置和依賴都更簡單
Chrony有兩個核心組件,分別是:chronyd:是守護進程,主要用於調整內核中運行的系統時間和時間服務器同步。它確定計算機增減時間的比率,並對此進行調整補償。chronyc:提供一個用戶界面,用於監控性能並進行多樣化的配置。它可以在chronyd實例控制的計算機上工作,也可以在一台不同的遠程計算機上工作。
配置的時候,需要首先配置chrony的服務器端,然后配置客戶端與服務器端進行同步。如果基於外網的時鍾服務器,那可以不用配置服務器器端
1、chrony工具安裝
1、系統版本檢查,使用cat /etc/system-release
2、使用rpm -qa |grep chrony查看系統是否已安裝chrony,可看到默認已安裝chrony的包。
3、如果沒有安裝環境可使用yum install chrony命令安裝或者離線下載rpm包安裝,下載地址:http://rpm.pbone.net/index.php3?stat=3&limit=2&srodzaj=3&dl=40&search=chrony,找到對應版本下載即可。
4、下載完后使用rpm -ivh chrony-2.1.1-4.el7.centos.x86_64.rpm安裝即可
2、設置chrony的服務狀態,並關閉防火牆
1、服務狀態:
使用systemctl start chronyd.service 啟動chrony服務
使用systemctl enable chronyd.service 設置開機同步時間
使用systemctl status chronyd.service 查看服務狀態
2、直接關閉防火牆
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
2、或者不關閉防火牆、但允許NTP服務
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
因NTP使用123/UDP端口協議,所以允許NTP服務即可
3、服務端和客戶端chrony配置
1、服務端配置
1)、配置文件修改
vi /etc/chrony.conf
a、修改第22行,Allow NTP client access from local network,配置允許訪問的客戶端列表,支持CIDR,例如:
allow 192.168/16
b、修改第29行設置同步,Serve time even if not synchronized to any NTP server.,打開注釋即可,即:
local stratum 10
2)、重啟下服務端chrony服務,使用systemctl restart chronyd.service重啟即可。
2、客戶端配置
1)、配置文件修改
vim /etc/chrony.conf
a、修改server即可,刪掉其他的,添加要同步時間的源服務器ip,格式如下:
server x.x.x.x iburst
2)、重啟下客戶端chrony服務,使用systemctl restart chronyd.service重啟即可。
客戶端使用chronyc sources -v命令完成同步即可
3)、查看同步狀態
[root@k8s-master tuned]# systemctl status chronyd -l ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2019-09-18 17:55:58 CST; 36s ago Docs: man:chronyd(8) man:chrony.conf(5) Process: 16160 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS) Process: 16156 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 16158 (chronyd) Memory: 372.0K CGroup: /system.slice/chronyd.service └─16158 /usr/sbin/chronyd Sep 18 17:55:58 k8s-master systemd[1]: Starting NTP client/server... Sep 18 17:55:58 k8s-master chronyd[16158]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG) Sep 18 17:55:58 k8s-master chronyd[16158]: Frequency -39.629 +/- 0.032 ppm read from /var/lib/chrony/drift Sep 18 17:55:58 k8s-master systemd[1]: Started NTP client/server. Sep 18 17:56:31 k8s-master chronyd[16158]: Selected source 78.46.102.180
4、常用命令
查看時間同步源:
$ chronyc sources -v
立即手工同步
$chronyc -a makestep
查看時間同步源狀態:
$ chronyc sourcestats -v
設置硬件時間
硬件時間默認為UTC:
$ timedatectl set-local-rtc 1
啟用NTP時間同步:
$ timedatectl set-ntp yes
校准時間服務器:
$ chronyc tracking
最后需要注意的是,配置完/etc/chrony.conf后,需重啟chrony服務,否則可能會不生效。
5、各類參數說明
配置參數說明
參數 |
參數說明 |
server |
該參數可以多次用於添加時鍾服務器,必須以"server "格式使用。一般而言,你想添加多少服務器,就可以添加多少服務器 |
stratumweight |
stratumweight指令設置當chronyd從可用源中選擇同步源時,每個層應該添加多少距離到同步距離。默認情況下,CentOS中設置為0,讓chronyd在選擇源時忽略源的層級 |
driftfile |
chronyd程序的主要行為之一,就是根據實際時間計算出計算機增減時間的比率,將它記錄到一個文件中是最合理的,它會在重啟后為系統時鍾作出補償,甚至可能的話,會從時鍾服務器獲得較好的估值 |
rtcsync |
rtcsync指令將啟用一個內核模式,在該模式中,系統時間每11分鍾會拷貝到實時時鍾(RTC) |
allow/deny |
這里你可以指定一台主機、子網,或者網絡以允許或拒絕NTP連接到扮演時鍾服務器的機器 |
cmdallow/cmddeny |
跟上面相類似,只是你可以指定哪個IP地址或哪台主機可以通過chronyd使用控制命令 |
bindcmdaddress |
該指令允許你限制chronyd監聽哪個網絡接口的命令包(由chronyc執行)。該指令通過cmddeny機制提供了一個除上述限制以外可用的額外的訪問控制等級 |
makestep |
通常,chronyd將根據需求通過減慢或加速時鍾,使得系統逐步糾正所有時間偏差。在某些特定情況下,系統時鍾可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鍾。該指令強制chronyd在調整期大於某個閥值時步進調整系統時鍾,但只有在因為chronyd啟動時間超過指定限制(可使用負值來禁用限制),沒有更多時鍾更新時才生效 |
chronyc命令參數說明:
參數 |
參數說明 |
accheck |
檢查NTP訪問是否對特定主機可用 |
activity |
該命令會顯示有多少NTP源在線/離線 |
add server |
手動添加一台新的NTP服務器。 |
clients |
在客戶端報告已訪問到服務器 |
delete |
手動移除NTP服務器或對等服務器 |
settime |
手動設置守護進程時間 |
tracking |
顯示系統時間信息
|
6、設置時區(非必須)
查看當前系統時區:
$ 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
快速步驟
CentOS7.1采用chronyd進行時鍾同步
systemctl status chronyd 查看時鍾同步狀態
chronyc -a makestep 手動同步時鍾
配置時鍾同步服務器
vim /etc/chrony.conf
里面會有類似
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
把你的ntpd server放進去,然后執行
systemctl restart chronyd.service
systemctl enable chronyd.service
參考: