Wordpress о репликации IIS с помощью robocopy

10

Мы устанавливаем среду WordPress на 4 серверах IIS. Мы рассматриваем возможность использования запланированной задачи, запускающей скрипт robocopy для репликации каталога WordPress каждые 5 минут.

Каковы мнения о таком подходе? Кто-нибудь когда-либо использовал это или подобное?

joebegborg07
источник
Какие 4 сервера IIS являются физическими или виртуальными машинами? Что вы реплицируете данные или базы данных и конфигурации? Не уверен, почему у вас будет 4 сервера 1, который является мастером (я предполагаю), а остальные пассивны, если вы пытаетесь достичь HA, который не будет работать.
Энтони Форнито
1
Второй вопрос (и, вероятно, самый важный), почему вы используете WordPress на Windows?
Энтони Форнито
Спасибо @AnthonyFornito за ваш ответ. Запуск WordPress на Windows по внутренним причинам. Я просто пытаюсь работать с этим. Я после репликации файлов сайта (репликация базы данных уже осуществляется через MYSQL). Внешние интерфейсы - это виртуальные машины на Azure. Я в основном за решением, где все внешние пользователи используют одни и те же файлы сайта. Есть что-нибудь, что вы могли бы предложить?
joebegborg07

Ответы:

12

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

С лазурью вы можете смотреть на 3 вещи.

  1. Общее хранилище, может потребоваться некоторая стоимость, связанная с получением собственного выделенного хранилища, и я не уверен в конфигурации, однако Azure действительно предлагает это. Это обеспечит доступность всех ваших файлов для каждого сервера, как только они будут записаны.

  2. Azure DFS, DFS - это инструмент синхронизации каталогов на основе Windows, который работает довольно хорошо, также не уверен в стоимости, но настройка может быть немного проще. DFS работает асинхронно, поэтому есть небольшая задержка, но не большая.

  3. (Я собираюсь объяснить, как это будет сделано, а затем никогда больше об этом не говорить, потому что это ужасная идея, и она потерпит неудачу.) Создайте сценарий, который сначала сравнивает данные на всех четырех серверах, а затем копирует дифференциальные данные. Вам нужно будет предоставить общий доступ к каждому каталогу одному серверу, на котором выполняется сценарий, настроить разрешение, чтобы сервер мог читать и писать, а затем устранять неполадки, устранять неполадки.

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

При этом, и вы не пытаетесь тратить деньги, следуйте инструкциям ниже.

  1. посмотрите на программу под названием "бесплатная синхронизация файлов". В бесплатной версии есть несколько действительно хороших функций, я считаю, что есть платная версия, но я не уверен в улучшениях, которые вы получаете. Я использовал его во многих моих средах разработки, когда пытался достичь чего-то похожего на то, что вы хотите сделать, и ленился настраивать DFS.

  2. Сделать доступным для записи только один сервер, это можно легко сделать, настроив URI на каждом сервере, который сообщает, если создать статью перейдет на ServerA, или переписать URL-адрес в вашем web.config, или если WordPress используется php:

    заголовок ('Location: http://myhost.com/mypage.php ');

Каждый займет немного программирования и знания PHP, IIS.

  1. Действительно забавная часть, поскольку ServerA является авторским сервером (только для записи), как мы направляем трафик на ServerB, ServerC и ServerD для чтения без балансировщика нагрузки?

Короткий ответ, который вы не можете, ну, это не совсем верно, однажды у меня был клиент, который был непреклонен в том, чтобы не использовать загрузочный балансировщик, он смог через серию сценариев PowerShell переместить соединение с одного сервера на другой в зависимости от количества рабочие процессы на каждой коробке или что-то в этом роде. В любом случае это очень сложно сделать, и не стоит тратить время и силы на это.

Посмотрите, не можете ли вы настроить балансировку сетевой нагрузки на серверах. Для этого потребуется дополнительный IP-адрес, но только одно изменение DNS и трафик может быть распределен для чтения между 3 серверами.

Удачи!

Энтони Форнито
источник
Большое спасибо за ваши предложения. Единственное центральное хранилище было для нас узким местом, так как у нас была такая настройка раньше, но мы не справлялись с большим трафиком. Нам нужно быстрое решение из-за крайнего срока. В конечном итоге мы использовали resilio - одноранговое решение для синхронизации в реальном времени, которое обнаруживает изменения на любом из серверов и реплицирует их на другой сервер. Я надеюсь, что любой, имеющий такие же или похожие проблемы, мог бы решить эти проблемы так же, как это сделал для нас. Я проверяю ваше предложение перезаписи URL для WP-бэкенда и отправки изменений на другие машины. Спасибо еще раз.
joebegborg07
NLB не работает в Azure (нет второго уровня, если вы хотите по-настоящему ужасных кошмаров, просто попробуйте взглянуть на таблицу ARP на виртуальной машине Azure).
Массимо,
12

Спасибо всем за предложения людей.

В нашем решении использовался метод одноранговой синхронизации с использованием инструмента под названием resilio.

Resilio позволил нам настроить несколько компьютеров (в данном случае IIS Front-end) в одноранговом кластере синхронизации. На каждом компьютере в кластере выбирается папка, которая будет использоваться для процесса синхронизации.

Служба resilio (служба Windows работает в фоновом режиме) отслеживает эти папки на наличие изменений, и если изменение вносится в любую из указанных папок в рассматриваемых интерфейсах, resilio передает эти изменения на другие серверы.

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

joebegborg07
источник
11

Я не думаю, что запланированные задания и Robocopy - отличный подход. Из-за 5-минутного окна будут времена, когда ресурс запрашивается, но сервер, выбранный балансировщиком нагрузки, не будет иметь его в наличии. Для в основном статических сайтов это будет происходить гораздо реже, чем с часто меняющимися занятыми сайтами. Более высокая частота или использование другой технологии синхронизации, такой как Bittorrent Sync (теперь называется Resilio Sync ), может улучшить это, но не устранит проблему.

Поместите ваш wp-контент или, возможно, просто папку wp-content / uploads на общий диск, было бы лучшим решением. Еще один способ взглянуть на это - разместить один из серверов на этой папке, а другие разделить ее. При кэшировании диска нагрузка на сервер не должна быть намного выше, чем на других серверах.

Обновить

Посмотрите на эту статью для идей о кэширования страниц, и это один для CDN. Речь идет о Nginx, так что вам нужно разработать его для IIS, но теория, лежащая в основе этого, справедлива для любого веб-сервера.

Тим
источник
Спасибо за ваше предложение @Tim. Как вы сказали, сайт динамичный, с небольшими обновлениями файлов из-за плагинов WordPress; Это означает, что каждый интерфейс может иметь разные файлы время от времени. Вы когда-нибудь тестировали такую ​​производственную среду (около 500 - 1000 одновременных пользователей); т.е. хранить файлы сайта в центральном репозитории и отображаться через общий диск? Если да, как был опыт.
joebegborg07
Нет, я не проверял этот сценарий - мне это не нужно, потому что я кеширую и использую CDN. Вам потребуется загрузить тестирование внешних серверов, включая внутренний файловый сервер. Однако, если ваши страницы не обрезаны для каждого пользователя, кэширование страниц может значительно снизить вашу нагрузку, как при использовании распространения контента - CloudFlare имеет бесплатный уровень. Это верно, даже если вы обновляете каждые 5 минут. Google "Nginx Microcaching" для теории, лежащей в основе, но вам, очевидно, придется реализовать его по-разному в IIS. Кэширование заголовков очень важно, если вы идете по этому пути. Смотрите обновление выше тоже.
Тим