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.本次實驗環境

    操作系統: 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.服務器搭建步驟

    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 

   

   可以看到時間同步誤差為-0.479ms,在毫秒級別,完全符合實驗要求。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM