目錄
1.時間同步的重要性
2.配置時間服務器?
(1)指定所使用的上層時間服務器。 ?
?(2)指定允許訪問的客戶端
?(3)把local stratum 前的注釋符#去掉。
?3.配置chrony客戶端
?(1)修改pool那行,指定要從哪臺時間服務器同步時間。
(2)修改makestep那行,格式如下。?
4.開始時間同步?
1.時間同步的重要性
一些服務對時間要求非常嚴格,例如,圖20-1所示的由三臺服務器搭建的ceph集群
這三臺服務器的時間必須保持一致,如果不一致,就會顯示警告信息。那么。如何能讓這三臺服務器的時間保持一致呢?手動調整時間的方式肯定不行,因為手動調整時間最多只能精確到分,很難精確到秒。而且即使現在時間調整一致了,過一段時間之后,時間可能又不一樣了
所以,需要通過設置讓這些服務器的時間能夠自動同步,如圖20-2所示
這里假設我們有一個時間服務器時間為7:00,設置server1和 server2向此時間服務器進行時間同步。假設serverl 當前時間為6;59,它與時間服務器一對比,“我的時間比時間服務器慢了一分鐘”,然后它主板上的晶體芯片就會跳動得快一些,很快就“追”上了時間服務器的時間
假設server2當前時間是7:01,它與時間服務器一對比,“我竟然比時間服務器快了一分鐘”,然后它主板上的晶體芯片就會跳動得慢一些,“等著”時間服務器。
下面就開始使用chrony來配置時間服務器?
2.配置時間服務器?
?實驗拓撲圖如下圖所示。
在安裝系統時,如果已經選擇了圖形化界面,則默認已經把chrony這個軟件安裝上了。
使用vim編輯器打開/etc/chrony.conf,只修改我們能用的幾行
(1)指定所使用的上層時間服務器。 ?
把pool 2.rhel.pool.ntp.org iburst修改為pool 127.127.1.0 iburst ##如下圖所示
pool后面跟的是時間服務器,因為這里把server作為chrony服務器,沒有上一層的服務器,所以上層服務器設置為本地時鐘的IP:127.127.1.0。
這里iburst的意思是,如果chrony服務器出問題,客戶端會發送一系列的包給chrony服務器,對服務器進行檢測。
?(2)指定允許訪問的客戶端
?修改allow所在行,把注釋符#去掉,并把后面的網段改為192.168.103.0/24。(注:修改的網段是你自己的網段)
把 #allow 192.168.0.0 / 16 修改為 allow 192.168.103.0 / 24,如下圖所示
server 配置成時間服務器之后,只允許192.168.26.0/24網段的客戶端進行時間同步。如果要允許所有客戶端都能向此時間服務器進行時間同步,可以寫成allow 0/0或allow all。
?(3)把local stratum 前的注釋符#去掉。
?把#local stratum 10修改為local stratum 10,如下圖所示
這行的意思是,即使服務器本身沒有和時間服務器保持時間同步,也可以對外提供時間服務,這行注釋要取消
保存退出,去除空白行和注釋行之后,最后修改完成的代碼如下,加粗字是修改的內容?
[root@RHEL813 ~]# egrep -v "^#|^$" /etc/chrony.conf
pool 127.127.1.0?iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.103.0/24
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
[root@RHEL813 ~]#
然后重啟chronyd這個服務(注意,這里是chronyd而不是chrony),并設置開機自動啟動,命令如下
[root@RHEL813 ~]# systemctl restart chronyd.service
[root@RHEL813 ~]# systemctl enable chronyd
[root@RHEL813 ~]#
查看chrony使用的是什么端口號,命令如下
[root@RHEL813 ~]# netstat -nutlp | grep chronyd
udp 0 0 0.0.0.0:123 0.0.0.0:* 4075/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 4075/chronyd
udp6 0 0 ::1:323 :::* 4075/chronyd
[root@RHEL813 ~]#
?可以看到,chrony使用的是123和323端口號
在防火墻中把這兩個端口開放,命令如下。 ?
[root@RHEL813 ~]# firewall-cmd --add-port=123/udp --permanent
success
[root@RHEL813 ~]# firewall-cmd --add-port=323/udp --permanent
success
[root@RHEL813 ~]# firewall-cmd --reload
success
[root@RHEL813 ~]#
這里加上 --permanent選項的目的是讓其永久生效,然后通過reload重新加載防火墻規則,讓其也立即生效。
?3.配置chrony客戶端
把server2配置成時間服務器的客戶端,也就是chrony客戶端?
在server2(IP地址為192.168.103.14)上用vim編輯器修改/etc/chrony.conf,修改下面的幾行
?(1)修改pool那行,指定要從哪臺時間服務器同步時間。
由原來的 pool 2. rhel . pool . ntp . org iburst 改為 pool 192.168.103.17? iburst
這里指定時間服務器為192.168.103.17,即向192.168.103.17進行時間同步。?
(2)修改makestep那行,格式如下。?
makestep 閾值 limit
客戶端向服務器同步時間有兩種方式:step和 slew。?
step:跳躍著更新時間,如時間由1點直接跳到7點。 ?
slew:平滑著移動時間,晶體芯片跳動得快一些,就好比秒針的轉速“快進”了一樣。?
如果客戶端和服務器的時間相差較多,則通過step的方式更新時間;如果客戶端和服務器的時間相差不多,則通過slew的方式更新時間。那么,時間相差多或不多的標準是什么呢?就要看時間差是否超過makestep后面的住值了。
舉一個例子,makestep 10 3的意思是,如果客戶端和服務器的時間相差10秒以上,就認為客戶端和服務器的時間相差較多,則前三次通過step 的方式更新時間。客戶端通過這種方式會更新得很快,有些應用程序因為時間的突然跳動會帶來問題。
如果客戶端和服務器的時間相差10秒以內,就認為二者時間相差不多,則通過slew的方式更新時間。這種方式更新的速度會比較慢,但比較平穩。
把原來的makestep 10 3改成makestep 200 3
如果客戶端和服務器的時間相差200秒以上,就認為二者時間相差較多,則通過step的方式更新時間。
?保存退出并重啟 chronyd服務,命令如下。
[root@RHEL8 ~]# systemctl restart chronyd.service
[root@RHEL8 ~]# systemctl enable chronyd
[root@RHEL8 ~]#
4.開始時間同步?
為了更細致地看到兩臺機器的時間差,先配置ssh使得server2可以無密碼登錄到server。先生成密鑰對,命令如下。
[root@RHEL8 ~]# ssh-keygen -N "" -f /root/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sSqHTuVO5MaJ9f0/C25UezAavFLxTSHE1IYL82Z84Z4 root@RHEL8
The key's randomart image is:
+---[RSA 3072]----+
| ++o..|
| o.o.+.|
| . .=o+o.|
| o +*=o.|
| + S .o=o+.|
| X + .. + .E.|
| = X . .o. . |
| o * o... |
| . . .o.oo |
+----[SHA256]-----+
[root@RHEL8 ~]#
?配置到server的密鑰登錄,命令如下。
[root@RHEL8 ~]# ssh-copy-id 192.168.103.17
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.103.17 (192.168.103.17)' can't be established.
ECDSA key fingerprint is SHA256:mPeYkYf9kK8DY0zQh3PotyJq1vtAuHrfNvaJHtZQi9M.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.103.17's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh '192.168.103.17'"
and check to make sure that only the key(s) you wanted were added.[root@RHEL8 ~]#
?給server2上通過date命令設置時間,使得server2和server的時間相差200秒,命令如下。
[root@RHEL8 ~]# date -s "2023-11-08 11:12:00" ; hwclock -w
2023年 11月 08日 星期三 11:12:00 CST
[root@RHEL8 ~]#
?然后同時顯示兩臺機器的時間,命令如下。
[root@RHEL8 ~]# date ; ssh 192.168.103.17 date
2023年 11月 08日 星期三 11:12:29 CST
2023年 12月 07日 星期四 22:15:04 EST
[root@RHEL8 ~]#
?可以看到,時間相差了約3分鐘,即180秒。
然后重啟server2的chronyd服務,等待幾秒之后再次查看。?
[root@RHEL8 ~]# systemctl restart chronyd.service
[root@RHEL8 ~]# date ; ssh 192.168.103.17 date
2023年 12月 08日 星期五 11:16:17 CST
2023年 12月 07日 星期四 22:16:17 EST
[root@RHEL8 ~]#
?可以看到,時間很快就同步了,因為這是通過step的方式同步的。
?再次修改時間,命令如下。
[root@RHEL8 ~]# date -s "2023-11-08 11:19:30" ; hwclock -w
2023年 11月 08日 星期三 11:19:30 CST
[root@RHEL8 ~]# date ; ssh 192.168.103.17 date
2023年 11月 08日 星期三 11:19:32 CST
2023年 12月 07日 星期四 22:20:28 EST
[root@RHEL8 ~]#
兩臺機器的時間相差26秒,這個值低于200秒,即在makestep的闕值范圍之內,此時客戶端向服務器進行時間同步時只能通過slew的方式同步。
此時重啟 chronyd服務,也不會保持時間同步,命令如下。?
[root@RHEL8 ~]# systemctl restart chronyd.service
[root@RHEL8 ~]# date ; ssh 192.168.103.17 date
2023年 11月 08日 星期三 11:21:20 CST
2023年 12月 07日 星期四 22:22:16 EST
[root@RHEL8 ~]#
?可以看到,并沒有同步,因為slew同步的速度比較慢。
此時如果通過執行chronyc makestep命令手動step同步,則會立即同步時間,命令如
下。
[root@RHEL8 ~]# chronyc makestep
200 OK
[root@RHEL8 ~]# date ; ssh 192.168.103.17 date
2023年 12月 08日 星期五 11:23:15 CST
2023年 12月 07日 星期四 22:23:15 EST
[root@RHEL8 ~]#
這樣就可以看到立即同步成功了。通過chronye -n sources -v查看現在的同步狀況,如下圖所示。
至此,chrony時間同步已經配置完成了?