Unix伺服器鏡像解決方案

Unix伺服器鏡像解決方案

我們有三台運行 Ubuntu Server 10.04 的伺服器,透過 DNS 在它們之間進行負載平衡。我們使用 Django、nginx 來提供內容,並使用 PostgresQL 作為資料庫。

對於PostgresQL,有一些鏡像解決方案,但是使用“三主”模式鏡像我們的靜態文件的最佳方法是什麼?

我想僅僅重新同步它們並不是一種可擴展且易於維護的方式。

答案1

只要檔案不經常更改並且必須始終保持同步,為什麼不使用 rsync 呢?只要確保您擁有一台用於編輯文件的主伺服器,這樣可以更輕鬆地進行同步。

除此之外,像 NFS 這樣的網路檔案系統可能會起作用,或者你實作類似的東西DRBD以始終保持文件同步。

答案2

還有很多其他解決方案(afs、unionfs...),但 rsync 對於單向複製效果出奇地好,並且具有自我修復功能 - 並且可以隨著您定義的複製路徑進行擴展(單個主伺服器最多可以容納大約5 個從站,但除此之外,可能有充分的理由進行多層複製)。

唯一的問題是複製的時間。由於您使用的是循環 DNS,因此您已經具有伺服器關聯性 - 因此您不會遇到用戶更新伺服器 A 然後因為他正在查看伺服器 B 而看不到更新的問題。 (特別是如果您的程式碼依賴對公共資料庫的DDL 變更)。

如果您必須進行雙向複製(盡可能避免),那麼即時複製系統會更合適。

如果您目前正在手動/透過 cron 執行 rsync,則可以考慮使用 inotify 在檔案發生變更時對檔案執行 rsync,從而使延遲變得非常短。

C。

答案3

當程式碼部署到生產環境時,應該立即部署到所有伺服器。如果此操作得到適當控制,則應將其鏡像為控制的一部分,並且不需要技術解決方案。並非所有行政解決方案都基於技術。

開放EFS是一個旨在實現變更控制和部署的工具,您可能會發現它很有幫助。我自己實現了他們所做的很多事情,但對於沒有基礎的人來說,這將是一個很好的開始。

對於不在變更控制範圍內的靜態伺服器,我過去發現 rsync 是一個合適的解決方案。通常,對於屬於此類別的伺服器,擴充功能不太可能成為問題,但如果是這樣,那就是問題所在網路檔案系統或者AFFS可能會發揮作用。

相關內容