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

Балансировка нагрузки + синхронизация папок

у меня 2 сервера.

  1. Сервер А : содержит
    • mysql
    • Apache
    • nginx
  2. Сервер B : содержит
    • Apache
    • memcached
    • rsync cron (каждые 3 минуты), который извлекает / var / www / content и обновляет свой собственный

Я использую:

В настоящее время Nginx выполняет балансировку нагрузки, запрашивая сервер B для обработки 75% запросов.

Для синхронизации кода приложения (написанного на php) я использую rsync (как описано выше).

Проблема rsync в том, что я не могу справиться с двухсторонней синхронизацией, поэтому я начал искать Унисон.

На данный момент у меня 2 вопроса:

  1. Было бы неплохо попросить nginx направлять все запросы на «отправку файла» серверу A, чтобы серверу B требовалось только извлечение?
  2. Стоит ли мне использовать Unison или какое-либо другое программное обеспечение для такой синхронизации? Могу ли я получить синхронизацию в реальном времени?
  3. Должен ли я использовать какую-либо сетевую файловую систему, которая разделяет содержимое / var / www / с сервера A на сервер B? Если да. Что ты предлагаешь?

Эта асимметричная архитектура удваивает вероятность отказа службы - и это не очень хорошо для производительности.

я использую rsync (как описано выше).

Я не видел объяснения того, как вы используете rsync.

Чтобы синхронизировать код приложения

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

Ваша проблема связана с развертыванием. Если бы узлы были функционально симметричными с репликацией, происходящей для memcache и mysql, то вывести один узел в автономный режим (даже если это просто означает замену конфигурации nginx на прокси / перенаправление всех запросов на другой узел) для развертывания - не проблема. В результате у вас нулевое время простоя для развертывания кода, нулевое время простоя для резервного копирования базы данных, нулевое время простоя для обслуживания базы данных, нулевое время простоя при изменении схемы.

Вы можете использовать инструменты rsync или unison, но вы не получите синхронизации в реальном времени. Должна быть некоторая задержка, пока новые / обновленные файлы не будут синхронизированы, даже если вы запускаете такой инструмент каждую минуту. Вы можете реализовать его, если считаете допустимым небольшую задержку.

Если вы хотите синхронизировать изменения в реальном времени, вам нужно использовать такой инструмент, как NFS / glusterfs или DRBD. Главный недостаток таких инструментов - увеличенные накладные расходы ввода-вывода из-за сетевой задержки. Это становится понятнее, когда общая папка становится огромной, а сетевая задержка увеличивается.