Решение для двустороннего прозрачного решения файловой системы
Мне нужно реализовать какую-то настройку HA, где 2 сервера должны быть в состоянии всегда синхронизироваться, независимо от того, на каком вы пишете. Часть БД может быть покрыта настройкой репликации мастер-мастер. Однако, когда дело доходит до файлов и контента, я не смог найти что-то, чтобы удовлетворить эти потребности очень хорошо. Мне нужно иметь возможность реплицировать /var/www, например, с одного компьютера на другой, и иметь возможность писать на любом из них и всегда иметь одинаковый доступный контент, независимо от того, куда направляется запрос http.
- Унисон: простота в использовании, простая концепция, однако это больше похоже на 2-стороннюю rsync, автоматическое распространение изменений файла не происходит, если вы не запустите его с параметром повтора. Я не уверен, насколько это надежно. Я надеялся на демоноподобную функцию, которая бы "наблюдала" за изменениями содержимого папки.
- glusterfs: простой в настройке, хороший проект, кажется, идеально подходит для того, что мне нужно, однако он не справляется с этим с двух сторон.
- xtreemfs: сложно настроить, если вам нужна репликация (документы довольно сложны для понимания) и, похоже, больше предназначена для "распределенной файловой системы", чем для аспекта репликации.
- ceph: похоже на gluster, но опять же, не думайте, что он обрабатывает двустороннюю репликацию.
- mogilefs: не прозрачно, создаваемое вами приложение должно знать об этом и использовать его сервисы для доступа к файловой системе. Не то, что я могу использовать.
Поэтому я не уверен, является ли двусторонняя репликация чем-то, что обычно не делается, и мне нужно пересмотреть это, или я не исследовал это достаточно, но я в растерянности. Я не вижу других решений.
Есть ли что-нибудь еще, что может обрабатывать автоматическую прозрачную двустороннюю репликацию файлов?
4 ответа
Как насчет DRBD с его двойным основным режимом и кластерной файловой системой, такой как OCFS2 или GFS?
Может работать на удивление хорошо, особенно если ваше дерево каталогов не содержит огромное количество (скажем, миллионов или более) часто меняющихся небольших файлов.
Ceph должен работать, это точка распределенной файловой системы.
Обратите внимание: чем больше у вас хостов, пишущих в один и тот же каталог, тем хуже будет производительность (поскольку они должны быть очень осторожны при синхронизации), наоборот, с некоторой степенью задержки распространения.
Я могу ошибаться, и, конечно, проверить, я думаю, что сработает Gluster или Ceph, обратите внимание, что вы должны предположить, что вам понадобятся ваши резервные копии в какой-то момент с Ceph (пока нет fsck для btrfs).
Запустите несколько тестов, посмотрите, как это работает для вас. Удостоверьтесь, что вы проверяете такие вещи, как суммы md5, и потяните за восстановление типа шнура питания.
Если вам нужна полностью автоматизированная репликация на уровне файловой системы, то либо вам нужна общая файловая система (например, GFS) и какой-либо способ доступа к ней с обеих машин (DRBD, SAN, многопользовательский SCSI, iSCSI). Но кроме аппаратных решений, IME, это не очень надежное решение.
Ранее я использовал rsync для основных обновлений и систему уведомлений / опросов для промежуточных обновлений для аналогичной настройки, но при этом использовалось много смартов в коде приложения. Я также использовал AFS (хотя не для такого рода настройки) и нашел его надежным и масштабируемым; Вы могли бы хотеть взглянуть на это.
Мне удалось сделать это с помощью Gluster, используя такие настройки: http://www.howtoforge.com/high-availability-storage-cluster-with-glusterfs-on-ubuntu
Ключ в том, чтобы НЕ подключать тома удаленно, а локально, и позволить gluster реплицировать папку за томами на обеих машинах, так что любая машина может выйти из строя в любой момент.