Синхронизация веб-каталогов между серверами с балансировкой нагрузки - PullRequest
2 голосов
/ 22 марта 2012

У меня есть два сервера с балансировкой нагрузки, на каждом из которых работает одна и та же копия различных веб-сайтов на основе PHP.

Пользователь-администратор (или несколько пользователей-администраторов), попадающий на их сайт, может, таким образом, попасть на один или другой сервер при желании изменить содержимое, например загрузить изображение, удалить файл из библиотеки мультимедиа и т. Д.

Эти операции означают, что один или другой или оба сервера не синхронизированы друг с другом и должны быть приведены в соответствие.

В настоящее время я смотрю на rsync для этого с опцией --deleteно я не уверен, как он реагирует на удаление файлов и создание новых файлов между серверами.

т.е. если я удаляю файл на сервере A и rsync с сервером B, файл также должен быть удален с сервера B (так как он больше не существует на A), НО, если я отдельно загружаю файл на сервер B кака также удаление файла с сервера A перед запуском синхронизации, будет ли удален файл, который был загружен на сервер B, так как он не существует на сервере A?

В Интернете рассматриваются несколько руководств посценарий типа «ведущий-ведомый», где сервер B является зеркалом сервера A, и этот процесс просто работает, но в моей ситуации оба сервера фактически являются хозяевами, отражающими друг друга.

I think rsync сохраняетлокальная история файлов, с которыми он имеет дело, и, таким образом, может изящно справиться с этой проблемой, но я не уверен, так ли это на самом деле, или опасно полагаться только на это?

Есть лилучший способ решения этой проблемы?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Я не был доволен своим предыдущим ответом.Слишком похоже на то, что кто-то уже изобрел способ сделать это.

Кажется, что есть!Выезд Унисон .Для этого есть графический интерфейс и все.

0 голосов
/ 30 марта 2012

Во-первых, если вы выполняете двунаправленный rsync (то есть запускаете его сначала в одну сторону, а затем в другую), то вам нужно использовать --update, и вам необходимо точно настроить часы на обоих серверах. Если оба сервера записывают в один и тот же файл, побеждает последняя запись, а ранняя запись теряется.

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

Я предлагаю, чтобы при удалении файла вы записали его имя в файл. Затем вместо использования rsync --delete, сделайте это вручную, например, cat deleted-files | ssh serverb xargs rm -v.

Итак, ваш процесс будет выглядеть примерно так:

ServerA:
rsync  -a --update mydir serverB:mydir
cat deleted-files | ssh serverB xargs rm -v

ServerB:
rsync  -a --update mydir serverA:mydir
cat deleted-files | ssh serverA xargs rm -v

Очевидно, что две синхронизации не могут выполняться одновременно, и я остановил другие важные параметры rsync: вы, вероятно, захотите рассмотреть --delay-updates, --partial-dir и другие.

...