1、NTP(Network Time Protocol)
在計算機世界中,NTP(Network Time Protocol,網絡時間協議)被廣泛用于對時間的統一性和準確性要求非常高的場景,是用來使網絡中的各個計算機時間同步的一種協議。它可以把計算機時鐘同步到世界協調時UTC(Universal Time Coordinated,世界協調時)。UTC是由原子鐘報時的國際標準時間,而NTP獲得UTC的時間來源可以是原子鐘、天文臺、衛星,也可從internet上面獲取。在NTP協議中,定義了時間按照服務器等級傳播,依據離外部UTC源的遠近,將所有服務器歸入不同的stratum(層)中,直接從時間源如GPRS(Global Positioning System,全球定位系統)獲得時間的服務器稱之為stratum-1,而后依次序遞歸傳播給下層服務器stratum-2、stratum-3…,層的總數限制在15以內。此階梯結構示意圖如下:
2、linux時間相關
2.1、時區
現實生活中時間以時區的方式定義,地球繞太陽旋轉的24小時中,世界各地的不同時間由UTC+地區所屬時區決定,全球劃分為24個不同的時區。比如中國標準時間晚上8點半,可以有以下兩種表示方式:
20:00 CST(Chinese Standard Time,中國標準時間)
12:00 UTC(Universal Time Coordinated,世界協調時)
2.1.1、Linux中設置時區
linux中的glibc已提供許多編譯好的時區文件,存放于/usr/share/zoneinfo中,包含大多數國家和城市的時區
可以使用zdump命令查詢對應時區的當前時間,例如香港時間:
修改linux系統時區有多種方式,本文介紹兩種:
第一種方法,修改/etc/localtime文件,這個文件定義了當前系統所在的local time zone,將/usr/share/zoneinfo中的time zone文件符號鏈接至該文件即可。
查看當前時區
修改時區為Shanghai
實際上,更改時區的同時,時間也會跟隨調整。
第二種方法,使用tzselect命令修改TZ變量的值,注意這種方法所做更改會覆蓋localtime中的時區設定,如果要使更改長期有效,刻意將TZ變量的設置寫入到/etc/profile中。
將時區更改為上海時區
2.2、時間設置
linux系統環境中,值得注意的是,一臺計算機上我們有兩個時鐘:硬件時鐘 RTC,(Real Time Clock)和系統時鐘(System Clock)。硬件時鐘是指鑲嵌在主板上的特殊電路,它可以使計算機關機之后仍然計算時間;系統時鐘是操作系統kernel用來計算時間的時鐘,其值是由1970年1月1日00:00:00 UTC時間至當前時間所經歷的秒數總和。系統在開機時,會自動將系統時間同步為硬件時鐘時間,而后各自獨立運行,長時間運行兩者將會產生誤差。
查看并對比當前系統硬件時間和系統時間
可以看到,兩者已經有誤差了,實現兩者同步,可以采用以下命令
將硬件時間設置為系統時間
將系統時間設置為硬件時間
如果想設置硬件時間,可以在開機時在BIOS里面設定,或者同過hwclock命令設定
# hwclock –set –date="mm/dd/yy hh:mm:ss"
如果想設置系統時間,可以使用date命令來設置
# hwclock -s "dd/mm/yyyy hh:mm:ss"
雖然我們可以通過上述內容來調整時間,但是如果硬件時間和系統時間都不準確的話,我們就需要通過NTP協議來向時間源服務器來同步時間了。
3、配置NTP服務器
3.1、安裝NTP
安裝ntp服務器搭建程序,可以使用rpm包安裝或者yum工具自動安裝,本文使用yum安裝
可以看到ntpdate程序也被依賴安裝完畢
確認已安裝
3.2、手動同步NTP服務器時間
在NTP服務器上使用ntpdate手動向上層NTP服務器同步時間,以保證服務器自身時間
選擇下面兩個NTP服務器為其同步時間
asia.pool.ntp.org
0.asia.pool.ntp.org
1.asia.pool.ntp.org
注意,配置NTP服務器之前,手動同步時間是很有必要的,原因如下:
1、根據NTP的設置,如果服務器時間比準確時間要快的話,NTP協議不回自動為其調整。
2、如果服務器當前時間與準確時間相差甚大,NTP將會花較長一段時間來進行調整,手動調整可以節省時間
3.3、配置運行NTP Server
本文演示配置的NTP Server,應用于局域網中,為局域網中的成員提供NTP事件源服務器,實際上,無論我們的計算機配置多好,運行時間長了都會出現時間誤差,不足以給互聯網上的其它服務器做NTP Server,因此我們自己假設的服務器只能稱之為NTP Delay Server,它從上層獲取相對準確的時間,而后為內部成功提供時間同步源。、
3.3.1配置文件修改
修改配置文件/etc/ntp.conf,定義NTP Server和權限設定
一、driftfile 默認存放于/var/lib/ntp/drift中 driftfile:由于system clock頻率都略有誤差,因此機器運行一段時間后,時間會不精確,NTP會自動檢測誤差值并予以調整,這個冗長的過程會被記錄到driftfile中,用以保證開機后之前的計算結果也不會丟失。
注2-注5:
NTP安全設置,而安全的設定分兩個方面:
一個方面:允許哪些客戶段連接到服務器來同步時間;
第二個方面:連過來的客戶端不能修改我們服務器上的時間。
權限的設定以restrict來設定,語法如下:
restrict IP地址 mask 子網掩碼 參數
其中,IP可以是IP地址,也可以是default,default指所有IP
參數解釋如下:
ignore:關閉所有NTP聯機服務
nomodify:客戶端不能更改服務器端的時間參數,但是可以通過服務端進行網絡校時。
notrust:客戶端除非通過認證,否則客戶端來源將視為不信任子網
noquery:不提供客戶端的時間查詢
注意:如果參數沒有設定,就表示該IP(或子網)沒有任何限制
配置如下:
首先,默認客戶端拒絕所有操作
允許本機的任何操作
允許局域網內的客戶端同步時間,不允許更改服務器時間
添加如下配置,確保internet斷開時,客戶端仍可以從該NTP服務器同步時間
注6:上層NTP Server,NTP服務器將會嘗試向此組服務器請求同步時間,參數prefer,表示優先選擇該服務器為其上層NTP服務器。
配置文件修改完成后,啟動ntpd,服務,設置為開機啟動
啟動ntpd服務后,需等待幾分鐘到十幾分鐘的時間后,就可以實現時間同步了。
3.3.2、查看NTP服務運行情況
ntpstat命令查看同步狀態信息
上圖所示,第一行,此NTP服務器的上層服務器地址59.149.185.193,上層服務器是stratum-2層服務器;第二行,為校正時間差;第三行,每過128s執行時間同步。
使用ntpq -p查詢NTP Server狀態
上圖所示,解釋如下
remote: 它指的就是本地機器所連接的遠程NTP服務器
refid: 它指的是給遠程服務器(e.g. 193.60.199.75)提供時間同步的服務器
st: 遠程服務器的層級別(stratum). 由于NTP是層型結構,有頂端的服務器,多層的Relay Server再到客戶端. 所以服務器從高到低級別可以設定為1-16. 為了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別為1的服務器的.
when: 我個人把它理解為一個計時器用來告訴我們還有多久本地機器就需要和遠程服務器進行一次時間同步
poll: 本地機和遠程服務器多少時間進行一次同步(單位為秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和服務器同步的頻率也就增加了,可以盡快調整到正確的時間范圍.之后poll值會逐漸增大,同步的頻率也就會相應減小
reach: 這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加
delay: 從本地機發送同步要求到服務器的round trip time
offset: 這是個最關鍵的值, 它告訴了我們本地機和服務器之間的時間差別. offset越接近于0,我們就和服務器的時間越接近
jitter: 這是一個用來做統計的值. 它統計了在特定個連續的連接數里offset的分布情況. 簡單地說這個數值的絕對值越小我們和服務器的時間就越精確
每一行前面的特殊符號含義:
* 它告訴我們遠端的服務器已經被確認為我們的主NTP Server,我們系統的時間將由這臺機器所提供
+ 它將作為輔助的NTP Server和帶有*號的服務器一起為我們提供同步服務. 當*號服務器不可用時它就可以接管
- 遠程服務器被clustering algorithm認為是不合格的NTP Server
x 遠程服務器不可用
3.3.3、配置NTP Client端
一、linux作為客戶端自動同步時間
結合crond實現自動時間同步
# crontab -e
# service crond restart
上面的設置,定義每天8:30同步時間
二、Windows作為客戶端同步時間
1、打開windows time和RPC兩個服務
2、如果打開windows time出現1058錯誤,則執行如下操作
1、運行cmd進入命令行界面,鍵入w32tm /register 進行注冊
正確的響應:W32Time成功注冊
3、上一步成功完成后,執行net start "windows time"或net start w32time 啟動服務。
3.3.4、無法成功同步時間的原因
1、客戶端的日期必須設置正確,不能超出正常時間24小時;確保客戶端時區設置正確,不回更新成其它時區時間。
2、fudge 127.127.1.0 stratum 10 如果是linux作為NTP服務器,stratum(層級)不能太大
3、linux的NTP服務器必須能夠正常將從上層服務器獲得的時間從系統時間寫入到硬件時鐘,確保下面的參數的
值為yes
默認NTP只會同步system clock.如果需要同步硬件時鐘的話,需要做如下操作。
原創文章,作者:Silently,如若轉載,請注明出處:http://www.www58058.com/9320
已置頂! 整齊簡潔吸睛,內容豐滿干貨
不錯,學習了,秒贊一個!