如何確保甚至保證伺服器時間在不同位置的多個數據中心的數十台伺服器之間正確同步?
目前,我們的 Web 應用程序包含一個邏輯,通過將數據的時間戳與伺服器的日期/時間進行比較來檢查發送到 Web 伺服器的數據是否過期。
一切都會順利進行,直到數據中心的某個傢伙不小心修改了其中一個 Web 伺服器的日期/時間並導致我們的 Web 服務出現一些中斷。我的經理當然對此不滿意,並說我們不應該首先使用時間戳來檢查到期……無論如何……
實施網路時間協議,因為數據中心分佈在不同的大陸,所以我們在每個數據中心都有一個 NTP 伺服器。數據中心內的伺服器將有 cron 作業來檢查來自同一數據中心的 NTP 伺服器的時間。如果時間不同步,它將自動更新伺服器日期/時間。
但是我們的經理對此並不滿意,並認為它仍然很容易導致同樣的問題。例如,如果有人不小心修改了 NTP 日期/時間怎麼辦?如果所有 NTP 伺服器彼此不同步怎麼辦?我們可以真正信任哪些 NTP 伺服器?等等等等。。
所以我的問題是:
- 目前在多個數據中心或位置的伺服器之間同步日期/時間的做法是什麼?
- 如何管理 Web 應用程序之間的時間戳?例如,伺服器 A 向伺服器 B 發送數據(包含伺服器 A 的時間戳)(將伺服器 B 之間的時間戳與數據中的時間戳進行比較,以查看它是否已過期。這是為了避免 HTTP 重放)
- 我們真的不應該使用時間戳檢查嗎?
謝謝和最好的問候
數據中心的一些傢伙不小心修改了其中一個 Web 伺服器日期/時間
這是你的第一個問題。它很可能是由以下因素的組合引起的:
- ‘老兄$$ s $$從$$ the $$數據中心”,培訓不足,
- 特權過高
更改系統時間需要管理權限。在不僅具有正確時間而且使用 NTP 管理時間的系統上手動更改時間是培訓不足的標誌。首先解決這個問題,因為在你解決它之前,準確的系統時間可能是你的問題中最明顯的。他們還在這個系統上做什麼,為什麼?
我的經理…說我們不應該首先使用時間戳來檢查到期時間
如果有人提出了可行的替代方案,我至少會考慮。不知何故,我懷疑情況並非如此。
實施網路時間協議,因為數據中心分佈在不同的大陸,所以我們在每個數據中心都有一個 NTP 伺服器。
我會在每個數據中心推薦兩個。我會讓它們各自引用一組不同的外部 NTP 伺服器並相互引用。這將導致更穩定的時間,並使您對單一故障更加穩健。我也是偏執狂和過度設計的東西,所以就是這樣。儘管如此,NTP 伺服器在資源方面幾乎不需要任何資源,因此可以在任何地方執行它們。
數據中心內的伺服器將有 cron 作業來檢查來自同一數據中心的 NTP 伺服器的時間。如果時間不同步,它將自動更新伺服器日期/時間。
這是一個糟糕的計劃。Cron 在 NTP 系統中沒有更改時間的地方。伺服器應該執行真正的 NTP 客戶端。這些客戶端都應該引用(兩個)本地 NTP 伺服器。
如果要使用 cron,請在每台伺服器上使用 cron 來驗證伺服器是否與兩個本地 NTP 伺服器成功同步。您可以通過檢查 ntpq 命令的輸出來做到這一點。您應該了解 ntpq 命令的輸出;這是你的朋友。
要解決您報告的問題,請執行以下操作:
但是我們的經理對此並不滿意,並認為它仍然很容易導致同樣的問題。例如,如果有人不小心修改了 NTP 日期/時間怎麼辦?如果所有 NTP 伺服器彼此不同步怎麼辦?我們可以真正信任哪些 NTP 伺服器?等等等等。。
第一個問題並不瘋狂。如果走極端有點偏執,但很好。答案是:
- 使用多個獨立的參考時鐘。(單個錯誤將優先於其他來源的穩定時間被忽略)
- 使用可靠的參考時鐘(例如 GPS)(如果您的運維人員可以不小心修改 GPS 衛星上的時間,那麼您遇到的問題比網路伺服器時鐘更嚴重。)
- 使用加密密鑰確保您正在與之通信的參考時鐘是您信任的。
第二個是通過將 NTP 伺服器配置為相互引用來解決的。在其他條件相同的情況下,他們往往會齊心協力。還通過使用獨立的可信賴參考時鐘。
- 如果三個較低層參考時鐘之一不同步,它將被忽略。
- 如果兩個嚴重不同步,它們將被忽略。
- 如果所有三個時鐘都嚴重不同步,NTP 將忽略所有三個並儘其所能(仍然非常好,特別是如果它可以參考同層時鐘。)
- 您幾乎只需要擔心這裡的惡意攻擊。
描述這些情況可能會變得複雜,但 NTP 首先是穩定的,如果有準確的來源,它就是準確的。
就信任而言,大多數執行公共 NTP 伺服器的人沒有理由干擾您的時間。他們中的許多人有理由提供準確的時間。就提供準確時間的興趣程度而言,我建議:
- GPS衛星。
- NIST NTP 伺服器。
- 任何知名的第 1 層提供商。
- 任何知名的第 2 層提供商。
- 您的數據中心(假設您購買了主機)可能應該有一個 NTP 伺服器或三個他們自己的伺服器,如果沒有其他的話,供他們自己使用。
此外,這很重要:NTP協議旨在將時間同步到毫秒以內。 不是秒。 如果您使用 cron + ntpdate,您的時間可能會減少幾秒鐘(感謝可變延遲!)。在類似情況下,NTP 將使您的時鐘更加穩定和準確。