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