關於ntp時間同步理論及配置參數-20170804

[原創]關於ntp時間同步理論及配置參數20170804

前言

NTPNetwork Time Protocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。無論是平時使用的私人計算機還是在工作中搭建的服務器集羣,時間的統一性和準確性是十分重要的它是用來同步網絡中各個計算機的時間的協議。

在計算機的世界裏,時間非常地重要,例如對於火箭發射這種科研活動,對時間的統一性和準確性要求就非常地高,是按照A這臺計算機的時間,還是按照B這臺計算機的時間?NTP就是用來解決這個問題的,NTP(Network TimeProtocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。它的用途是把計算機的時鐘同步到世界協調時UTC,其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms

它可以使計算機對其服務器或時鐘源(如石英鐘,GPS等等)進行時間同步,它可以提供高精準度的時間校正,而且可以使用加密確認的方式來防止惡毒的協議***。 

0層的服務器採用的是原子鐘、GPS鍾等物理設備,stratum 1stratum 0 是直接相連的,往後的stratum與上一層stratum通過網絡相連,同一層的server也可以交互。

1C/S合一

ntpd對下層client來說是serviceserver,對於上層server來說它是client,也就是說新版的NTP服務程序已經不對服務端和客戶端進行區分了,統一叫做ntpdntpd根據配置文件的參數決定是要爲其他服務器提供時鐘服務或者是從其他服務器同步時鐘。所有的配置都在/etc/ntp.conf文件中。

2NTP客戶端同步間隔

NTP服務會間隔多長時間想時鐘服務器請求一次時鐘同步呢?默認最小時間間隔爲64s,默認最大時間間隔是1024s17分鐘左右)。64s是比較合理的,默認間隔也是可調的(Notethat most device drivers will not operate properly if the poll interval is lessthan 64 s and that the broadcast server and manycast client associations willalso use the default, unless overridden.)。

3、容忍誤差範圍

NTP服務並不是在任何情況下都會進行同步的。當時鍾服務器時間和本地時間相差大於1000s時,NTP服務就會認爲是人爲調整了時鐘或出現了硬件故障,例如CMOS電池損壞等。此時,NTP服務就會退出,需要人工(ntpdate…)進行時鐘同步。

採用-g選項可以讓ntpd忽略1000s或更大誤差,設置時鐘到serversystem time, 但是ntpd還是會因此退出。

 

4、層次(strata

stratum根據上層server的層次而設定(+1)。

對於提供network time service provider的主機來說,stratum的設定要儘可能準確。

而作爲局域網的time service provider,通常將stratum設置爲10 Stratum 10 is conventional for unsynchronized local clocks; it ishigh enough that nobody is likely to mistake it for a desirable clock tosynchronize with.),

 

如下:

server 127.127.1.0     # localclockfudge   127.127.1.0     stratum 10#stratum設置爲其它值也是可以的,其範圍爲0~15

 

二、設置與啓動

文件路徑:/etc/ntp.conf

# 1. 先處理權限方面的問題,包括放行上層服務器以及開放局域網用戶來源:

restrict default kod nomodify notrap nopeernoquery    <==拒絕 IPv4 的用戶

restrict -6 default kod nomodify notrapnopeer noquery  <==拒絕 IPv6 的用戶

restrict 220.130.158.71   <==放行tock.stdtime.gov.tw 進入本 NTP 的服務器

restrict 59.124.196.83     <==放行tick.stdtime.gov.tw 進入本 NTP 的服務器

restrict 59.124.196.84    <==放行time.stdtime.gov.tw 進入本 NTP 的服務器

restrict 127.0.0.1      <==底下兩個是默認值,放行本機來源

restrict -6 ::1restrict 192.168.100.0 mask255.255.255.0 nomodify <==放行局域網用戶來源,或者列出單獨IP

 

# 2. 設定主機來源,請先將原本的[0|1|2].centos.pool.ntp.org 的設定批註掉:

server 220.130.158.71   prefer <==以這部主機爲最優先的server

server 59.124.196.83

server 59.124.196.84

 

# 3.默認的一個內部時鐘數據,用在沒有外部NTP 服務器時,使用它爲局域網用戶提供服務:

# server   127.127.1.0     # local clock#fudge     127.127.1.0 stratum 10

 

# 4.預設時間差異分析檔案與暫不用到的 keys等,不需要更動它:

driftfile /var/lib/ntp/driftkeys      /etc/ntp/keys

 

參數設置文件路徑:/etc/sysconfig/ntpd

OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid" SYNC_HWCLOCK=yes# 將他改成 yes 吧!這樣 BIOS 的時間也會跟着改變的!
 
 

設置NTP服務器不難但是NTP本身是一個很複雜的協議. 

1. 時間和時區

如果有人問你說現在幾點? 你看了看錶回答他說晚上8點了. 這樣回答看上去沒有什麼問題,但是如果問你的這個人在歐洲的話那麼你的回答就會讓他很疑惑,因爲他那裏還太陽當空呢.

這裏就有產生了一個如何定義時間的問題. 因爲在地球環繞太陽旋轉的24個小時中,世界各地日出日落的時間是不一樣的.所以我們纔有劃分時區(timezone)的必要,也就是把全球劃分成24個不同的時區. 所以我們可以把時間的定義理解爲一個時間的值加上所在地的時區(注意這個所在地可以精確到城市)

地理課上我們都學過格林威治時間(GMT), 它也就是0時區時間. 但是我們在計算機中經常看到的是UTC.它是CoordinatedUniversal Time的簡寫.雖然可以認爲UTCGMT的值相等(誤差相當之小),但是UTC已經被認定爲是國際標準,所以我們都應該遵守標準只使用UTC

那麼假如現在中國當地的時間是晚上8點的話,我們可以有下面兩種表示方式
20:00 CST
12:00 UTC

這裏的CSTChinese Standard Time,也就是我們通常所說的北京時間了.因爲中國處在UTC+8時區,依次類推那麼也就是12:00 UTC.

爲什麼要說這些呢(呵呵這裏不是地理論壇吧...)

第一,不管通過任何渠道我們想要同步系統的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(因爲它不知道你在哪裏).所以當我們設置系統時間的時候,設置好時區是首先要做的工作
第二,很多國家都有夏令時(我記得小時候中國也實行過一次),那就是在一年當中的某一天時鐘撥快一小時(比如從UTC+8一下變成UTC+9),那麼同理到時候還要再撥慢回來.如果我們設置了正確的時區,當需要改變時間的時候系統就會自動替我們調整

現在我們就來看一下如何在linux下設置時區,也就是time zone

 

2. 如何設置LinuxTime Zone

Linuxglibc提供了我們事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個目錄下,這裏基本涵蓋了大部分的國家和城市
代碼:
# ls -F /usr/share/zoneinfo/
Africa/      Chile/  Factory    Iceland     Mexico/   posix/      Universal
America/     CST6CDT GB        Indian/      Mideast/  posixrules  US/
Antarctica/  Cuba     GB-Eire   Iran        MST      PRC         UTC
Arctic/      EET     GMT        iso3166.tab MST7MDT   PST8PDT     WET
Asia/        Egypt   GMT0      Israel       Navajo   right/      W-SU
Atlantic/    Eire    GMT-0      Jamaica     NZ       ROC         zone.tab
Australia/   EST     GMT+0     Japan        NZ-CHAT  ROK         Zulu
Brazil/      EST5EDT  Greenwich Kwajalein    Pacific/  Singapore
Canada/      Etc/    Hongkong   Libya       Poland    Turkey
CET         Europe/  HST       MET          Portugal  UCT在這裏面我們就可以找到自己所在城市的timezone文件.那麼如果我們想查看對於每個timezone當前的時間我們可以用zdump命令
代碼:
# zdump Hongkong
Hongkong  Fri Jul  6 06:13:57 2007 HKT那麼我們又怎麼來告訴系統我們所在timezone是哪個呢?方法有很多,這裏舉出兩種

第一個就是修改/etc/localtime這個文件,這個文件定義了我麼所在的localtime zone.
我們可以在/usr/share/zoneinfo下找到我們的time zone文件然後拷貝去到/etc/localtimezone(或者做個symboliclink)

假設我們現在的time zoneBST(也就是英國的夏令時間,UTC+1)
代碼:
# date
Thu Jul  5 23:33:40 BST 2007
我們想把time zone換成上海所在的時區就可以這麼做
代碼:
# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai/etc/localtime
# date
Fri Jul  6 06:35:52 CST 2007
這樣時區就改過來了(注意時間也做了相應的調整)

第二種方法也就設置TZ環境變量的值. 許多程序和命令都會用到這個變量的值. TZ的值可以有多種格式,最簡單的設置方法就是使用tzselect命令
代碼:
# tzselect
...
TZ='America/Los_Angeles';export TZtzselect
會讓你選擇所在的國家和城市(我省略了這些步驟),最後輸出相應的TZ變量的值.那麼如果你設置了TZ的值之後時區就又會發生變化

代碼:
# date
Thu Jul  5 15:48:11 PDT 2007
通過這兩個例子我們也可以發現TZ變量的值會override/etc/localtime. 也就是說當TZ變量沒有定義的時候系統才使用/etc/localtime來確定timezone. 所以你想永久修改timezone的話那麼可以把TZ變量的設置寫入/etc/profile

好了現在我們知道怎麼設置時區了,下面我們就來看看如何設置Linux的時間吧

 

3. Real TimeClock(RTC) and System Clock

說道設置時間這裏還要明確另外一個概念就是在一臺計算機上我們有兩個時鐘:一個稱之爲硬件時間時鐘(RTC),還有一個稱之爲系統時鐘(SystemClock)

硬件時鐘是指嵌在主板上的特殊的電路, 它的存在就是平時我們關機之後還可以計算時間的原因
系統時鐘就是操作系統kernel所用來計算時間的時鐘. 它從19701100:00:00UTC時間到目前爲止秒數總和的值在Linux下系統時間在開機的時候會和硬件時間同步(synchronization),之後也就各自獨立運行了

那麼既然兩個時鐘獨自運行,那麼時間久了必然就會產生誤差了,下面我們來看一個例子
代碼:
# date
Fri Jul  6 00:27:13 BST 2007
# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST  -0.968931 seconds 
通過hwclock--show 命令我們可以查看機器上的硬件時間(alwaysin local time zone), 我們可以看到它和系統時間還是有一定的誤差的,那麼我們就需要把他們同步

如果我們想要把硬件時間設置成系統時間我們可以運行以下命令
代碼:
# hwclock --hctosys  
反之,我們也可以把系統時間設置成硬件時間
代碼:
# hwclock --systohc  
那麼如果想設置硬件時間我們可以開機的時候在BIOS裏設定.也可以用hwclock命令
代碼:
# hwclock --set --date="mm/dd/yyhh:mm:ss"  
如果想要修改系統時間那麼用date命令就最簡單了
代碼:
# date -s "dd/mm/yyyy hh:mm:ss"  

現在我們知道了如何設置系統和硬件的時間. 但問題是如果這兩個時間都不準確了怎麼辦?那麼我們就需要在互聯網上找到一個可以提供我們準確時間的服務器然後通過一種協議來同步我們的系統時間,那麼這個協議就是NTP. 注意接下去我們所要說的同步就都是指系統時間和網絡服務器之間的同步了

 

4. 設置NTPServer前的準備

其實這個標題應該改爲設置"NTP Relay Server"前的準備更加合適. 因爲不論我們的計算機配置多好運行時間久了都會產生誤差,所以不足以給互聯網上的其他服務器做NTPServer. 真正能夠精確地測算時間的還是原子鐘.但由於原子鐘十分的昂貴,只有少部分組織擁有, 他們連接到計算機之後就成了一臺真正的NTPServer. 而我們所要做的就是連接到這些服務器上同步我們系統的時間,然後把我們自己的服務器做成NTP RelayServer再給互聯網或者是局域網內的用戶提供同步服務

好了,前面講了一大堆理論,現在我們來動手實踐一下吧. 架設一個NTP Relay Server其實非常簡單,我們先把需要的RPM包裝上
是否已經安裝了NTP包可以用這條命令來確定:

[root@NTPser ~]# rpm -qa | grep ntp
ntp-4.2.2p1-9.el5_4.1
chkfontpath-1.10.1-1.1
出現以上代碼則表示已安裝NTP包,否則用下面方法安裝:
代碼:

# rpm -ivh ntp-4.2.2p1-5.el5.rpm
 
那麼第一步我們就要找到在互聯網上給我們提供同步服務的NTPServer

http://www.pool.ntp.orgNTP的官方網站,在這上面我們可以找到離我們城市最近的NTPServer. NTP建議我們爲了保障時間的準確性,最少找兩個個NTPServer
那麼比如在英國的話就可以選擇下面兩個服務器
0.uk.pool.ntp.org
1.uk.pool.ntp.org

它的一般格式都是number.country.pool.ntp.org

第二步要做的就是在打開NTP服務器之前先和這些服務器做一個同步,使得我們機器的時間儘量接近標準時間
這裏我們可以用ntpdate命令手動更新時間
代碼:
# ntpdate 0.uk.pool.ntp.org
 6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset-38908.575181 sec
# ntpdate 0.pool.ntp.org
 6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset-0.000065 sec
假如你的時間差的很離譜的話第一次會看到調整的幅度比較大,所以保險起見可以運行兩次. 那麼爲什麼在打開NTP服務之前先要手動運行同步呢?
1.
因爲根據NTP的設置,如果你的系統時間比正確時間要快的話那麼NTP是不會幫你調整的,所以要麼你把時間設置回去,要麼先做一個手動同步
2.
當你的時間設置和NTP服務器的時間相差很大的時候,NTP會花上較長一段時間進行調整.所以手動同步可以減少這段時間

5. 配置和運行NTPServer

現在我們就來創建NTP的配置文件了, 它就是/etc/ntp.conf.我們只需要加入上面的NTPServer和一個driftfile就可以了
代碼:
# vi /etc/ntp.conf

server 210.72.145.44     #這是中國國家授時中心的IP
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
                                     
fudge 127.127.1.0 stratum 0  stratum
  這行是時間服務器的層次。設爲0則爲頂級,如果要向別的NTP服務器更新時間,請不要把它設爲0

driftfile/var/lib/ntp/ntp.drift 
非常的簡單. 接下來我們就啓動NTP Server,並且設置其在開機後自動運行
代碼:
# /etc/init.d/ntpd start
# chkconfig --level 35 ntpd on

 

6. 查看NTP服務的運行狀況

現在我們已經啓動了NTP的服務,但是我們的系統時間到底和服務器同步了沒有呢? 爲此NTP提供了一個很好的查看工具: ntpq(NTP query)

我建議大家在打開NTP服務器後就可以運行ntpq命令來監測服務器的運行.這裏我們可以使用watch命令來查看一段時間內服務器各項數值的變化
代碼:
# watch ntpq -p
Every 2.0s: ntpq-p                                 Sat Jul  7 00:41:45 2007

    remote          refid      st t when poll reach  delay   offset  jitter
===========================================================
+193.60.199.75   193.62.22.98     2 u  52   64  377    8.578   10.203 289.032
*mozart.musicbox 192.5.41.41      2 u  54   64  377   19.301  -60.218 292.411

 

現在我就來解釋一下其中的含義

  remote: 它指的就是本地機器所連接的遠程NTP服務器
      refid:
它指的是給遠程服務器(e.g. 193.60.199.75)提供時間同步的服務器
          st:
遠程服務器的層級別(stratum. 由於NTP是層型結構,有頂端的服務器,多層的RelayServer再到客戶端.所以服務器從高到低級別可以設定爲1-16.爲了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別爲1的服務器的.
            t:
這個.....我也不知道啥意思^_^
    when:
我個人把它理解爲一個計時器用來告訴我們還有多久本地機器就需要和遠程服務器進行一次時間同步
       poll:
本地機和遠程服務器多少時間進行一次同步(單位爲秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和服務器同步的頻率也就增加了,可以儘快調整到正確的時間範圍.之後poll值會逐漸增大,同步的頻率也就會相應減小
    reach:
這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加
    delay:
從本地機發送同步要求到服務器的roundtrip time
    offset:
這是個最關鍵的值,它告訴了我們本地機和服務器之間的時間差別.offset越接近於0,我們就和服務器的時間越接近
     jitter:
這是一個用來做統計的值.它統計了在特定個連續的連接數裏offset的分佈情況. 簡單地說這個數值的絕對值越小我們和服務器的時間就越精確

那麼大家細心的話就會發現兩個問題: 第一我們連接的是0.uk.pool.ntp.org爲什麼和remoteserver不一樣?第二那個最前面的+*都是什麼意思呢?

第一個問題不難理解,因爲NTP提供給我們的是一個cluster server所以每次連接的得到的服務器都有可能是不一樣.同樣這也告訴我們了在指定NTPServer的時候應該使用hostname而不是IP

第二個問題和第一個相關,既然有這麼多的服務器就是爲了在發生問題的時候其他的服務器還可以正常地給我們提供服務.那麼如何知道這些服務器的狀態呢?這就是第一個記號會告訴我們的信息

* 它告訴我們遠端的服務器已經被確認爲我們的主NTPServer,我們系統的時間將由這臺機器所提供
+
它將作爲輔助的NTP Server和帶有*號的服務器一起爲我們提供同步服務.*號服務器不可用時它就可以接管
-遠程服務器被clusteringalgorithm認爲是不合格的NTPServer
x
遠程服務器不可用

 

瞭解這些之後我們就可以實時監測我們系統的時間同步狀況了

 

7. NTP安全設置

運行一個NTP Server不需要佔用很多的系統資源,所以也不用專門配置獨立的服務器,就可以給許多client提供時間同步服務, 但是一些基本的安全設置還是很有必要的
那麼這裏一個很簡單的思路就是第一我們只允許局域網內一部分的用戶連接到我們的服務器.第二個就是這些client不能修改我們服務器上的時間

關於權限設定部分 
權限的設定主要以restrict 這個參數來設定,主要的語法爲: 
restrict IP
地址mask 子網掩碼參數 
其中 IP 可以是IP地址,也可以是 default default 就是指所有的IP 
參數有以下幾個: 
ignore
 :關閉所有的NTP 聯機服務 
nomodify
:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。 
notrust
:客戶端除非通過認證,否則該客戶端來源將被視爲不信任子網 
noquery
:不提供客戶端的時間查詢 
注意:如果參數沒有設定,那就表示該IP (或子網)沒有任何限制!

/etc/ntp.conf文件中我們可以用restrict關鍵字來配置上面的要求

首先我們對於默認的client拒絕所有的操作
代碼:
restrict default kod nomodify notrap nopeernoquery

然後允許本機地址一切的操作
代碼:
restrict 127.0.0.1

最後我們允許局域網內所有client連接到這臺服務器同步時間.但是拒絕讓他們修改服務器上的時間
代碼:
restrict 192.168.1.0 mask 255.255.255.0 nomodify

把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置. NTP還可以用key來做authentication,這裏就不詳細介紹了

 

8. NTPclient的設置

做到這裏我們已經有了一臺自己的Relay Server.如果我們想讓局域網內的其他client都進行時間同步的話那麼我們就都應該照樣再搭建一臺RelayServer,然後把所有的client都指向這兩臺服務器(注意不要把所有的client都指向Internet上的服務器). 只要在client/etc/ntp.conf加上這你自己的服務器就可以了
代碼:
server ntp1.leonard.com
server ntp2.leonard.com

 

LINUX客戶端使用
ntpdate 172.30.218.114 
來向NTP服務器同步自己的時間
其它LINUX如果僅作爲只客戶端的話,則不能啓動ntpd服務!否則無法運行ntpdata 服務器地址來同步時間
之後可以使用cron或修改crontab文件定期向NTP服務器更新時間,並用
# hwclock --systohc  
將系統時間設置爲硬件時間

9. 一些補充和拾遺(挺重要)

1. 配置文件中的driftfile是什麼?
我們每一個systemclock的頻率都有小小的誤差,這個就是爲什麼機器運行一段時間後會不精確.NTP會自動來監測我們時鐘的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了

2. 如何同步硬件時鐘?
NTP
一般只會同步systemclock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了
代碼:
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes

 

3、利用crontabLINUX NTP定時更新時間
注:讓linux運行ntpdate更新時間時,linux不能開啓NTP服務,否則會提示端口被佔用:如下
[root@ESXI ~]# ntpdate1.rhel.pool.ntp.org                                 
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

crontab
文件配置簡要說明
命令格式的前一部分是對時間的設定,後面一部分是要執行的命令。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值範圍和含義如下:
分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了數字還有幾個個特殊的符號就是“*”“/”“-”“,”“*”代表所有的取值範圍內的數字,“/”代表每的意思,“*/5”表示每5個單位,“-”代表從某個數字到某個數字,“,”分開幾個離散的數字。以下舉幾個例子說明問題:
每天早上6點:
0 6 * * *  command
每兩個小時:
0 */2 * * *  command
晚上11點到早上8點之間每兩個小時,早上八點:
0 23-7/2,8 * * * command
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點:
0 11 4 * 1-3 command 
1
1日早上4點:
0 4 1 1 * command

3.3、設置開機自動啓動服務
運行setup或其它服務設置工具,將crond服務勾選上 
chkconfig --level 2345 crond on  定義在這幾個系統運行級別上啓用crond(系統安裝完默認就是這個設置)

 

10.NTP客戶端的設置

一、LINUX做爲客戶端自動同步時間
如果想定時進行時間校準,可以使用crond服務來定時執行。
編輯/etc/crontab 文件
加入下面一行:

30 8 * ** root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w  #192.168.0.1NTP服務器的IP地址
然後重啓crond服務
service crond restart 
這樣,每天 8:30Linux 系統就會自動的進行網絡時間校準。

 

二、WINDOWS 需要打開windowstime服務和RPC的二個服務
如果在打開windowstime 服務,時報錯誤1058,進行下面操作 
1.
運行 cmd 進入命令行,然後鍵入
w32tm /register 
進行註冊
正確的響應爲:W32Time 成功註冊。

2.如果上一步正確,用 netstart "windows time" net start w32time 啓動服務。

 

11.其它造成無法成功更新的原因:
1、客戶端的日期必須要設置正確,不能超出正常時間24小時,不然會因爲安全原因被拒絕更新。其次客戶端的時區必須要設置好,以確保不會更新成其它時區的時間。

2
fudge 127.127.1.0stratum 10 如果是LINUX做爲NTP服務器,stratum(層級)的值不能太大,如果要向上級NTP更新可以設成2

3
LINUXNTP服務器必須記得將從上級NTP更新的時間從系統時間寫到硬件裏去hwclock --systohc 

NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了

代碼:
 # vi /etc/sysconfig/ntpd
 SYNC_HWCLOCK=yes

4
Linux如果開啓了NTP服務,則不能手動運行ntpdate更新時間(會報端口被佔用),它只能根據/etc/ntp.confserver 字段後的服務器地址按一定時間間隔自動向上級NTP服務器更新時間。可以運行命令ntpstat 查看每次更新間隔如:
[root@ESXI ~]# ntpstat
synchronised to NTP server (210.72.145.44) at stratum 2
    #NTP服務器層次爲2,已向210.72.145.44 NTP同步過
   time correct to within 93 ms                     #時間校正到相差93ms之內
   polling server every 1024 s                      #1024秒會向上級NTP輪詢更新一次時間 

 

 

 

NTP客戶端安裝實施步驟:

 

 

1 查看是否安裝ntp服務

# rpm -qa |grep ntp

fontpackages-filesystem-1.44-8.el7.noarch

ntpdate-4.2.6p5-22.el7.x86_64

ntp-4.2.6p5-22.el7.x86_64

python-ntplib-0.3.2-1.el7.noarch

 

2 如沒有安裝需安裝ntp服務

# yum install ntp

 

3 修改ntp配置文件,添加時間源服務器

#vim /etc/ntp.conf

 

添加:時間源服務器

 

 

4 配置閥值參數設置

4.1使用-x項,進行平滑同步時間

#vim /etc/sysconfig/ntpd


配置項說明:

OPTIONS="-x -u ntp:ntp -p  /var/run/ntpd.pid"  :使用-x選項

SYNC_HWCLOCK=yes    將系統與硬件時間進行同步

 

4.2不使用-x項及默認的-g,進行跳躍同步時間

#vim /etc/sysconfig/ntpd

 

配置項說明:

OPTIONS=" -u ntp:ntp -p  /var/run/ntpd.pid"  :不使用-x選項

SYNC_HWCLOCK=yes    將系統與硬件時間進行同步

 

4.3默認的-g,忽略1000s時間現在同步  

#vim /etc/sysconfig/ntpd

 

配置項說明:

OPTIONS=" -g ntp:ntp -p  /var/run/ntpd.pid"  :使用-g選項

SYNC_HWCLOCK=yes    將系統與硬件時間進行同步

 

5 啓動ntpd服務,啓動之前先通過(ntpdate 時間源IP對事件進行1-2次同步)

# ntpdate IP   #確保同時間源只有較小誤差

#systemctl start ntpd     #啓動ntpd服務

#systemctl enable ntpd  #開機自動啓動ntpd服務

 

 

 

6 查看同時間源的偏移量

#ntpdate –d IP

 

原因分析

經過查詢資料,NTP的時間同步有兩種方式,一種是通過ntpdate進行手動調整(也可以做成定時任務);一種是通過ntpd服務進行自動調整。目前天威部署的NTP全是以第二種ntpd服務的方式配置的。

 

ntpdate就是執行該命令的時候就將客戶端的時鐘與服務器端的時鐘做下同步,不管差異多大,都是一次調整到位。

 

ntpd服務的方式,又有兩種策略,一種是平滑、緩慢的漸進式調整(adjusts  the clock in small steps所謂的微調);一種是步進式調整(跳躍式調整)。兩種策略的區別就在於,微調方式在啓動NTP服務時加了個“-x”的參數,而默認的是不加“-x”參數。

 

假如使用了-x選項,那麼ntpd只做微調,不跳躍調整時間,但是要注意,-x參數的負作用:當時鐘差大的時候,同步時間將花費很長的時間。-x也有一個閾值,就是600s,當系統時鐘與標準時間差距大於600s時,ntpd會使用較大步進值的方式來調整時間,將時鐘步進調整到正確時間。

 

假如不使用-x選項,那麼ntpd在時鐘差距小於128ms時,使用微調方式調整時間,當時差大於128ms時,使用跳躍式調整。

 

這兩種方式都會在本地時鐘與遠端的NTP服務器時鐘相差大於1000s時,ntpd會停止工作。在啓動NTP時加了參數“-g”就可以忽略1000S的問題。

以下是man ntpd裏關於加參數“-x”的描述:


 -x 

Normally,  the time is slewed if the offset is less than the step threshold, which  is 128 msby default, and stepped if above  the  threshold.  This option  sets the  threshold to 600 s, which is well within the accuracy window to  set the clock manually. Note: Since the slew rate of typical Unix kernels is  limited to 0.5 ms/s, each second of adjustment requires an  amortization interval of  2000 s. Thus, an adjustment as much as  600 s  will take  almost  14  days to  complete. This option can be used with the -g and -q options. See the tinker  command for other options. Note: The kernel time discipline is disabled with  this option.

 

Offset(與服務器的時間差)

0-128ms

128ms-600s

600s-1000s

1000s以上

使用-X參數

微調

微調(速度大約是0.5ms/s,調整600秒要14天左右)

跳躍

退出(加-g參數可忽略)

不使用-X參數

微調

跳躍

跳躍

退出(加-g參數可忽略)

只有對於跳躍式的校正時間,系統日誌纔會記錄。

 

啓動:

/etc/init.d/ntpd start 或 /etc/init.d/ntpd restart

查看端口使用情況:

netstat -tlunp | grep ntp

查看本機作爲client更新time的過程:

ntptrace

查看ntpd的運行信息:

ntpstat

查看所有層次time service provider的詳細信息:

ntpq –pn

Client單獨用ntpdate更新時間:

ntpdate ntp_server_ip其後可能需要hwclock -w (clock -w)寫入BIOS timer

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章