Install&Update ProcessesDmitry Lazarenko,
Director of R&D, Russia
PaaS• Глобальная автоматизация• Простота управления
приложениями• Масштабирование приложения в
зависимости от нагрузки• Целостность и безопасность
данных приложения
PaaS значительно снижает затраты времени и денег на обслуживание
Jelastic is the next generation of cloud hosting which can run and scale
ANY Java & PHP applications with no code changes required
Easy to Create
Set up your cloud
environment in seconds No extra installation or
configuration No APIs to code to Wide range of software
stacks that you need
Easy to Deploy One-click deployment
Application version
control
Git & SVN support
Maven, Ant & Jenkins
support
Easy to Scale Vertical & Horizontal scaling
Fast resource changes
Easy to Manage Managing application
lifecycle
Control and analyze
Вычислительные Контейнеры
• Каждый элемент окружения – отдельный контейнер(REC)
• Все контейнеры типизированы• Для каждого метатипа определен свой протокол по
которому ядро взаимодействует с ним• Взаимодействие ядра и конкретного контейнера
происходит по SSH• Все контейнеры динамически оптимизируются для
оптимальной утилизации ресурсов
Окружения
Окружения
Системная архитектура
Архитектура развертывания
Platform Install&Update
Сложная инфраструктура
Resolver
Database server
Jelastic Core
Hivext Core
Awaikener
Zabbix app server
Zabbix db server
Logging server
RPM repositoryAutotests server
Большое количество площадок
ПроблемыИсторически платформа устанавливалась и обновлялась вручную:
• Разработчики патчили наживую продакшены• Доработка напильником и «Уникальная»
конфигурация• Состав патча/инсталлятора распределен
между головами 3-4 человек
Результат проблем• Установка с 0 растягивается на неделю• Более суток на непрерывное
обновление• Очень большой Downtime• Невозможность предсказать все
проблемы и затраченное время• Про тиражирование можно забыть
Что было нужно?• Управление разворачиванием сложной
конфигурации• Полная автоматизация установки и
обновления• Простая параметризация под конкретную
площадку
Чего пытались добиться?• Дешевое тиражирование платформы• Ускорение процессов установки и
обновления• Минимизация Downtime• Минимизация рисков от человеческого
фактора
Выбор системы автоматизации
• Puppet• Chef• Cfengine• Self-made
Структура Puppet
Классы инфраструктурных харднод
Классы инфраструктурных приложений
Классы инфраструктурных контейнеров
Классы общих приложений
Конфиги хостера
Объявление объектов
Манифесты(Классы) РесурсыОбьекты
Артефакты
Динамические данные (параметризированные
конфигурации и скрипты )
Статические данные(файлы конфигураций и скрипты)
Содержимое инсталлятора• Инфраструктурные приложения• Клиентские приложения• Базы данных• RPM-Пакеты• Конфигурации
RPM• Из них формируются шаблоны
контейнеров:•Tomcat•MySQL•Nginx…
• Собираются с помощью maven• Сохраняются с помощью Jenkins в
центральный RPM-репозиторий
Workflow установки
Puppet Master node
Jem managing application
GIT GIT RepositoryRepository
GIT GIT RepositoryRepository
R&D Department
OperationsDepartment
Install configHosters configObjects declaration
NexusNexus
JenkinsJenkins
RPM repoRPM repo
Установка платформы1. Заранее подготавливается инфраструктура:•Сеть•Делегируется корневая Dns-зона•SSL-сертификаты
2. Нужные параметры зашиваются в скрипт, который:•Устанавливает систему виртуализации•Создает и конфигурирует все инфраструктурные контейнеры
3. Установка полностью автоматизирована ~ 3 часа
Обновление БД• Икрементальные шаблонизированные SQL
скрипты• Специальный менеджер обновления,
который обеспечивает правильный порядок и правильность выполнения скриптов
• Поддержка обратной совместимости
Проблема• Во время обновление БД заблокирована• Много Alter на больших таблицах занимает много
времени (на практике до 2х часов)
Следствие• Downtime инфраструктурных приложений и БД
может достигать нескольких часов
Кластерный режим обновления• Перекидывание виртуальных IP (VIP)
• Смена DNS - A записей
• Смена точки входа в платформу
• Поочередное обновление каждого экземпляра:1. Active-Active
2. Active-Standby (Updating)
3. Standby (Updating)-Active
4. Active-Active
Обновление без Downtime
Обновление БДMulti-Master Replication Manager for MySQL :1.Останавливаем репликацию
2.Запоминаем номер транкзакции T1 (checkpoint)
3.Данные пишутся только на первый узел
4.Обновляем второй узел
5.Включаем репликацию
6.Новые данные копируются с узла 1 на узел 2
7.Меняем роли между 1м и 2м узлом
8.Обновляем первый узел, так же как и второй
9.В итоге кластер БД полностью синхронизирован
Проверка1. CI на нескольких STAGED-площадках:
1. Установка с 0
2. Обновление с одной на другую версию
3. Автотесты
2. CI на нескольких SuperSTAGED-площадках:
1. Обновление на следующую версию
2. Автотесты
3. Только потом обновление Production
Continuous Integration
Скачивание конфигов Скачивание конфигов хостера с репозитория хостера с репозитория
OPSOPS
Скачивание конфигов Скачивание конфигов хостера с репозитория хостера с репозитория
OPSOPS
Установка и запуск Jem Установка и запуск Jem приложенияприложения
Установка и запуск Jem Установка и запуск Jem приложенияприложения
Скачивание манифестов Скачивание манифестов нужной версиинужной версии
с репозитория R&Dс репозитория R&D
Скачивание манифестов Скачивание манифестов нужной версиинужной версии
с репозитория R&Dс репозитория R&D
Скачивание собраных Скачивание собраных артефактов нужной артефактов нужной
версии с Nexusверсии с Nexus
Скачивание собраных Скачивание собраных артефактов нужной артефактов нужной
версии с Nexusверсии с Nexus
Сборка элементов Сборка элементов инфраструктуры черезинфраструктуры через
jem + puppetjem + puppet
Сборка элементов Сборка элементов инфраструктуры черезинфраструктуры через
jem + puppetjem + puppetЗапуск тестов базовой Запуск тестов базовой проверки установкипроверки установки
Запуск тестов базовой Запуск тестов базовой проверки установкипроверки установки
Запуск тестов проверки Запуск тестов проверки всего фунционала, уже на всего фунционала, уже на
уровне пользователяуровне пользователя
Запуск тестов проверки Запуск тестов проверки всего фунционала, уже на всего фунционала, уже на
уровне пользователяуровне пользователя
Отправка результатов Отправка результатов тестирования на почтутестирования на почту
Отправка результатов Отправка результатов тестирования на почтутестирования на почту
Удаление виртуальных Удаление виртуальных серверов и приложения серверов и приложения
JemJem
Удаление виртуальных Удаление виртуальных серверов и приложения серверов и приложения
JemJem
Containers patching
Задача• Применять патчи безопасности на все окружения
всех пользователей
• Давать пользователям возможность
самостоятельно обновить компоненты их
окружений в случае выхода их новой версии
Реалии• Каждый контейнер – отдельная монолитная ОС• Применение 1 патча для одного контейнера
(yum update) занимает от 30 секунд до 10 минут:1. Подключение ко всем репозиториям
2. Проверка зависимостей
3. Загрузка RPM-пакета и его зависимостей
4. Установка пакета
• Среднее количество виртуальных контейнеров на сервер – 200
• Количество серверов 10-40
Проблемы• Установка security-патча на все контейнеры
занимает очень много времени• Многократная дупликация данных (70%
одинаковых данных)• Создание и особенно восстановление из backup
достаточно затратны• Пользователь не может влиять на процесс и
расписание обновлений
Решение• Ушли от монолитной архитектуры контейнеров• Разделили контейнеры на:
• Общие данные/движки: Java, Tomcat, MySQL…• Приватные данные(специфичные конфигурации):• Приложений(настройки, дистрибутивы) • ОС
Решение• Все версии движков находятся на каждом
физическом сервере в специальном каталоге• На всех физических серверах всегда одинаковый
набор версий всех движков• В контейнерах множественные mount points на
конкретные версии движков• В контейнерах находятся только приватные
данные
Решение
SpaceWalk
Результат• Обновление движка\применение security path:
• Remount• Мгновенно
• Значительно сэкономили место и время обновления
• Можно переключиться на любую версию движка – процесс полностью безопасен
• Пользователи могут выбрать применять или нет обновления движков
Обновление физического сервера• Если требуется перезагрузка – применяем kexec
Обновление ОС в контейнерах• Заливаем новый Virtuozzo template на сервер• Меняем template у каждого контейнера• Быстро, но с Downtime
Спасибо!Jelastic.com