簡體   English   中英

需要在2個負載平衡的服務器上上傳單個文件

[英]Need to upload a single file across 2 load balanced servers

目前,我公司有3個服務器設置。 負載均衡器后面有2個Web框,負載均衡器后面沒有2個Web框(用於Admin,CMS和stats)。 由於目前的資金狀況,我們希望停用不位於負載均衡器后面的單個設備。 盒子上有我們的CMS,媒體子域指向該盒子上的/ home / web / media。 問題是,如果我們刪除該框並將所有代碼(PHP)移植到負載平衡的Web框,那么在CMS中上傳文件時,它只會將其上傳到用戶所點擊框的媒體目錄中。 因此,如果用戶點擊了web1並上傳了文件,則該文件只能在web1的/ home / web / media目錄中訪問。 因此,當文件上傳時,我們需要以某種方式rsync web1和web2上的/ media目錄。 或做其他事情。

您會建議什么是實現此目標的最佳方法?

任何幫助將非常感激。

僅供參考,我們正在運行PHP 5.2,Red Hat Enterprise Linux和Apache 2.0.52

問候,

歐文

您有幾種選擇(已經提到過一些):

  • 將上載的文件存儲在數據庫中(不建議您需要快速隨機訪問的文件)。
  • 使用網絡文件系統(例如NFS或SMB),並將上傳的文件存儲在此處。 (您還可以將代碼復制上載的文件復制到通過NFS或SMB公開的另一台服務器的文件系統中)。
  • 使用群集文件系統,例如GFS或OCFS。

為媒體使用網絡共享不是一個主意,因此您可以隨時在兩個服務器上都使用它嗎?

function scp($username, $host, $port = 22, $file, $destination){

        $dirs = explode("/", $destination);
        array_pop($dirs);
        $dirs = implode("/", $dirs);

//         die("\nscp ".$file." ".$username."@".$host.":".$dirs);

         system("ssh ".$username."@".$host." mkdir -p ".$dirs);
         system("scp ".$file." ".$username."@".$host.":".$destination);
    }

當然,您需要www-data在兩個服務器上都具有其公鑰並具有寫特權

如果要將文件實時上傳到兩台服務器,只需執行此操作。

  1. 用戶將文件上傳到server1
  2. server1處理上載並將其存儲在server1/media
  3. server1server2/api/uploadFile (curl)進行身份驗證的請求
  4. server2處理上載並將其存儲在server2/media

希望有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM