Необходимо загрузить один файл на 2 сервера с балансировкой нагрузки - PullRequest
2 голосов
/ 27 сентября 2010

В настоящее время в моей компании установлено 3 сервера.2 веб-блока за балансировщиком нагрузки и еще один блок за балансировщиком нагрузки (используется для администратора, CMS и статистики).Из-за состояния средств на данный момент мы планируем вывести из эксплуатации нашу единственную коробку, которая не находится за балансировщиком нагрузки.На коробке есть наша CMS, а субдомен медиа указывает на / home / web / media на этой коробке.Проблема в том, что если мы удалим этот блок и перенесем весь код (PHP) в веб-блоки с балансировкой нагрузки, то при загрузке файла в CMS он будет загружать его только в каталог мультимедиа того блока, к которому подключен пользователь.Поэтому, если пользователь нажимает на web1 и загружает файл, этот файл будет доступен только в каталоге / home / web / media на web1.Поэтому нам нужно каким-то образом rsync каталоги / media на web1 и web2 при загрузке файла.Или сделай что-нибудь еще.

Что бы вы посоветовали, чтобы быть лучшим способом сделать это?

Любая помощь будет высоко ценится.

Только для информационных целей мы используем PHP 5.2, Red Hat Enterprise Linux и Apache 2.0.52

С уважением,

Оуэн

Ответы [ 4 ]

3 голосов
/ 27 сентября 2010

У вас есть несколько вариантов (некоторые уже упоминались):

  • Хранить загруженные файлы в базе данных (не рекомендуется для файлов, к которым вам потребуется быстрый произвольный доступ).
  • Используйте сетевую файловую систему, такую ​​как NFS или SMB, и храните загруженные файлы там.(Вы также можете скопировать загруженный файл кода в файловую систему другого сервера через NFS или SMB).
  • Используйте кластерную файловую систему, такую ​​как GFS или OCFS.
2 голосов
/ 27 сентября 2010

Разве это не идея использовать сетевой ресурс для мультимедиа, чтобы вы могли сделать его доступным на обоих серверах в любое время?

0 голосов
/ 28 сентября 2010

Если вы хотите, чтобы файл загружался на оба сервера в режиме реального времени, просто сделайте это.

  1. Пользователь загружает файл в server1.
  2. server1, обрабатывает загрузку исохраняет его в server1/media.
  3. server1 делает аутентифицированный запрос к server2/api/uploadFile (curl)
  4. server2, обрабатывает загрузку и сохраняет его в server2/media.

Надеюсь, что это имеет смысл.

0 голосов
/ 27 сентября 2010

    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 имел свой открытый ключ на обоих серверах и права на запись

...