SUSE Linux實現局域網時間同步

0.前言
    需求是這麼來的,搭建了Storm集羣進行協同過濾算法的計算性能測試,要求精度在毫秒(ms)級別。局域網內40個虛擬機節點,用 date 命令,精度上和效率上都不可行。因此,就搭建了 NTP 服務器。
1.簡介
    簡單的說就是選擇幾部主要主機 (Primary server) 調校時間,讓這些 Primary Servers 的時間同步以後,再開放網絡服務來讓 Client 端聯機,最後使Client 端調整本身的時間。NTP(Network Time Protocol)就是實現這個過程的一個網絡時間協議。它是一個跨越廣域網或局域網的複雜的同步時間協議,可以使得機器得到毫秒級的精度。NTP協議是OSI參考模型的高層協議,符合UDP傳輸協議格式,擁有專用端口(Port)123。隨着時間的推移,計算機的時鐘(硬件時鐘)會傾向於漂移。網絡時間協議(NTP)便可爲路由器、交換機、工做站和服務器之間提供一種時間同步的機制。
詳情: http://www.ntp.org/ (官網連接)

2.本次實驗環境php

    操做系統: SUSE Linux Enterprise Server 11 (x86_64)
    NTP版本:ntpq  4.2.4p8@1.1612-o Sat May  8 09:39:49 UTC 2010 (1) (系統自帶,也可自行下載安裝)
    局域網時間服務器IP:172.18.65.1
    客戶端同步機器IP:172.18.65.2~172.18.65.41 (40臺)

3.服務器搭建步驟html

    1.選擇局域網內一個機器做爲時間同步服務器(172.18.65.1)
    2.修改服務器端NTP的主要配置文件ntp.conf(默認路徑爲:/etc/ntp.conf)
    $vim /etc/ntp.conf
    
server 127.127.1.0              # local clock (LCL)
fudge  127.127.1.0 stratum 10   # LCL is unsynchronized
##
## Add external Servers using
## # rcntp addserver <yourserver>
##
##
## Miscellaneous stuff
##
driftfile /var/lib/ntp/drift/ntp.drift # path for drift file
logfile   /var/log/ntp          # alternate log file
# logconfig =syncstatus + sysevents
# logconfig =all
# statsdir /tmp/                # directory for statistics files
# filegen peerstats  file peerstats  type day enable
# filegen loopstats  file loopstats  type day enable
# filegen clockstats file clockstats type day enable
#
# Authentication stuff
#
keys /etc/ntp.keys              # path for keys file
trustedkey 1                    # define trusted keys
requestkey 1                    # key (7) for accessing server variables
# controlkey 15                 # key (6) for accessing server variables
    增長OR修改如下內容:
     restrict default ignore
    restrict 172.18.65.0 mask 255.255.255.0 nomodify notrap
    #restrict [你的IP] mask [netmask_IP] [parameter]
    #其中 parameter 的參數主要有底下這些:
  • ignore: 拒絕全部類型的 NTP 聯機;
  • nomodify: 客戶端不能使用 ntpc 與 ntpq 這兩支程序來修改服務器的時間參數, 但客戶端仍可透過這部主機來進行網絡校時的;
  • noquery: 客戶端不可以使用 ntpq, ntpc 等指令來查詢時間服務器,等於不提供 NTP 的網絡校時囉;
  • notrap: 不提供 trap 這個遠程事件登陸 (remote event logging) 的功能。
  • notrust: 拒絕沒有認證的客戶端。 
     3.配置文件就ok了,啓動NTP服務器
       172.18.65.1下啓動NTP服務器:service ntp start   或者   /etc/init.d/ntp start
     4.手工發起同步(因爲Suse Linux在11版本中摒棄了ntpdate命令,採用新的sntp命令進行操做)
       在各個客戶端機器上執行:sntp -P no -r 172.18.65.1
       這樣就進行了各客戶端與服務器的時間同步。
     5.每隔一段時間,客戶端自動同步
       $crontab -e
       添加一條如: * 2 * * * * sntp -P no -r 172.18.65.1   # 每隔2個小時,客戶端與服務器同步一次
4.查看NTP運行狀態命令
      $ntpq -q 
      
     ntpq -p 能夠列出目前咱們的 NTP 與相關的上層 NTP 的狀態,上頭的幾個字段的意義爲:
  • remote:亦便是 NTP 主機的 IP 或主機名囉~注意最左邊的符號
    • 若是有『 * 』表明目前正在做用當中的上層 NTP。本實驗中時間服務器是自身同步,因此顯示爲LOCAL(0)
    • 若是是『 + 』表明也有連上線,並且可做爲下一個提供時間更新的候選者。
  • refid:參考的上一層 NTP 主機的地址
  • st:就是 stratum 階層囉!
  • when:幾秒鐘前曾經作過期間同步化更新的動做;
  • poll:下一次更新在幾秒鐘以後;
  • reach:已經向上層 NTP 服務器要求更新的次數
  • delay:網絡傳輸過程中延遲的時間,單位爲 10^(-6) 秒
  • offset:時間補償的結果,單位與 10^(-3) 秒
  • jitter:Linux 系統時間與 BIOS 硬件時間的差別時間, 單位爲 10^(-6) 秒。
5.實驗接着作
    按理說,照着這個步驟來,徹底就實現了這個41臺機器的局域網時間同步。可是,我仍是想知道在任意時刻,
各個客戶端與服務器的時間偏差究竟是多少(實驗要求,必須精確到毫秒級別,可是沒有證據代表時間同步到毫秒級別了)。
考慮在使用ntpq -p命令查看狀態時,有時間補償的offset項,該項代表本時間服務器與上一級時間服務器的同步時間偏差。
因此,將剩下的40個客戶端均設置爲服務器,且將172.18.65.1做爲上級服務器。這樣就能經過ntpq -p命令查看時間同步偏差了。
    修改客戶端的主要配置文件ntp.conf部份內容以下:
   restrict default ignore
   server 172.18.65.1 prefer  #perfer表示優先將該Server IP 做爲時間源
   restrict 172.18.65.0 mask 255.255.255.0 nomodify notrap
   fudge  127.127.1.0 stratum 10   # LCL is unsynchronized
 
   #利用server設定上層NTP服務器,上層NTP服務器的設定方式爲:  
   #server    [IP OR HOSTNAME]    [PREFER]    
   #參數說明:  
   #ip or hostname :上層ntp服務器的ip地址或者域名  
   #prefer : 表示優先使用的主機  
   同步以及查看步驟以下:
   172.18.65.1下啓動NTP服務器:service ntp start   或者   /etc/init.d/ntp start

   各客戶端下啓動服務器:service ntp start linux

   

   能夠看到時間同步偏差爲-0.479ms,在毫秒級別,徹底符合實驗要求。
 
相關文章
相關標籤/搜索