У меня есть 2 веб-сервера, и, возможно, придется добавить еще серверы по ходу дела. Сейчас я синхронизирую эти серверы с помощью lsyncd + csync2. Он хорошо работает с точки зрения производительности, потому что все файлы находятся на обоих серверах (для локального открытия файлов не требуется доступ к сети), но не так хорошо в других случаях.
Одним из примеров этого является удаление файла на сервере 1 и немедленная загрузка нового файла на сервер 1 с тем же именем. Затем файл будет удален с сервера 2, что приведет к удалению вновь загруженного файла на сервере 1, поскольку сервер 2 отправляет событие удаления на сервер 1, чтобы завершить «круг обновления».
Я не могу не думать, что должен быть лучший способ синхронизировать серверы. Я смотрел GlusterFS и вижу, что установка, при которой все файлы реплицируются на все серверы, не рекомендуется. Однако я использую на этих серверах системы CMS, такие как Drupal. Такие системы CMS часто открывают довольно много файлов, и меня беспокоит, что слишком большой сетевой трафик, чтобы получить эти файлы, замедлит запросы.
Было бы неплохо изучить возможность замены lsyncd + csync2 на GlusterFS, настроенную для репликации всех файлов на все узлы, или это плохая идея?
BitTorrent Sync может сделать все за вас. Я использую его для синхронизации файлов между несколькими внутренними серверами в моем доме, и он прекрасно справляется со своей задачей. Еще одна вещь, о которой вам нужно подумать, - это серверная база данных, когда ваше приложение использует CMS. Убедитесь, что происходит репликация MySQL или что-то в этом роде.
GlusterFS сложно развернуть. Для веб-данных уровень синхронизации файлов, например Унисон намного проще в развертывании и обслуживании.
DRBD - идеальное решение для синхронизации данных на уровне блоков. Но вы должны отформатировать их в специальный формат, например OCFS2 или что-то подобное.
Gluster решит вашу проблему, потому что он может удерживать блокировки, распространять изменения - удалять файл на всех других узлах, но он может добавить дополнительную задержку, которая может стать проблемой для веб-сервера. Следующая альтернатива - DRBD + OCFS2 или GFS, но она, вероятно, более сложна, поскольку с gluster вы используете базовую файловую систему - она не работает на уровне блоков, поэтому, если серверы не синхронизированы, это не так сложно исправить, файлы могут не так легко испортиться из-за раздвоения мозгов и т. д.
Мы используем его для почтового сервера, а для каталогов с большим количеством файлов он довольно медленный. Перед развертыванием обязательно все протестируйте. В настоящее время я тестирую монтирование NFS, потому что оно лучше работает с небольшими файлами.
Почему бы вам не использовать такой инструмент, как кукольный ? Напишите один раз в исходный код и, когда он будет готов, разверните его по целям, используя «марионеточный удар» или mcolletive. Это хорошо задокументировано. И вы можете легко добавить серверы позже, если это необходимо.
Вы также можете положиться на инструменты, использующие inotify, такие как lsyncd, работающие на уровне ядра. Он отслеживает изменения в папке и запускает синхронизацию. Но если инструмента, предназначенного для синхронизации файлов в кластере, такого как csync2, недостаточно, я не знаю, что будет.
Чтобы быть уверенным, происходят ли изменения также на сервере 2 или только на сервере 1?