簡介
1.1 時間的重要性
由于 IT 系統中,準確的計時非常重要,有很多種原因需要準確計時:
- 在網絡傳輸中,數據包括和日志需要準確的時間戳
- 各種應用程序中,如訂單信息,交易信息等 都需要準確的時間戳
1.2 時區
時區 ( Time Zone )是地球上使用同一個時間的區域,由于世界各國家與地區經度不同,地
方時也有所不同,因此會劃分為不同的時區。
常見的時區 :
- UTC 整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。
- GMT 格林威治標準時間 (Greenwich Mean Time)指位于英國倫敦郊區的格林尼治天文臺的標準時間,因為本初子午線被定義在通過那里的經線。(UTC與GMT時間 基本相同,本文中不做區分)
- CST 中國標準時間 (China Standard Time)GMT + 8 = UTC + 8 = CST
- DST夏令時(Daylight Saving Time) 指在夏天太陽升起的比較早時,將時間撥快一小時,以提早日光的使用。(中國不使用)
1.3 Linux的兩個時鐘
- 硬件時鐘RTC (Real Time Clock):即BIOS時鐘,也就是我們主板中用電池供電的時鐘,是將時間寫入到BIOS中,系統斷電后時間不會丟失,可以在開機時通過主板程序中進行設置
# 查看硬件時間
[root@server ~]# hwclock
2023-05-30 09:48:32.535594+08:00
- 系統時鐘 (System Clock) :顧名思義也就是Linux系統內核時鐘、軟件時鐘,是由 Linux內核來提供的,系統時鐘是基于內存,如果系統斷電時間就會丟失
# 查看系統時間
[root@server ~]# date
2023年 05月 30日 星期二 09:50:50 CST
[root@server ~]# date -s 10:00 # 修改為錯誤的時間
2023年 05月 30日 星期二 10:00:00 CST
[root@server ~]# date
2023年 05月 30日 星期二 10:00:01 CST
[root@server ~]# hwclock -s # 向硬件時間同步
[root@server ~]# date
2023年 05月 30日 星期二 09:51:50 CST
1.4 設置日期時間
timedatectl 命令設置
# [root@server ~]# timedatectl # 顯示當前的日期和時間
Local time: 三 2023-11-15 13:00:26 CST # 本地時間
Universal time: 三 2023-11-15 05:00:26 UTC # 世界時間
RTC time: 三 2023-11-15 06:16:16 # 硬件時間
Time zone: Asia/Shanghai (CST, +0800) # 時區
System clock synchronized: yes # 時間是否已
同步
NTP service: active # 時間同步服
務已啟動
RTC in local TZ: no # no表示硬件時鐘設置為協調世界時(UTC),yes
表示硬件時鐘設置為本地時間
[root@server ~]# systemctl status chronyd # 查看時間同步服務狀態(由于
默認使用chrony服務同步時間,不再使用ntp服務)
[root@server ~]# timedatectl set-ntp no # 關閉時間同步,以方便修改日期時
間
[root@server ~]# systemctl status chronyd
[root@server ~]# timedatectl set-time "2023-12-12" # 設置新日期
[root@server ~]# timedatectl set-time "12:12:12"
[root@server ~]# timedatectl list-timezones | grep Asia # 查看可用時
區
[root@server ~]# timedatectl set-timezone Asia/Shanghai # 設置時區
date 命令設置
[root@server ~]# date # 顯示
[root@server ~]# date +"%Y-%m-%d %H:%M:%S" # 格式顯示
# 設置日期時間
[root@server ~]# date -s 2023-11-15
2023年 11月 15日 星期三 00:00:00 CST
[root@server ~]# date -s 14:33:33
2023年 11月 15日 星期三 14:33:33 CST
[root@server ~]# date
2023年 11月 15日 星期三 14:33:34 CST
1.5 NTP
- NTP:(Network Time Protocol,網絡時間協議)是由RFC 1305定義的時間同步協議,用來在分布式時間服務器和客戶端之間進行時間同步。
- NTP基于UDP報文進行傳輸,使用的UDP端口號為123
- NTP可以對網絡內所有具有時鐘的設備進行時鐘同步,使網絡內所有設備的時鐘保持一致,從而使設備能夠提供基于統一時間的多種應用,對于運行NTP的本地系統,既可以接受來自其他時鐘源的同步,又可以作為時鐘源同步其他的時鐘,并且可以和其他設備互相同步。
- NTP的其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms
1.6 Chrony介紹
- chrony是一個開源的自由軟件,它能幫助你保持系統時鐘與時鐘服務器(NTP) 同步,因此讓你的時間保持精確。
- chrony由兩個程序組成,分別是chronyd和chronyc
- chronyd:是一個后臺運行的守護進程,用于調整內核中運行的系統時鐘和時鐘服務器同步。它確定計算機增減時間的比率,并對此進行補償。
- chronyc:提供了一個用戶界面,用于監控性能并進行多樣化的配置。它可以在chronyd實例控制的計算機上工作,也可以在一臺不同的遠程計算機上工作
注意: Chrony 與 NTP 都是時間同步軟件,兩個軟件不能夠同時開啟,會出現時間沖突,openeuler 中默認使用 chrony 作為時間服務器,不再支持 NTP 軟件包
[root@server ~]# systemctl status ntp # 查看ntp狀態
[root@server ~]# systemctl status chronyd #查看chronyd狀態
安裝與配置
2.1 安裝
2.2 Chrony配置文件分析
# 使用 pool.ntp.org 項目中的公共服務器。
# 或者使用server開頭的服務器,理論上想添加多少時間服務器都可以
# iburst表示的是首次同步的時候快速同步
2.3 同步時間服務器
授時中心
ntp.aliyun.com 阿里云
.....
實驗一:客戶端向阿里云服務器進行同步時間
編輯配置文件:
修改時間服務器:
設置錯誤的時間:
?重啟配置文件,再驗證是否同步成功:
實驗二:客戶端向配置好阿里云服務器的服務端進行同步時間
- 搭建本地時間同步服務器
- 架構
性質 | IP地址 | 同步對象 |
---|---|---|
服務端server | 192.168.126.132 | ntp.aliyun.com |
客戶端node1 | 192.168.126.130 | 192.168.126.132 |
- 要求
- 服務端server向阿里時間服務器進行時間同步
- 客戶端node1向服務端server進行時間同步
- 第一步:定位服務端server
# 安裝軟件
[root@server ~]# yum install chrony -y # 默認已安裝
# 編輯配置文件,定位第3行,修改為阿里的時間服務地址
[root@server ~]# vim /etc/chrony.conf
server ntp.aliyun.com iburst
# 重啟服務
[root@server ~]# systemctl restart chronyd
# 測試
[root@server ~]# chronyc sources -v
[root@server ~]# timedatectl status
# 設置允許客戶端時間同步
[root@server ~]# vim /etc/chrony.conf
26 allow 192.168.48.131/24 # 定位第26行,設置誰可以訪問本機進行同步
[root@server ~]# systemctl restart chronyd
重啟服務端配置文件:
- 第二步:定位客戶端node1
# 安裝軟件
[root@node1 ~]# yum install chrony -y
# 編輯配置文件
[root@node1 ~]# vim /etc/chrony.conf # 修改第3行為server的地址
server 192.168.48.130 iburst
# 重啟服務
[root@node1 ~]# systemctl restart chronyd
# 測試
[root@node1 ~]# chronyc sources -v
該例將此改為:192.168.126.132
重啟客戶端配置文件:
- 注意:客戶端同步失敗的原因
- 檢查網絡連通性,需要能ping通
- 檢查服務端的allow參數
- 需要重啟服務
2.4 chronyc命令
查看時間服務器:
chronyc sources輸出分析:
* | CHRONYD當前同步到的源 |
---|---|
+ | 表示可接受的信號源,與選定的信號源組合在一起 |
- | 表示被合并算法排除的可接受源 |
? | 表示已失去連接的源 |
x | 表示chronyd認為是虛假行情的時鐘(即,其時間與大多數其他來源不一致) |
~ | 表示時間似乎具有太多可變性的來源 |
其它命令
#查看時間服務器的狀態
[root@server ~]# chronyc sourcestats -v#查看時間服務器是否在線
[root@server ~]# chronyc activity -v#同步系統時鐘
[root@server ~]# chronyc -a makestep