19
Как решить проблему деплоя тысяч серверов?

Kubasov 1 7_deploy

Embed Size (px)

Citation preview

Page 1: Kubasov 1 7_deploy

Как решить проблему деплоя тысяч серверов?

Page 2: Kubasov 1 7_deploy

pssh

ClusterIt

Page 3: Kubasov 1 7_deploy

● Пофайловая раскладка

● checkout из репозитория (svn,cvs,etc..) на сервер

● Символическая ссылка на stable

● Использование пакетного менеджера

Виды деплоя

Page 4: Kubasov 1 7_deploy

● Не справляются с нагрузкой

● Излишне умные

● Требуюь больше времени при допиливании

● Усложняется поддержка обновлений

Проблемы коробочных решений

Page 5: Kubasov 1 7_deploy

Пишем сами

1) Интерфейс должен быть выполнен в виде API

2) Исполняющая часть должна быть легкой

3) Сервис не должен принимать самостоятельных решений

4) Формат конфигов должен быть предельно простым

5) Система должна поддерживать различные механизмы выполнения задач

Page 6: Kubasov 1 7_deploy

● Используем пакетный менеджер

● Собираем пакет на build-server'е

● Используем транзакции

● Используем механизм `repackage` для RPM

● Впиливаем отдачу версии в сам продукт

● Контролируем целостность и актуальность конфигов и пакетов

Принципы работы

Page 7: Kubasov 1 7_deploy

● Оператор ставит задачи в очередь на выполнение

● Менеджер очереди отдает команды исполняющим демонам

● Исполняющий демон выполняет сценарий

● Контроль ошибок и ведение журнала выполнения сценария

● Обработка событий

Requirements

Page 8: Kubasov 1 7_deploy

1) mntd исполнительный статический демон на C

2) mntqd менеджер очереди

3) mntw web морда для управления

4) Протокол взаимодействия - SOAP

Получилось

Page 9: Kubasov 1 7_deploy

SOAP (gSOAP)

● Универсальный протокол взаимодействия

● SMTP/HTTP/FTP...

● Быстрая разработка

● Автоматическая генерация WSDL и XML (XSD)

Page 10: Kubasov 1 7_deploy

<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)

Page 11: Kubasov 1 7_deploy

Взаимодействие

server1 server2 server3

mntqd queue managerpolicy-serverweb interface

mntdmntd

mntd

SOAPsome service

SOAP

exec

Page 12: Kubasov 1 7_deploy

Основные методы

● exec - выполнить сценарий

● status - получить статус сервера

● pushfile - положить файл

● periodic_status - периодическая задача получения статуса

● set_task - поставить задачу (через policy-server)

Page 13: Kubasov 1 7_deploy

Список серверов

Очередь задач

Page 14: Kubasov 1 7_deploy

Шаблоны

Мастер постановки задач

Page 15: Kubasov 1 7_deploy

Пример использования

● 10Пб+ данных

● 2000+ машин

● ферма тестовых серверов

● ферма beta-серверов

Хранилище почты

Page 16: Kubasov 1 7_deploy

Алгоритм выкладки

● Релиз-мастер ставит задачу на сборку пакета

● Пакет собирается и уезжает в репозиторий

● Отдаем собранный билд на тест

● Поехали на beta-сервера

● Поехали в бой

Page 17: Kubasov 1 7_deploy

------------------------------- FAIL v v v v v v x x - - -|1|2|3|4|5|6|7|8|9|10|11| |_____| |______| -------------------------------

Скользящее окно

● сдвиг выполнения на N серверов

● архивация выполненных задач

● контроль ошибок

Page 18: Kubasov 1 7_deploy

Автоматизация горизонтального масштабирования

● выделяется пул IP адресов ● в базовом дистрибутиве уже умеется предустановленный mntd● сервер ставит задачу на init (шаблон init_server)

● после наливки остается только включить сервер в нагрузку.● ввод в строй 100 серверов может занимать не более одного часа.

Page 19: Kubasov 1 7_deploy

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

[email protected]

СПАСИБО!