1.為什么需要時間同步
在了解這個問題前,需要先了解RTC、CST、UTC這些時間概念。
(1) RTC
在linux的系統(tǒng)中我們還可以看見一個 RTC時間,這個時間一般叫做硬件時間。也就是由計算機主板上的專門時鐘芯片硬件產(chǎn)生的滴答信號計時得到。
(2)UTC
世界協(xié)調(diào)時間,UTC是世界上不同國家用來統(tǒng)一時間的標準。可以理解為我們地球的標準時間,基于SI標準的原子時間,由精度非常高的銫原子鐘產(chǎn)生的滴答信號計時得到。UTC也就是零時區(qū)的時間。
(3)CST
關(guān)于CST有多重含有,但簡單點理解就是各個國家所在時區(qū)的具體時間。
Time (USA) UT-6:00(美國cst時間:零區(qū)時減6個小時)
Time () UT+9:30(澳大利亞cst:加9個半小時)
China Time UT+8:00(中國cst:加8個小時)
Cuba Time UT-4:00 (古巴cst:減4個小時)
比如當UTC時間為0點時,中國的北京時間處于東8時區(qū),因此中國CST時間為8點(UTC時間+8小時)。
現(xiàn)在就可以解釋為什么需要時間同步了,因為RTC采用主板上的專門時鐘芯片硬件計時,一方面是每個人電腦上的RTC起始計時時間都不一樣,另一方面RTC計時精度誤差較大。為了統(tǒng)一大家的時間,就需要讓RTC在一段時間內(nèi)去與UTC做個同步。可以理解為每天晚上8點整中央電視臺在報時的時候,我們每個人將自己手表的時間同步調(diào)準。只不過計算機中的這個同步調(diào)準的周期要頻繁很多,比如幾分鐘一次。
雖然RTC與UTC同步能解決時間統(tǒng)一的問題,但是如果世界上所有地方的人都使用UTC時間的話可能在生活上并不方便。最簡答的一個例子就是,每個地區(qū)太陽升起的時間將不一樣,對人們的依靠日出而作日落而息的生活習慣將有很大影響。因此需要根據(jù)UTC時間和地區(qū)所在的時區(qū),將UTC換算成具體時區(qū)的時間CST,然后讓RTC與CST進行同步。
2.常用時間同步工具
時間同步工具,其實就是在計算機之間執(zhí)行時間同步請求的一個軟件。遵循一套協(xié)議,讓本地計算機向遠程提供時間同步功能的服務(wù)器發(fā)起同步請求,然后遠程提供時間同步功能的服務(wù)器將同步時間值返回給本地計算機,然后本地計算機利用服務(wù)器返回的時間值經(jīng)過一定的計算得到本地時間。
目前比較流行的時間同步工具有ntp和,ntp采用123/UDP端口通信,采用323/UDP端口通信。由于ntp比較舊了,這里就采用來進行時間同步。在系統(tǒng)安裝,只需要運行下面這句命令:
sudo apt install chrony
分為服務(wù)端程序和客戶端程序c 獲取系統(tǒng)時間,我們既可以用為其他計算機提供時間同步服務(wù),也可以利用向其他時間同步服務(wù)器發(fā)起時間同步請求。下面將依次介紹服務(wù)端和客戶端的配置方法。
3.配置服務(wù)端
如果要讓我們的服務(wù)端能為互聯(lián)網(wǎng)的所有計算機提供時間同步服務(wù),需要將這個服務(wù)端運行在公網(wǎng)服務(wù)器上,通常選用云服務(wù)器(我這里選的是一臺阿里云服務(wù)器)。由于采用323/UDP端口通信,因此需要先去我們的服務(wù)器控制臺將進入服務(wù)器的323/UDP端口權(quán)限打開。
然后進入服務(wù)器的/etc//.conf對服務(wù)端進行配置,這里主要關(guān)注一下幾個參數(shù):
這里源地址可以直接用阿里云默認提供的源,如下所示:
server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
為了方便測試,這里allow配置成allow all,也就是允許所有網(wǎng)段的客戶端發(fā)送請求過來:
allow all
這里設(shè)置local 10,允許在外部時間同步服務(wù)器不可用時c 獲取系統(tǒng)時間,使用服務(wù)器本地時間作為返回值返回給發(fā)起請求的客戶端計算機。
local stratum 10
對服務(wù)端進行啟動、停止、狀態(tài)檢查的方法,如下:
#啟動chrony服務(wù)
service chrony start
#重動chrony服務(wù)
service chrony restart

#查看chrony服務(wù)狀態(tài)
service chrony status
#停止chrony服務(wù)
service chrony stop
4.配置客戶端
對應系統(tǒng)客戶端,進入服務(wù)器的/etc//.conf對客戶端進行配置。配置參數(shù)與上面服務(wù)端的類似,只不過客戶端不需要對外提供時間同步服務(wù)而只去請求數(shù)據(jù),因此allow參數(shù)可以不用。
這里源地址指定為上面我們服務(wù)端的IP地址(具體IP地址去自己的云服務(wù)器控制臺查看一下就知道了),大家可以將下面替換成自己的服務(wù)器地址,如下所示:
server my_chrony_test.aliyuncs.com minpoll 4 maxpoll 10 iburst
對客戶端進行啟動、停止、狀態(tài)檢查的方法與上面服務(wù)端一樣,如下:
#啟動chrony客戶端
service chrony start
#重動chronyd客戶端
service chrony restart
#查看chrony客戶端
service chrony status

#停止chrony客戶端
service chrony stop
然后就是客戶端上的一些常用命令:
#查看可用的時間同步源
chronyc sources -v
#查看時間同步源的狀態(tài)
chronyc sourcestats -v
#對客戶端系統(tǒng)時間進行強制同步
chronyc -a makestep
使用管理本地系統(tǒng)時間:
#修改本地系統(tǒng)時間
timedatectl set-time "2022-03-01 10:01:01"
#查看時區(qū)列表
timedatectl list-timezones

timedatectl list-timezones |grep Asia/S
#修改時區(qū)
timedatectl set-timezone Asia/Shanghai
#讓RTC去和UTC進行同步
timedatectl set-local-rtc 0
#讓RTC去和本地系統(tǒng)時間CST進行同步(不推薦)
timedatectl set-local-rtc 1
#啟用向外部時間同步服務(wù)器發(fā)起同步的功能
timedatectl set-ntp yes
#關(guān)閉向外部時間同步服務(wù)器發(fā)起同步的功能
timedatectl set-ntp no
5.總結(jié)
假設(shè)本地客戶端計算機叫A,我們的服務(wù)器計算機叫B,外網(wǎng)時間同步源計算機叫C,時間同步的過程實際上就是A->B->C->...
A向B發(fā)起時間同步請求,讓A與B的時間保持一致;
B為了維護自身的系統(tǒng)時間,以同樣的方法要向C發(fā)起時間同步請求,讓B與C的時間保持一致;
C可能還要進一步與其他外網(wǎng)時間同步源保持同步,總之就是時間同步時一層一層進行的。