2011-02-02 105 views
2

我想在兩臺(或更多)有線聯網的Linux機器之間同步兩個事件。我可以使用NTP來做到這一點嗎?使用NTP事件同步

NTP似乎主要集中在同步到一個時間服務器,在那裏我需要兩臺機器互相同步。那裏有一個微妙的差異。例如,如果一臺機器距時間服務器的距離是第二臺機器的一半,那麼如果我嘗試將兩臺機器直接同步到彼此而不是同步到時間服務器,我可能會獲得更好的同步。

一個稍微不同的問題:如果我要使用NTP,那麼安排事件的最佳方法是什麼?一個cronjob或腳本?如果我要使用像this one這樣的庫,我可以獲得更好的(次秒)同步嗎?

最後,有沒有人知道任何時間同步軟件包,它們適合將兩臺(或更多臺)機器同步到一起,而不一定與時間服務器同步。

感謝您的任何幫助。

回答

2

您可以嘗試將一臺機器委派爲主機,將其餘機器委派爲從機。當發生同步事件時,主機會觸發從機開始。

同步將僅受機器之間的延遲(ping)限制,並且您不需要擔心繫統時鐘的一致性。

+0

所以只要讓一個ntp服務器? – devin 2011-02-02 17:02:28

0

什麼是主機之間的ping延遲變化?什麼樣的起始時間協調流程之間的差異對您來說可以?如何開始流程? Cron非常不精確,並且流程的啓動時間也需要考慮。

如果不同主機的ping時間差別很大,我會這樣做。

  • 使用可靠的公共NTP服務器在事件發生前幾分鐘同步所有協調主機上的時鐘。隨着頻繁的事件,每天3-4次同步應該足夠了。

  • 提前2-3分鐘使用像cron這樣的低精度調度程序,啓動一個簡單的包裝程序外殼腳本,該腳本將在wait()之後提供,例如,事件發生前15秒。然後,包裝腳本啓動tagert應用程序,其優先級高於正常。

  • 的應用程序加載時(磁盤訪問和動態鏈接速度慢),讀取任何所需的數據文件,使所有耗時的計算,等等。然後它會等待,直到使用usleep()ftime()gettimeofday()以亞秒精度開始的時刻,放在fireLasersAtTheMoon()之前,或者是你的目標行動。

顯然,同步如此精確的行爲是非常不合理的,比如網絡通信。如果您的網絡具有可預測的延遲時間,則只需使用往返時間ping進行測量,並在一臺主機上進行主進程以通過ssh向其他主機發送啓動命令,從而考慮延遲時間。