Развертывание файлов на нескольких серверах

11

У нас есть центральное хранилище файлов, скажем, на сервере-1 в /srv/www. Тогда у нас также есть N серверов. Мы хотим, чтобы сервер-1 мог развертывать свои файлы /srv/wwwна всех серверах максимально быстро и эффективно.

Есть ли что-то вроде rsync, но вместо того, чтобы указывать одну цель, указывать кластер (N серверов) целей?

Я думал, что gitможет работать, но мы можем указать несколько пультов, чтобы подтолкнуть тоже?

Что является лучшим решением, если предположить, что N серверов могут в конечном итоге достигать сотен.

Джастин
источник
2
Я предполагаю, что сетевая файловая система не возможна?
CJC
stackoverflow.com/questions/849308/… за трюк с нажатием на несколько пультов. Не уверен насчет сотен, хотя.
CJC

Ответы:

14

Ну, и Twitter, и Facebook начали использовать bittorrent в своих кластерах для распространения новых версий кода. Делая это, они могут передавать код на десятки тысяч серверов за очень короткое время по сравнению с централизованными методами развертывания старой школы.

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

EEAA
источник
1
Как они используют bittorrent?
Драгос
3
Смотрите статьи, на которые я ссылаюсь.
EEAA
@EEAA твиттерная ссылка не работает
gprasant
@gprasant исправлено.
EEAA
7

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

Есть несколько вещей, которые определяют, как лучше всего это сделать:

  1. Насколько большим репо нужно поделиться.
  2. Как быстро это должно сходиться.

Для идеальной конвергенции и максимальной скорости вам придется работать с сетевой файловой системой, такой как NFSv4. Кластерные файловые системы, о которых я знаю, не масштабируются до «нескольких сотен» узлов, поэтому это должна быть сетевая файловая система. Это создает свои собственные проблемы, но это означает, что вы достигнете конвергенции, как только файлы будут обновлены в заголовке NFS.

Для быстрой конвергенции вы можете использовать некоторую хитрость rsync. Если демон rsync в конечном итоге привязан к процессору, вы, безусловно, можете поставить пару-тройку серверов rsync за балансировщиком нагрузки, таким как haproxy. Соедините это с заданиями cron для извлечения данных (или каким-либо другим способом запуска обновлений кода), и вы сможете довольно быстро достичь конвергенции.

Для обоих из вышеперечисленных, вероятно, будет хорошей идеей разместить центральный репозиторий на каналах 10GbE для максимальной пропускной способности.

Альтернативой является push-rsync, где он запускается из центрального репозитория для отправки обновлений на ваши серверы. Он не будет сходиться так быстро, как любой из вышеперечисленных, но будет более дружественным к вашей внутренней пропускной способности. Используйте несколько хостов, нажимающих на разделенные диапазоны для лучшей скорости.

sysadmin1138
источник
1

rdist может работать на вас.

Скотт
источник
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Марк Хендерсон
-1

[филиал] Используя Kwatee ( http://www.kwatee.net ), вы можете развернуть на столько серверов, сколько захотите. Развертывания являются инкрементными (передаются только измененные файлы) и могут быть распараллелены, поэтому это очень быстро. Вы также можете настроить Kwatee на балансировку нагрузки, чтобы серверы удалялись из LB во время обновлений, а затем снова вставлялись. Существует графический интерфейс для настройки параметров развертывания, а затем развертывание может быть инициировано вручную через графический интерфейс или автоматизировано с помощью команд python.

макинтош
источник
Не хочешь объяснить голосование?
Мак
1
Присоединение к сайту только для того, чтобы раскрутить собственный продукт, часто вызывает здесь отрицательные отзывы.
ceejayoz
Независимо от этого, так много для честных и прозрачных ответов
mac