Прочитайте мой расширенный ответ на отредактированный вопрос ниже.
Самым простым и наивным подходом, вероятно, будет установка скрипта, который просто запускает rsync для каждого сервера, который вы хотите синхронизировать.
В большинстве случаев это нормально, но я не думаю, что это то, что вы ищете, потому что вы бы сами это поняли ...
Этот метод также имеет следующие недостатки:
Один сервер отправляет весь трафик, каскадирование отсутствует. Так что это единственная точка отказа и узкое место
Это очень неэффективно. Rsync - отличный инструмент, но анализ списка файлов и проверка различий выполняются не очень быстро, если вы хотите синхронизировать сотни серверов
Но что поделаешь?
Настройка rsync для нескольких серверов, очевидно, самый простой способ. Поэтому вам следует начать с этого и оптимизировать свои проблемы.
Вы можете ускорить его, например, используя правильную файловую систему. XFS, вероятно, будет примерно в 50 раз быстрее, чем Ext3.
Вы также можете использовать унисон, который является немного более мощным инструментом и хранит список файлов в кэше.
Вы также можете настроить каскад (Сервер A синхронизируется с Сервером B, синхронизируется с Сервером C).
Вы также можете настроить вытягивание, а не подталкивание ваших клиентов. У вас может быть поддомен для того, что является точкой входа в балансировщик нагрузки, где у вас есть 1 или более серверов, за которыми вы синхронизируете, нажимая с вашего исходного сервера.
Причина, по которой я вам все это рассказываю, заключается в том, что нет идеального пути, вы должны это выяснить в зависимости от ваших потребностей.
Однако я бы определенно порекомендовал посмотреть в GIT.
Git - очень мощная и эффективная система контроля версий.
Вы можете создать git-репозиторий и отправить его на ваши клиентские машины.
Он работает очень хорошо и эффективно, является гибким и масштабируемым, поэтому вы можете построить на этой структуре почти все, включая распределенные файловые системы, каскады, балансировку нагрузки и т. Д.
Надеюсь, я дал вам несколько очков в правильных направлениях, которые вы можете посмотреть.
Edit:
Похоже, вы хотите синхронизировать изменения на одном и том же сервере - или даже на том же жестком диске (который я не знаю, но очень важен для имеющихся у вас возможностей).
Ну, в принципе, все то же самое. Вставить - Перезаписать - Удалить ...
Rsync также является отличным инструментом для этого, потому что он передает изменения постепенно. Не только «возобновляет прерванные переводы».
Но я бы сказал, что это полностью зависит от содержания.
Если у вас много маленьких файлов, таких как, скажем, template, javascript и т. Д., Rsync может быть очень медленным. Возможно, даже быстрее полностью удалить исходную папку и снова скопировать туда файлы. Поэтому rsync (или любой другой инструмент) не должен проверять все файлы на наличие изменений и т. Д.
Вы также можете просто скопировать все с ключом -rf, чтобы все было перезаписано, но тогда у вас могут быть старые файлы, которые были удалены.
Я также знаю много случаев, когда такие вещи делаются с использованием Subversion, потому что людям хочется больше контроля или чего-то такого, что я не знаю. Это также более гибкий.
Однако есть одна вещь, о которой вы должны подумать:
Существует концепция общих данных.
Есть символические и жесткие ссылки.
Вы можете поместить их в файлы и папки (жесткие ссылки только на файлы. Не знаю, почему).
Если вы поместите символическую ссылку A на целевую точку B, файл будет выглядеть как находящийся и названный как символическая ссылка, но ресурс где-то совсем другой.
Но приложения МОГУТ различать. Например, Apache должен быть настроен на использование символических ссылок (в противном случае это было бы проблемой безопасности).
Таким образом, если все ваши изменения находятся в одной папке, вы можете просто поместить символическую ссылку, называемую этой папкой, указывающую на вашу папку, и вам никогда не придется беспокоиться о синхронизации снова, потому что они используют один и тот же ресурс.
Однако есть причины, по которым вы бы этого не хотели:
Они выглядят по-разному.- это звучит абсурдно, но на самом деле это самая распространенная причина, по которой людям не нравятся символические ссылки.Люди жалуются, потому что они «выглядят так странно в своей программе» или что-то в этом роде.
Симлинки ограничены в некоторых возможностях, но поэтому имеют другие огромные преимущества.Как указание кросс-файловой системы и т. Д. Однако.Почти каждый недостаток может быть достаточно хорошо исправлен и обойден в вашем приложении.Жалкая правда в том, что символические ссылки являются фундаментальной особенностью Linux и файловых систем, но их существование иногда забывают при разработке приложения.Это все равно что разрабатывать поезд, но забывать, что есть люди с длинными ногами или что-то в этом роде ...
Жесткие ссылки с другой стороны выглядят точно как файлы, потому что они являются файлами.
И каждая жесткая ссылка, указывающая на один файл, является именно этим файлом.
Звучит запутанно, но подумайте об этом следующим образом:
Каждый файл представляет собой данные на диске.Затем есть некоторый указатель inode, который внутри некоторого каталога с некоторым именем указывает на этот ресурс.
Жесткие ссылки - это просто.Файл содержит только несколько «списков».
Как следствие, они совместно используют одну и ту же блокировку чтения, совместно модифицируются / удаляются и т. Д.
Однако это, конечно, можно сделать только наодна файловая система / устройство, не относящаяся к нескольким устройствам.
Ссылки имеют некоторые большие преимущества.Они совершенно очевидны:
У вас нет повторяющихся данных.Это исключает возможность возникновения несоответствий, и вам не нужно обновлять и меньше места на диске.
Однако иногда это имеет гораздо большее значение.
Например, если вы используете несколько веб-сайтов ивсе они используют Zend Framework.
Это огромный фреймворк shitload, и его кэширование кода операции заполнится как 50 мегабайт оперативной памяти или что-то в этом роде.
Если у вас одна и та же библиотека zendПапка для ваших сайтов, вам нужно только один раз.