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

Как поддерживать синхронизацию нескольких серверов с файлом?

В настоящее время я управляю кластером серверов PHP-FPM, каждый из которых имеет тенденцию не синхронизироваться друг с другом. Приложение, которое я использую поверх серверов приложений (Magento), позволяет администраторам изменять различные файлы в системе, но теперь, когда сайт находится в кластерной настройке, изменение файла изменяет его только в одном экземпляре (на один из серверов приложений) различных машин в кластере.

Есть ли приложение с открытым исходным кодом для Linux, которое может позволить мне синхронизировать все эти серверы? У меня нет проблем с созданием небольшого экземпляра виртуальной машины, который может отслеживать изменения с машин для синхронизации. Теоретически в идеальном приложении должны быть небольшие клиенты, которые запускаются на каждой машине для синхронизации, которые будут общаться с главным сервером, который затем будет решать, как и что синхронизировать с каждой машиной.

Я уже изучал возможности запуска централизованного файлового сервера, но, к сожалению, мои серверы приложений распределены между EC2 и физическими машинами, что делает это невозможным. Поскольку существует несколько серверов приложений (некоторые из которых создаются динамически в зависимости от загрузки сайта), простая настройка задания cron rsync неэффективна, так как задание cron должно быть изменено на каждой машине для отправки файлов друг другу. машина в кластере, и это будет просто целая куча ненужных передач данных / соединений ssh.

Вы можете рассмотреть возможность использования Puppet или CFEngine для внесения изменений в серверы. Подобные инструменты позволяют вносить контролируемые изменения на все серверы. Они очень помогают поддерживать синхронизацию конфигурации нескольких серверов.

Взгляните на GlusterFS. AFAIK это доступно на EC2.

Репликация / зеркальное отображение основано на файлах, и его довольно легко настроить. Файлы находятся в локальных каталогах в локальных файловых системах узлов.

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

Поскольку я очень хорошо знаком, я не знаю ни одной установки Magneto, которая вносит изменения в файлы или каталоги при обычном использовании, кроме

./var/cache   <-- should be on a distributed cache like Redis or Memcache
./var/report  <-- doesn't need to be network replicated
./var/log     <-- doesn't need to be network replicated
./var/locks   <-- the admin node should operate on a single server
./var/session <-- should be on a distributed cache like Redis or Memcache
./media/catalog/product/cache <-- doesn't need to be network replicated

В любом случае сетевая файловая система, такая как NFS, не будет хорошим выбором - если у вас нет обширного опыта ее защиты и настройки через WAN.

Репликация сетевого блока, например. Gluster / DRBD также не был бы хорошим выбором. Производительность Gluster низкая (и сложная в настройке), и DRBD должен использовать файловую систему с несколькими мастерами, такую ​​как OCFS2, - не идеально.

Новые выпуски Magento также поддерживают хранилище DB для носителей именно по этой причине - хотя это далеко не идеально и просто не является хорошей идеей.

Программное обеспечение для контроля версий (Git / SVN) позаботится о ваших требованиях на уровне кода. Вы можете легко добавить крючок к своей промежуточной машине, чтобы выполнять бесконтактное многократное извлечение производственных систем. Но не будет обслуживать загрузки администратора (изображения и т. Д.).

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

Lipsync - это приложение, которое будет соответствовать вашим требованиям в стиле Dropbox и вносить изменения и при необходимости. Мы использовали его с кластерами Magento несколько раз.