Двунаправленная синхронизация rsync

Вопрос или проблема

У меня проблема с двунаправленной синхронизацией данных rsync. Я хочу синхронизировать samba расшаренные папки с двух серверов в одну, создавая их зеркальное отображение, синхронизируя один раз в день ночью. Это должно выглядеть так:

3:00 – /loc1 на /loc2
3:05 – /loc2 на /loc1

Проблема в том, что:

  • люди могут изменять один и тот же файл на обоих серверах, и это может перезаписать изменения с /loc1 на /loc2, когда файл был отредактирован на /loc2, и наоборот
  • когда файл был удален на /loc2, он все еще находится на /loc1, поэтому он будет скопирован снова, и наоборот
  • я думаю, что есть еще проблемы, которые я сейчас не помню ;D

Я использовал такие команды:

rsync -avth --update --max-size=500m --exclude={'*exe','*msi','*zip'} --rsh=ssh -e "ssh -i key" /loc1 /loc2

или

rsync -avth --delete --max-size=500m --exclude={'*exe','*msi','*zip'} --rsh=ssh -e "ssh -i key" /loc1 /loc2

Для меня один сервер должен быть мастером, второй — слейвом. Я прав? Или у вас есть идеи, как это синхронизировать?

слишком длинно для комментария

На мой взгляд, проблемы согласованности, которые вы сами уже подняли, должны быть тревожным сигналом, что ваш подход изначально ошибочен. Большинство стратегии, основанные на репликации, не позволяют вносить изменения на пункт назначения, только на источник файловой системы именно по этой причине.

Существуют решения, которые позволяют вам/вашим пользователям одновременно и прозрачно читать и записывать в идентичную “локальную” файловую систему с двух (или более узлов). Но в таком случае вы обычно говорите о кластерной файловой системе и менеджере блокировок кластера (который предотвращает одновременное открытие одних и тех же файлов для чтения/записи на более чем 1 узле) таких как, например, Red Hat Global File System 2 (GFS2),Oracle Cluster File System 2 (OCFS2) и/или другие. Такая кластерная файловая система будет развернута поверх какой-либо формы либо общего блочного хранения (например, общего SAN LUN, iSCSI-цели, общего SAS-корпуса), либо реплицированного блочного хранения, такого как ресурс с двойным основным DRBD.

Ответ или решение

Двусторонняя синхронизация с помощью rsync: Полное руководство

Введение

Вопрос о двусторонней синхронизации данных между двумя серверами – это распространенная проблема, особенно в случае, когда обе стороны могут изменять одни и те же файлы. В данной статье мы рассмотрим использование rsync для выполнения этой задачи, а также обсудим возможные проблемы, с которыми можно столкнуться.

Архитектура задачи

Ваша цель – создать зеркальную копию данных с двух Samba-разделов на два разных серверах, которые синхронизируются раз в день. Следует учитывать, что изменения могут происходить одновременно на обоих серверах, что приводит к конфликтам и путанице при синхронизации.

Проблемы, которые необходимо решить:
  1. Конфликт изменений: Возможны ситуации, когда файл изменяется одновременно на обоих серверах, и последующая синхронизация перезаписывает изменения.
  2. Удаление файлов: Удаленные файлы на одном сервере могут быть повторно скопированы с другого сервера.
  3. Обработка новых файлов: Необходимо учитывать добавление новых файлов.

Подход к решению проблемы

Для решения указанных выше проблем рекомендуется следующее:

  1. Определение "мастера" и "слейва":

    • Вы можете назначить один сервер в качестве "мастера", на котором пользователи в основном вносят изменения. Второй сервер будет "слейвом", который синхронизируется с мастером. Это уменьшит вероятность конфликтов, но не исключит их полностью.
  2. Использование системы контроля версий:

    • Для отслеживания изменений и разрешения конфликтов между серверами, может быть полезно использовать систему контроля версий (например, Git). Это позволит вам отслеживать изменения, которые происходят на каждом сервере, и автоматически разрешать конфликты при необходимости.
  3. Инструменты для двусторонней синхронизации:

    • Используйте специализированные инструменты для синхронизации, такие как Unison. Он разработан для двусторонней синхронизации и может выявлять конфликты, позволяя пользователям выбирать, какие изменения сохранять.

Пример команд rsync

Если вы всё же решите использовать rsync, вот примеры команд, которые могут вам помочь:

  • Синхронизация из /loc1 в /loc2:
rsync -avth --update --max-size=500m --exclude={'*exe','*msi','*zip'} --rsh="ssh -i key" /loc1/ /loc2/
  • Синхронизация из /loc2 в /loc1:
rsync -avth --update --max-size=500m --exclude={'*exe','*msi','*zip'} --rsh="ssh -i key" /loc2/ /loc1/

Обратите внимание на использование --update, которое предотвращает перезапись более новых файлов. Однако это не решает проблему конфликтов, поэтому более активное использование систем контроля версий или Unison является более предпочтительным решением.

Заключение

Двусторонняя синхронизация с rsync требует тщательного подхода из-за возможных конфликтов и проблем с удалением файлов. Лучше всего рассмотреть использование более специализированных инструментов, таких как Unison, или внедрить систему контроля версий для эффективного управления изменениями. Выбор правильного подхода поможет обеспечить целостность данных и минимизировать риски.

Оцените материал
Добавить комментарий

Капча загружается...