Upload
kuchinskaya
View
859
Download
0
Embed Size (px)
Citation preview
Как решить проблему деплоя тысяч серверов?
pssh
ClusterIt
● Пофайловая раскладка
● checkout из репозитория (svn,cvs,etc..) на сервер
● Символическая ссылка на stable
● Использование пакетного менеджера
Виды деплоя
● Не справляются с нагрузкой
● Излишне умные
● Требуюь больше времени при допиливании
● Усложняется поддержка обновлений
Проблемы коробочных решений
Пишем сами
1) Интерфейс должен быть выполнен в виде API
2) Исполняющая часть должна быть легкой
3) Сервис не должен принимать самостоятельных решений
4) Формат конфигов должен быть предельно простым
5) Система должна поддерживать различные механизмы выполнения задач
● Используем пакетный менеджер
● Собираем пакет на build-server'е
● Используем транзакции
● Используем механизм `repackage` для RPM
● Впиливаем отдачу версии в сам продукт
● Контролируем целостность и актуальность конфигов и пакетов
Принципы работы
● Оператор ставит задачи в очередь на выполнение
● Менеджер очереди отдает команды исполняющим демонам
● Исполняющий демон выполняет сценарий
● Контроль ошибок и ведение журнала выполнения сценария
● Обработка событий
Requirements
1) mntd исполнительный статический демон на C
2) mntqd менеджер очереди
3) mntw web морда для управления
4) Протокол взаимодействия - SOAP
Получилось
SOAP (gSOAP)
● Универсальный протокол взаимодействия
● SMTP/HTTP/FTP...
● Быстрая разработка
● Автоматическая генерация WSDL и XML (XSD)
<message name="exec"><part name="cmd" type="xsd:string"/>
<part name="arg" type="xsd:string"/></message>
<message name="resp"><part name="status" type="xsd:int"/><part name="message" type="xsd:string"/><part name="log" type="xsd:string"/>
</message>
Описание методов (WSDL)
Взаимодействие
server1 server2 server3
mntqd queue managerpolicy-serverweb interface
mntdmntd
mntd
SOAPsome service
SOAP
exec
Основные методы
● exec - выполнить сценарий
● status - получить статус сервера
● pushfile - положить файл
● periodic_status - периодическая задача получения статуса
● set_task - поставить задачу (через policy-server)
Список серверов
Очередь задач
Шаблоны
Мастер постановки задач
Пример использования
● 10Пб+ данных
● 2000+ машин
● ферма тестовых серверов
● ферма beta-серверов
Хранилище почты
Алгоритм выкладки
● Релиз-мастер ставит задачу на сборку пакета
● Пакет собирается и уезжает в репозиторий
● Отдаем собранный билд на тест
● Поехали на beta-сервера
● Поехали в бой
------------------------------- FAIL v v v v v v x x - - -|1|2|3|4|5|6|7|8|9|10|11| |_____| |______| -------------------------------
Скользящее окно
● сдвиг выполнения на N серверов
● архивация выполненных задач
● контроль ошибок
Автоматизация горизонтального масштабирования
● выделяется пул IP адресов ● в базовом дистрибутиве уже умеется предустановленный mntd● сервер ставит задачу на init (шаблон init_server)
● после наливки остается только включить сервер в нагрузку.● ввод в строй 100 серверов может занимать не более одного часа.