В настоящее время я управляю кластером серверов 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 несколько раз.