之前配置ntpd的時候搜到一句話,印象很深刻,也覺得很有標題黨的效果,就借鑒為標題了:
“我認為有幾種人是必須不招聘/裁掉的: 1 用ntpdate代替ntpd的人”
但具體原因不太懂,總覺得還是用ntpdate比較方便。
今天問了紅帽技術支持,對方的解釋是:
ntpd在實際同步時間時是一點點的校准過來時間的,最終把時間慢慢的校正對。而ntpdate不會考慮其他程序是否會陣痛,直接調整時間。
一個是校准時間,一個是調整時間。
以下是一個形象的假設:
linuxtone限制用戶注冊1小時才能發帖。
數據庫服務器在 10:00分接受了我的注冊邀請;
10:03分,ntpdate將數據庫時間強行改成9:35分;
然后10:05分(9:37分)我嘗試發帖,系統判斷我注冊時間是否滿一小時會使用:9:37 - 10:00
最后電腦就邏輯混亂了。。。
類似的帖子網上也有很詳細的說明,貼出來給大家看看:
時鍾的躍變,有時候會導致很嚴重的問題。許多應用程序依賴連續的時鍾??畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。
不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之后,ntpdate使用settimeofday(2)設置系統時間,這有幾個非常明顯的問題:
第一,這樣做不安全。ntpdate的設置依賴於ntp服務器的安全性,攻擊者可以利用一些軟件設計上的缺陷,拿下ntp服務器並令與其同步的服務器執行某些消耗性的任務。由於ntpdate采用的方式是跳變,跟隨它的服務器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以服務器為准)。
第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校准計算機的時間,而且能夠校准計算機的時鍾。
第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。
因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其余的時候,理想的做法是使用ntpd來校准時鍾,而不是調整計算機時鍾上的時間。
NTPD 在和時間服務器的同步過程中,會把 BIOS 計時器的振盪頻率偏差??或者說 Local Clock 的自然漂移(drift)??記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精確的走時。
##############
最后提醒一下使用vmware的各位,因為虛擬機的時鍾不太正常,比正常速度慢好多秒,所以在虛擬機上測試ntpd很難得到理想的結果,我當年就是為這個問題耽擱了好幾天。。
轉自http://www.cnblogs.com/liuyou/archive/2012/07/29/2614330.html