3. Виды деплоя
●
Пофайловая раскладка
●
checkout из репозитория (svn,cvs,etc..) на сервер
●
Символическая ссылка на stable
●
Использование пакетного менеджера
4. Проблемы коробочных решений
●
Не справляются с нагрузкой
●
Излишне умные
●
Требуюь больше времени при допиливании
●
Усложняется поддержка обновлений
5. Пишем сами
1) Интерфейс должен быть выполнен
в виде API
2) Исполняющая часть должна быть
легкой
3) Сервис не должен принимать
самостоятельных решений
4) Формат конфигов должен быть
предельно простым
5) Система должна поддерживать
различные механизмы выполнения
задач
6. Принципы работы
●
Используем пакетный менеджер
●
Собираем пакет на build-server'е
●
Используем транзакции
●
Используем механизм `repackage` для RPM
●
Впиливаем отдачу версии в сам продукт
●
Контролируем целостность и актуальность конфигов и пакетов
7. Requirements
●
Оператор ставит задачи в очередь на выполнение
●
Менеджер очереди отдает команды исполняющим демонам
●
Исполняющий демон выполняет сценарий
●
Контроль ошибок и ведение журнала выполнения сценария
●
Обработка событий
8. Получилось
1) mntd исполнительный статический
демон на C
2) mntqd менеджер очереди
3) mntw web морда для управления
4) Протокол взаимодействия - SOAP
9. SOAP (gSOAP)
●
Универсальный протокол взаимодействия
●
SMTP/HTTP/FTP...
●
Быстрая разработка
●
Автоматическая генерация WSDL и XML (XSD)
11. Взаимодействие
mntqd queue manager
policy-server
SOAP
web interface
some service
SOAP
mntd mntd
mntd
exec
server1 server2 server3
12. Основные методы
●
exec - выполнить сценарий
●
status - получить статус сервера
●
pushfile - положить файл
●
periodic_status - периодическая задача получения статуса
●
set_task - поставить задачу (через policy-server)
15. Пример использования
Хранилище почты
●
10Пб+ данных
●
2000+ машин
●
ферма тестовых серверов
●
ферма beta-серверов
16. Алгоритм выкладки
●
Релиз-мастер ставит задачу на сборку пакета
●
Пакет собирается и уезжает в репозиторий
●
Отдаем собранный билд на тест
●
Поехали на beta-сервера
●
Поехали в бой
17. Скользящее окно
-------------------------------
FAIL ●
сдвиг выполнения на N серверов
vvvvv vxx- - - ●
архивация выполненных задач
|1|2|3|4|5|6|7|8|9|10|11|
|_____| ●
контроль ошибок
|______|
-------------------------------
18. Автоматизация горизонтального масштабирования
●
выделяется пул IP адресов
●
в базовом дистрибутиве уже умеется
предустановленный mntd
●
сервер ставит задачу на init (шаблон init_server)
●
после наливки остается только включить сервер в нагрузку.
●
ввод в строй 100 серверов может занимать не более одного
часа.
19. СПАСИБО!
Сергей Кубасов
Заместитель технического директора
s.kubasov@corp.mail.ru