Назад | Перейти на главную страницу

Синхронизация нескольких веб-серверов wordpress в ферме

Моя компания скоро создаст блог, и я планирую настроить два веб-сервера для размещения веб-сайта wordpress для обеспечения избыточности. Обычно, когда мы делаем релизы для сайта в ферме, мы нажимаем на одну сторону, тестируем, а затем выпускаем на другую сторону. Для обновлений WordPress мы можем сделать это достаточно легко. Однако проблема заключается в том, как обрабатывать папку wp-content. Поскольку люди будут публиковать сообщения и загружать графику, их необходимо будет синхронизировать с другим сервером в ферме, независимо от того, на какой сервер пользователь загружает их.

Я мог бы настроить DFS для репликации файлов, но это похоже на излишество.

Я мог бы настроить robocopy на запуск каждые 15 минут или что-то в этом роде, а затем сказать всем, кто публикует, обязательно запланировать публикацию публикации как минимум через 15 минут, чтобы файлы успели реплицироваться.

Есть ли какие-нибудь лучшие решения? Возможно, что-то вроде плагина для wordpress, чтобы при загрузке графики в сообщение они автоматически реплицировались на другие серверы фермы?

Я использую Wordpress в Windows 2008, поэтому решения для Linux мне не помогут.

Я помещаю это как отдельный ответ, потому что это другой подход:

А как насчет того, чтобы поместить изображения в облачное хранилище (Amazon S3 или подобное), а затем попросить ваших пользователей использовать ссылки на облако. Затраты на пропускную способность могут быть немного выше, и, возможно, есть проблемы с обучением, заставляющие пользователей сначала загружать в облако, но это устраняет необходимость проверки локальной файловой системы или перекрестных серверов.

Он также должен масштабироваться независимо от количества развертываемых серверов.

Я не мастер IIS, но надеюсь, что эта техника еще вернется.

Я предполагаю, что есть общее имя хоста, которое сбалансировано по нагрузке между двумя серверами, и что для каждого из них также есть общедоступное имя.

Вам нужно условное перенаправление на один из двух серверов в сочетании с какой-то синхронизацией файлов. Если URI начинается с / wp-content и файл существует, обслуживайте его локально. В противном случае перенаправьте на другой сервер. Сервер A перенаправляет на B и наоборот.

Это должно обеспечить беспроблемный опыт для зрителей - они просто получат временное перенаправление для изображений в окне между запуском публикации и запуском синхронизации. В зависимости от пропускной способности или избыточности, ваш интервал синхронизации может быть намного больше, чем 15 минут, поскольку сайт должен правильно отображаться в момент публикации публикации.

В nginx я бы сделал это с таким блоком:

location ~ ^/wp-content {
  if( -f $request_filename ) {
    expires max;
    break;
  }
  rewrite ^/(.+)$ http://otherserver.com/$1 last;
}

nginx доступен для Windows, но я сомневаюсь, что вы захотите переключить программное обеспечение веб-сервера для этого. Надеюсь, идея может быть преобразована в IIS или другое программное обеспечение, которое вы используете.

Раньше мы использовали Super Flexible File Synchronizer для подобных вещей. Он работает очень хорошо и имеет ряд опций для управления синхронизацией.

Можно ли разместить контент в одном сетевом файловом ресурсе (без DFS)?

Как насчет унисон?

Вы можете использовать для этого rsync. В противном случае, если у вас есть файлы в системе управления версиями, вы можете использовать что-то вроде Capistrano, чтобы иметь возможность развертывать их на разных машинах (и даже откатывать при необходимости).

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

как насчет robocopy со следующими переключателями: 1. Чтобы обнаружить изменения и запустить синхронизацию - / MON: n :: MONitor source; запустить снова, когда будет замечено более n изменений. / MOT: m :: MOnitor source; запустить снова через m минут Время, если изменилось.

  1. параметры экономии полосы пропускания - / RH: hhmm-hhmm :: Run Hours - время, когда могут быть запущены новые копии. / PF :: проверять часы работы для каждого файла (а не для каждого прохода).

neways, что ты наконец использовал для решения этой проблемы?