У нас есть центральное хранилище файлов, скажем, на сервере 1 по адресу /srv/www
. Тогда у нас также есть N серверов. Мы хотим, чтобы server-1 мог развертывать свои файлы в /srv/www
ко всем серверам максимально быстро и эффективно.
Есть ли что-то вроде rsync, но вместо указания одной цели, указывается кластер (N серверов) целей?
я думал git
может работать, но можем ли мы указать несколько пультов для нажатия?
Что является лучшим решением, если предположить, что N серверов в конечном итоге могут достигнуть сотен.
Ну оба Twitter и Facebook начали использовать BitTorrent в своих кластерах для распространения новых версий кода. Таким образом они могут отправить код на десятки тысяч серверов за очень короткий промежуток времени по сравнению с централизованными методами развертывания старой школы.
Похоже, вы еще не достигли таких масштабов, но нет ничего плохого в том, чтобы спроектировать вашу систему развертывания так, чтобы она не оказалась узким местом в ближайшее время.
Я не рекомендую git для весов, о которых вы говорите. Это может сработать, но я лично вижу некоторые недостатки в использовании этой модели для выборки.
Есть несколько вещей, которые определяют, как лучше всего это делать:
Для идеальной конвергенции и максимальной скорости вам придется использовать сетевую файловую систему, такую как NFSv4. Кластерные файловые системы, о которых я знаю, не масштабируются до «нескольких сотен» узлов, поэтому это должна быть сетевая файловая система. Это создает свои проблемы, но это означает, что вы достигнете конвергенции в момент обновления файлов в головке NFS.
Для быстрой сходимости вы можете использовать некоторые уловки rsync. Если демон rsync оказывается привязанным к ЦП, вы, безусловно, можете поставить пару-тройку серверов rsync за балансировщиком нагрузки, таким как haproxy. Добавьте к этому задания cron для извлечения данных (или какой-либо другой метод запуска обновлений кода), и вы можете довольно быстро достичь конвергенции.
Для обоих вышеперечисленных вариантов, вероятно, будет хорошей идеей разместить центральный репозиторий на каналах 10GbE для максимальной пропускной способности.
Альтернативой является push-rsync, где он запускается из центрального репозитория для отправки обновлений на ваши серверы. Он не будет сходиться так быстро, как любой из вышеперечисленных, но будет более удобным для вашей внутренней пропускной способности. Используйте несколько хостов, нажимающих на разделенные диапазоны, для повышения скорости.
первый может работать на вас.
[аффилированный] Использование Квати (http://www.kwatee.net) вы можете развернуть на любом количестве серверов. Развертывания являются инкрементными (передаются только измененные файлы) и могут быть распараллелены, поэтому это происходит очень быстро. Вы также можете настроить Kwatee на поддержку балансировщика нагрузки, чтобы серверы удалялись из LB во время обновлений, а затем снова вставлялись. Существует графический интерфейс для настройки параметров развертывания, а затем развертывания можно запускать вручную через графический интерфейс или автоматически с помощью команд Python.