Kubasov 1 7_deploy

Preview:

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 серверов может занимать не более одного часа.

Сергей КубасовЗаместитель технического директора

s.kubasov@corp.mail.ru

СПАСИБО!

Recommended