Под большим файловым деревом я имею в виду около 200 тыс. Файлов, и они постоянно растут. Относительно небольшое количество файлов изменяется в любой данный час, хотя.
Под двунаправленным я подразумеваю, что изменения могут происходить на любом сервере и должны быть перенесены на другой, поэтому rsync кажется неуместным.
Под удаленным я подразумеваю, что серверы находятся в центрах обработки данных, но географически удалены друг от друга. В настоящее время есть только 2 сервера, но они могут расширяться со временем.
В режиме реального времени вполне допустимо, чтобы между синхронизацией была небольшая задержка, но запуск cron каждые 1-2 минуты кажется неправильным, поскольку очень небольшая часть файлов может меняться в любой данный час, не говоря уже о минуте.
РЕДАКТИРОВАТЬ : Это работает на VPS, так что я мог бы ограничиться видами вещей на уровне ядра, которые я могу сделать. Кроме того, VPS не богаты ресурсами, так что я бы избегал решений, которые требуют много оперативной памяти (например, Gluster?).
Каков наилучший / наиболее «приемлемый» подход для достижения этой цели? Кажется, что это будет общая потребность, но я пока не смог найти общепринятый подход, что было удивительно. (Я ищу безопасность масс. :)
Я сталкивался с lsyncd для запуска синхронизации на уровне изменения файловой системы. Это кажется умным, хотя и не супер распространенным, и меня немного смущают различные подходы lsyncd. Есть только использование lsyncd с rsync, но кажется, что это может быть хрупким для двунаправленности, поскольку rsync не имеет представления о памяти (например, чтобы узнать, следует ли удалять удаленный файл на A на B или новый файл на B это должно быть скопировано в А). lipsync - это просто реализация lsyncd + rsync, верно?
Затем используется lsyncd с csync2 , например: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ... Я склоняюсь к этому подходу, но csync2 немного странный, хотя я успешно его проверил. Я в основном обеспокоен тем, что мне не удалось найти много подтверждений сообщества этого метода.
Кажется, что людям здесь очень нравится Unison, но кажется, что он больше не находится в активной разработке, и не ясно, есть ли у него автоматический триггер, такой как lsyncd.
Я видел упомянутое Глостер , но, может быть, излишне для того, что мне нужно?
ОБНОВЛЕНИЕ: я закончил тем, что пошел к оригинальному решению, которое я упомянул: lsyncd + csync2. Кажется, он работает довольно хорошо, и мне нравится архитектурный подход, предусматривающий очень слабое объединение серверов, чтобы каждый сервер мог работать самостоятельно неограниченное время независимо от качества связи между ними.
Ответы:
DRBD в режиме Dual-primary с прокси-сервером является опцией.
источник
Вместо синхронизации почему бы не использовать одну и ту же файловую систему через NFS?
источник
Реализация распределенной файловой системы, вероятно, лучше, чем взламывать ее вместе с инструментами и скриптами, особенно если кластер серверов будет расти. Вы также сможете лучше обрабатывать сбитый узел.
Я не думаю, что Gluster (или AFS) является излишним.
источник
В вашем случае я бы порекомендовал комбинацию DRBD в режиме с двумя основными каналами и gfs или ocfs.
Недостаток DRBD в двойном первичном состоит в том, что он будет работать в синхронном режиме. Но скорость записи здесь не так важна, верно?
Альтернативой DRBD может быть Soft-Raid1, использующий много (2+) iSCSI-Targets - но я бы предпочел DRBD с двумя узлами.
источник
Как показано выше, доступно много решений, каждое из которых имеет свои преимущества и недостатки.
Я думаю, что я хотел бы рассмотреть возможность помещения всего дерева под контроль версий (например, Subversion ) и периодической проверки / обновления с обоих серверов в заданиях cron.
источник
После того, как я закончил что-то вроде квеста об одном и том же, я пойду с блеском. Тем не менее, я не сделал и не нашел никаких тестов производительности.
источник