Может ли rsync поддерживать синхронизацию «один ко многим»? - PullRequest
7 голосов
/ 08 декабря 2010

Могу ли я синхронизировать изменения с "модельного" сайта, на котором я работаю, на сотнях сайтов на том же сервере с использованием rsync?
Я буду обновлятьобщие файлы шаблонов и JS-скрипты.Если возможно, как бы это настроить?
(я на выделенном сервере Hostgator, на котором работает Apache)

1 Ответ

11 голосов
/ 08 декабря 2010

Прочитайте мой расширенный ответ на отредактированный вопрос ниже.

Самым простым и наивным подходом, вероятно, будет установка скрипта, который просто запускает 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Папка для ваших сайтов, вам нужно только один раз.

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