Ubuntu

有沒有辦法在 Ubuntu 上鏡像兩個伺服器?

  • June 15, 2012

我想知道是否可以鏡像兩台伺服器,例如您可以將文件上傳到一台伺服器,然後它們會推送到另一台伺服器等。我對文件鏡像更好奇,它不必鏡像包管理和設置(但這也很酷!)

這在很大程度上取決於手頭的工作。

為什麼需要文件鏡像。您是否要更新網站或內容儲存庫之類的內容,通常可以定期更新。還是您需要實時同步數據?

對於文件的定期非同步鏡像,通常有一個將所有數據上傳到的暫存區就足夠了。並從您將其分發到伺服器的位置。在您的情況下 - 使用兩台伺服器 - 您可以在 srv1 上創建一些暫存文件共享到您將數據傳輸到的位置(通過 FTP、NFS、DAV、SFTP 等),然後讓 cronjob 將文件同步到“實時”目錄srv1 和 srv2。在這種情況下使用 rsync 的最簡單方法是生成一個 ssh 密鑰對,您將使用該密鑰對進行數據傳輸,並且在集群中的所有伺服器上都已授權該密鑰對。

例子:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

這應該給你一個基本的想法。當然,您可能希望將 rsync 呼叫包裝在一些腳本中並實施適當的鎖定,以便在同步時間超過 5 分鐘等情況下它不會執行兩次。此外,暫存區域不是強制性的,這是不言而喻的。您不妨將 srv1:production 直接同步到 srv2:production。僅 srv2 可能會顯示比 srv1 早 5 分鐘的數據。這可能是一個問題,這取決於您如何在兩者之間取得平衡。

非同步分發文件的另一種方法是將它們打包為 rpm 或在您的情況下為 deb 文件。將它們放在一個中央儲存庫中,並讓它們通過 cfengine、monkey 或一些基於 diy 消息匯流排的解決方案之類的東西安裝/更新。這具有對已部署數據進行版本控制的良好副作用,但僅適用於您自己生成和部署的少量數據(例如您自己的軟體的版本)。你不想用這個來分發 TB 的數據,而且它也不適合鏡像高頻變化的內容,比如每隔一分鐘左右。

如果您需要近乎實時地複制數據但不一定是同步的,而不是經常呼叫 cron,您可以使用一些基於 inotify 的方法,例如已經提到的 incron 來呼叫您的同步腳本。另一種可能性是使用 Gamin(如果存在於核心中,它也使用 inotify)並編寫自己的小同步守護程序。最後但同樣重要的是,如果所有文件都通過例如 SFTP 上傳到一台伺服器,您可能會檢查您的 SFTP 伺服器是否允許您定義在某些事件(如文件上傳)後呼叫的掛鉤。這樣你就可以告訴你的伺服器在上傳新數據時觸發你的同步腳本。

如果您需要數據的實時同步鏡像,則可能需要使用集群文件系統。DRDB 已經被命名。它非常適合塊級別的複制,通常用於高可用性 MySQL 設置。您可能還想看看 GFS2、OCFS2、Lustre 和 GlusterFS。儘管 Lustre 和 GlusterFS 並不真正適合兩個伺服器設置。

引用自:https://serverfault.com/questions/119961