SlideShare a Scribd company logo
Управление окружениями в
                 сложном проекте
                              Chef и другие
             Александр Чистяков, admin@cezurity.com
             DevOps
             Cezurity
             http://vk.com/av



13.10.2012                         www.cezurity.com   1
Давайте знакомиться и дружить

       Я:
       • Дезертировавший кодер на Java
       • Дезертировавший кодер на PHP
       • Дезертировавший кодер на C++
       • Дезертировавший кодер на Perl
       • Немного знаю PowerPoint и Win 7



13.10.2012             www.cezurity.com         2
Пожалуйста, не расходитесь!

       Вы:
       • Разрабатываете веб-приложения?
       • Разрабатываете (компонуете)
         архитектуру веб-приложений?
       • Поддерживаете production систему?
       • Можете назвать первого мэра Санкт-
         Петербурга?


13.10.2012             www.cezurity.com        3
Чем занимается компания Cezurity?

       • Мы разрабатываем свою
         антивирусную систему
       • Работающую через web («облачную»)
       • Но в чем killer features?
             – Бесплатно, без SMS
             – Статистический анализ (все слышали
               про байезианские фильтры спама?)



13.10.2012                  www.cezurity.com          4
Чем занимаюсь в компании я?

       • Поддерживаю production
         инфраструктуру
       • Управляю конфигурацией production
         и development окружений
       • Поддерживаю код некоторых
         подсистем
       • Компоную всю вспомогательную
         инфраструктуру


13.10.2012            www.cezurity.com        5
Быстрое введение в предметную область




13.10.2012              www.cezurity.com             6
Помедленнее, я записываю!

       • Есть сервисы, которые написаны не
         нами
       • Есть сервисы, которые написаны не
         нами, но нами модифицированы
         (исправлены, либо дополнены)
       • Есть сервисы, которые написаны нами
       • Есть правила компоновки и настройки
         этих сервисов
       • Есть production и development
         окружения и ветки кода


13.10.2012             www.cezurity.com        7
Какие задачи нужно решить?

       • Унификация описаний конфигурации
         (желательно все хранить в одном месте)
       • Унификация окружений (development
         окружение – добрый брат-близнец
         production, а не злой)
       • Приведение всех видов сервисов к единому
         представлению (captain Package Manager to
         the rescue!)
       • Необходим общий механизм управления,
         анализа состояния системы и контроля
       • Кроме того, все должно быть четко



13.10.2012               www.cezurity.com            8
Какими принципами руководствуемся?

       • Всё уже придумано до нас!
       • К сожалению, не все придумано для нас
         – готовимся засучить рукава
       • Алгоритм принятия решений:
             –   Тестируем
             –   Измеряем
             –   Анализируем
             –   Повторяем или Выходим
       • Сосед Вася лжет (кстати, все лгут)


13.10.2012                    www.cezurity.com          9
Поехали!

       • Унификация описаний конфигурации
         (желательно все хранить в одном месте)
             – Репозиторий у нас уже есть (Subversion), там и
               будем хранить
       • Возникают новые вопросы:
             – Как в репозитории скомпоновать
               конфигурационные файлы (Вместе с
               приложением? Или все конфиги в одном
               общем месте?)
             – Как хранить конфиги разных окружений
               (Делать брэнчи в Subversion или хранить все в
               разных каталогах одной ветки?)



13.10.2012                     www.cezurity.com                 10
Вопросов пока все больше...

       • Унификация окружений (development
         окружение – добрый брат-близнец
         production, а не злой)
             – Количество ручной работы при
               развертывании нового окружения должно
               быть минимально, иначе окружения
               рассинхронизируются
             – Идеально, когда конфигурация сервисов
               генерируется автоматически по
               декларативно описанным параметрам
               нового окружения



13.10.2012                  www.cezurity.com           11
Но мы будем их записывать...

       • Приведение всех видов сервисов к
         единому представлению (captain
         Package Manager to the rescue!)
             – Кажется, эту типовую задачу решали
               множество раз?
             – http://docs.fedoraproject.org/en-
               US/Fedora_Draft_Documentation/0.1/html/R
               PM_Guide/index.html
             – http://www.debian.org/doc/manuals/maint-
               guide/



13.10.2012                   www.cezurity.com             12
Степень фрустрации пока что возрастает

       • Я сисадмин! Я не хочу ничего читать!
         Я хочу пакеты!




13.10.2012              www.cezurity.com              13
Количество логотипов будет расти...

       • Необходим общий механизм управления,
         анализа состояния системы и контроля
             – Нужно централизовать сбор логов
             – Нужно мониторить основные параметры
               системы и генерировать предупреждения
             – Нужно собирать статистику и рисовать графики
             – Нужно разворачивать новые версии окружения
               согласно установленной процедуре
             – Которую сначала необходимо установить
       • Кроме того, все должно быть четко!



13.10.2012                    www.cezurity.com                14
Чем пользуются другие коллеги?

       • Управление конфигурацией, на выбор:
             – Chef
             – Puppet
             – CFEngine
       • Решаемые задачи:
             – Централизованное хранение описаний
               конфигураций
             – Генерация конфигов по шаблонам и
               параметрам
             – Автоматическое развертывание окружений
               согласно заданному алгоритму



13.10.2012                   www.cezurity.com           15
Необходимо сделать выбор

       • Puppet vs. Chef:
             – Оба написаны на Ruby
             – Я уже имел некоторый опыт с Puppet
             – И мне показалось, что learning curve у него
               не такая короткая (а кроме меня системой
               управления конфигурацией будут
               пользоваться и другие)
             – Макс Трескин считает, что про Puppet я все
               вру, и он прост, но
             – Макс пишет на Эрланге и носит с собой
               штопор



13.10.2012                    www.cezurity.com               16
Необходимо сделать выбор

       • Chef vs. CFEngine:
             – Chef требует Solr, CouchDB, RabbitMQ (логотипы
               логотипы логотипы!)
             – Все это хозяйство существенно расходует
               ресурсы
             – CFEngine может работать на телефоне LG с
               Android
             – CFEngine’s learning curve?




13.10.2012                     www.cezurity.com                 17
Словарик

       • «Chef», а не «Chief»                not   not

       • knife – команднострочный клиент для
         управления
       • recipe – алгоритм применения правил
         конфигурации
       • cookbook – набор связанных между собой
         «рецептов», шаблонов и других
         определений
       • role – группа «рецептов» и других ролей



13.10.2012                www.cezurity.com               18
Словарик

       • run list – набор «рецептов» и ролей для
         применения
       • attribute – переменная, свойство ноды
       • node – абстракция хоста, ей ставятся в
         соответствие атрибуты и run list
       • environment – декларативно
         объявленные
         атрибуты, предописывающие
         окружение

13.10.2012              www.cezurity.com           19
Как это работает?

       • Клиент, сервер (клиент это тоже daemon)
       • Клиент через определенные промежутки
         времени забирает с сервера
         конфигурацию, составляет и применяет run
         list
       • Это pull-модель, а не push (это может быть
         важно!)
       • Все упомянутые выше CM системы работают
         по pull-модели
       • Клиент коллекционирует атрибуты
         узла, такие как версия и дистрибутив ОС при
         помощи утилиты ohai


13.10.2012                www.cezurity.com             20
Как конфигурация попадает на сервер?

       • Помните, я начал словарик с утилиты knife?
       • knife – средство опроса состояния
         конфигурации на сервере и внесения
         изменений в конфигурацию
       • Конфигурация на сервере может не
         соответствовать тому, что лежит в
         репозитории – не забывайте использовать
         knife!
       • К chef-server’у также прилагается web-
         интерфейс, который я всегда зачем-то
         настраиваю и никогда не использую



13.10.2012                www.cezurity.com            21
Словарик strikes back

       • Ведь есть еще chef-solo, data bags, providers,
         LWRPs…
       • О которых я не упомянул
       • Так, что я там говорил про learning curve?
       • Кстати, где брать cookbooks?
       • Chef очень хорошо приспособлен для
         работы с github (там имеется
         централизованный репозиторий основных
         cookbooks) <- счастье состоит как раз из
         таких вот мелочей


13.10.2012                 www.cezurity.com               22
Настало время ответов на вопросы

       • 42
       • Репозиторий для Chef у нас находится в
         выделенном месте, конфиги лежат в нем же
         (это просто шаблоны в терминологии Chef)
       • Мы используем несколько веток в Subversion
         для хранения разных окружений, что
         позволяет нам также иметь разный
         эталонный набор cookbooks
       • Вопрос унификации окружений почти решен




13.10.2012               www.cezurity.com             23
Почти, потому что есть еще пакеты...

       • Мы используем Debian
             – Работает (в отличие от RH) checkinstall, но в
               интерактивном режиме он довольно говорлив
             – Отличная утилита FPM, написанная на Ruby
               человеком, который хорошо понимал слайд 13
             – https://github.com/jordansissel/fpm
       • Собственная build-система на Python
       • Сильно заточенная под наши нужды, но
         наши пакеты она прекрасно собирает
       • Пакеты мало собрать, нужно еще сложить в
         репозитории



13.10.2012                     www.cezurity.com                24
...и репозитории

       • Утилита reprepro
       • Всем хороша, но хранит только
         последнюю версию пакета
       • Поэтому у нас пока два независимых
         репозитория для production и dev
       • Из соображений безопасности так будет
         всегда, но в дальнейшем мы настроим
         синхронизацию файлов между ними
       • Видимо, сделав разные префиксы для
         разных окружений


13.10.2012             www.cezurity.com          25
Свобода подразумевает ответственность

       • Кстати, Chef позволяет разворачивать
         сервисы, вообще не заботясь о
         предварительном создании пакетов
       • Я не рекомендую так делать без
         необходимости, но в некоторых случаях
         приходится
       • Например, пакеты для Python и Node.JS
         ставятся из исходников в обход
         пакетного менеджера Debian


13.10.2012              www.cezurity.com             26
Собранные пакеты надо уметь деплоить

       • Наши deployment scripts написаны на
         shell за пару вечеров
       • Они неоптимальны
       • В частности, из-за pull-модели у нас пока
         нет обратной связи с Chef-клиентами
       • Для параллельного исполнения команд
         на многих нодах мы применяем pssh
       • Будем пробовать RunDeck или Fabric


13.10.2012               www.cezurity.com            27
Сервисами надо уметь управлять

       • Мы используем runit для управления
         большинством наших daemons
       • runit работает как watchdog, если сервис
         упал – он будет запущен снова через секунду
       • Утилита svlogd перехватывает консольный
         вывод, перенаправляет его в файл и берет
         на себя ротацию этих файлов
       • Любой процесс может быть превращен в
         сервис, не нужно уметь detach’иться от
         консоли – runit берет это на себя



13.10.2012               www.cezurity.com              28
Давненько не было новых логотипов

       • Большой брат должен следить,
         варианты:
             – Zabbix или NAGIOS для алертинга,
             – Munin или Zabbix для графиков
       • Я много раз пытался использовать
         Zabbix, и каждый раз бросал:
             – Чтобы понять, почему, сделайте в нем
               Screen на 9-12 графиков и бонусом
               приложите базу 9-12 одновременными
               тяжелыми сортировками



13.10.2012                   www.cezurity.com         29
Zabbix это боль

       • Я умею строить partial index, который
         решает проблему трэшинга диска, но
       • Нормально заскриптовать Zabbix через
         шаблоны, пригодные для помещения в
         Chef repo я так и не смог (устал)
       • А поэтому
             – NAGIOS, Munin, но
       • Период опроса длинноват, fork()и при
         работе плагинов


13.10.2012                   www.cezurity.com    30
Надо отделять мух от котлет

       • Маленький период опроса при
         алертинге is overrated – в случае
         падения 30 секунд или 5 минут на
         доставку алерта не играют решающей
         роли
       • Но информацию для показа на
         графиках хотелось бы получать чаще
       • А поэтому


13.10.2012            www.cezurity.com         31
Avoid server-side JS at all cost

       • Графики – Graphite + Statsd
             – Graphite это такой better
               MRTG/RRDTool, написан на Python (но это
               неважно)
             – Statsd это такой агрегатор первичных
               значений метрик, написан на базе Node.JS
               (это важно), и от 20 до 50 процентов метрик
               он у нас терял
       • Graphite позволяет определять графики
         прямо в процессе их просмотра, что мне
         очень нравилось на начальном этапе

13.10.2012                    www.cezurity.com               32
Кстати, а зачем два инструмента?

       • Statsd умеет принимать данные по UDP
         (Graphite уже тоже умеет, но Statsd научился
         первым)
       • Всегда передавайте вспомогательную
         статистику по UDP – ей не жалко
         пожертвовать при отказах системы
         обработки статистики
       • В один Graphite можно передавать данные
         через несколько Statsd, что позволяет
         обрабатывать очень большой поток
         первичных значений



13.10.2012                www.cezurity.com              33
Ruby is the new Perl

       • Statsd пришлось выбросить из-за
         упомянутых потерь первичных
         значений
       • Похоже, весь нормальный Ops
         engineering софт в современном мире
         пишется на Ruby:
             – https://github.com/seatgeek/statsd_rb
             – Drop-in замена оригинальному
               statsd, которая работает и ничего не
               теряет

13.10.2012                   www.cezurity.com          34
Сбор логов – как это делают люди?

       • Splunk, loggly и т.п. – стоят денег
       • http://www.quora.com/What-are-the-
         best-free-alternatives-to-Splunk:
             – Logstash
             – Graylog2
             – Logio (Node.JS!)
             – Fluentd



13.10.2012                   www.cezurity.com           35
Сбор логов – как это делаем мы?

       • Часть наших daemons логгируют через
         syslog, часть – в файлы, часть – на консоль
       • Удобнее всего – на консоль, мы
         заворачиваем такие логи в файлы через
         svlogd
       • Logstash – агент на нодах и
         препроцессор, мониторит файлы логов и
         сбрасывает результаты обработки на
         Graylog2
       • syslogd – сбрасывает логи на Graylog2
         напрямую

13.10.2012                 www.cezurity.com            36
Сбор логов – как это делает Graylog2?

       • ElasticSearch для индексации и хранения
       • MongoDB для хранения
         вспомогательной информации
       • Ruby-based web dashboard
       • Ну и как оно?
             – С 23 сентября по 12 октября обработано 96
               миллионов сообщений
             – Продолжаем наблюдение



13.10.2012                   www.cezurity.com              37
Я забыл сказать, в чем была сложность?

       • Некоторые параметры наших
         окружений:
             – 62 cookbooks
             – 31 roles
             – 18 nodes in dev env, 25 in production
             – Hundreds of daemons in production




13.10.2012                   www.cezurity.com             38
Планы на будущее

       • pull-модель не очень хорошо совместима с
         нашим текущим набором deployment scripts
             – Хотим упорядочить процесс выкладки
       • Графики Graphite хорошо бы тоже описывать
         при помощи Chef
             – https://github.com/ripienaar/gdash (Ruby again!)
       • Нагрузка будет расти - есть планы по
         улучшению инфраструктуры уже сейчас
         (логотипы логотипы логотипы!)




13.10.2012                      www.cezurity.com                  39
Выводы

       • Конфигурация это код
       • Сисадмин – девелопер
       • Знание – сила




13.10.2012           www.cezurity.com   40
Вопросы

       •     .................?
       •     ....................?
       •     ...............?
       •     ...................?




13.10.2012                           www.cezurity.com   41
Спасибо за внимание!

       • Александр Чистяков, компания
         Cezurity
       • admin@cezurity.com
       • http://alexclear.livejournal.com
       • https://github.com/alexclear
       • Кстати, мы нанимаем!
             – Developers, developers, developers!



13.10.2012                   www.cezurity.com        42

More Related Content

PDF
Иван Карев — Клиентская оптимизация
PDF
SaltStack vs Chef, HappyDev 2013
PDF
Chef, Puppet, Salt, Ansible on SECON 2014
KEY
10 вещей, которые «невозможно» сделать в iOS
PDF
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
PDF
Introduction in Node.js (in russian)
PDF
Repeatability on DevOps-40 meetup Apr 2014
PDF
MySQL 101
Иван Карев — Клиентская оптимизация
SaltStack vs Chef, HappyDev 2013
Chef, Puppet, Salt, Ansible on SECON 2014
10 вещей, которые «невозможно» сделать в iOS
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
Introduction in Node.js (in russian)
Repeatability on DevOps-40 meetup Apr 2014
MySQL 101

What's hot (19)

PDF
Современный фронтенд за 30 минут.
PDF
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
PDF
Optimization of a big PostgreSQL database
PDF
Фронтенд разработка без боли
PDF
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
Современный фронтенд -- как не утонуть в море хайпа?
PPT
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
PDF
SPA инструменты
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PDF
Ansible on a great Moscow DevOps CM battle
PDF
Скриншоты как сервис
PDF
Опыт разработки эффективного SPA
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PPTX
Mysql replication DevConf 2012
PDF
Сборка проектов с помощью ENB
PPT
Drupal и мобильные устройства комелин константин
PDF
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
PPTX
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Современный фронтенд за 30 минут.
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Optimization of a big PostgreSQL database
Фронтенд разработка без боли
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
JavaScript-модули "из прошлого в будущее"
Современный фронтенд -- как не утонуть в море хайпа?
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SPA инструменты
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Ansible on a great Moscow DevOps CM battle
Скриншоты как сервис
Опыт разработки эффективного SPA
Иван Крутов - Автоматизация сборки Java-проекта
Mysql replication DevConf 2012
Сборка проектов с помощью ENB
Drupal и мобильные устройства комелин константин
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Ad

Viewers also liked (7)

PPTX
Code'n'Coffee SPb., вводный доклад по оптимизации производительности
PPTX
Практический опыт применения виртуализации для web-систем
PPTX
Информационная безопасность в веб - основы
PDF
Big web project @happydev Omsk
PPTX
Опыт эксплуатации большого проекта на Ruby
PPTX
Практический опыт использования некоторых современных решений репликации MySQL
PPTX
Оптимизация производительности нагруженных веб-систем на Java
Code'n'Coffee SPb., вводный доклад по оптимизации производительности
Практический опыт применения виртуализации для web-систем
Информационная безопасность в веб - основы
Big web project @happydev Omsk
Опыт эксплуатации большого проекта на Ruby
Практический опыт использования некоторых современных решений репликации MySQL
Оптимизация производительности нагруженных веб-систем на Java
Ad

Similar to Chef @DevWeb (20)

PPTX
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
PDF
Иван Евтухович — Как перестать релизиться и начать жить
PPTX
Управление облачной инфраструктурой
PDF
PPTX
Hosting for forbes.ru_
PDF
Большая книга рецептов или часто задаваемые вопросы по управлению сложными пр...
PDF
Большая книга рецептов или часто задаваемые вопросы по управлению сложными си...
PPTX
Непрерывная интеграция. Практическое применение
PPTX
Daemons In Web on #devrus
PDF
Непрерывная интеграция при разработке баз данных. (Show version)
PPTX
Little Service in 2h
PDF
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
PDF
Эффективное управление ПО под *nix
PDF
Application deployment & configuration management
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PPTX
Варианты развертывания проектов на M3
PDF
Масштабируемый DevOps
PDF
«​Масштабируемый DevOps​» Александр Колесень
PDF
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
Иван Евтухович — Как перестать релизиться и начать жить
Управление облачной инфраструктурой
Hosting for forbes.ru_
Большая книга рецептов или часто задаваемые вопросы по управлению сложными пр...
Большая книга рецептов или часто задаваемые вопросы по управлению сложными си...
Непрерывная интеграция. Практическое применение
Daemons In Web on #devrus
Непрерывная интеграция при разработке баз данных. (Show version)
Little Service in 2h
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
Эффективное управление ПО под *nix
Application deployment & configuration management
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
CodeFest 2011. Макаров А. — Как разрабатывается Yii
Варианты развертывания проектов на M3
Масштабируемый DevOps
«​Масштабируемый DevOps​» Александр Колесень
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14

More from Alex Chistyakov (20)

PDF
My slides from DevOpsDays 2019
PDF
My slides from BMM №3 May 2019
PDF
My slides from DevOps-40 meetup Jun 2019
PDF
My slides from SECR'2018
PDF
My slides from the first SPb SRE community meetup at DataArt
PDF
My slides from CC'2019
PDF
My slides from BMM №4 Nov 2019
PDF
My slides from DevOps-40 meetup Oct 2019
PDF
My slides from DevOps-40 meetup Dec 2019
PDF
Configuration management and Kubernetes
PDF
Ansible and other stuff
PDF
Python performance engineering in 2017
PDF
My talk at SPb SQA sub-meetup of ITGM
PDF
My talk at SECR 2017
PDF
On scaling teams
PDF
MariaDB workshop
PDF
Docker for JS people
PDF
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
PDF
My talk on GitHub open data at ITGM #10
PDF
My talk on DevOps :) at Stachka 2017
My slides from DevOpsDays 2019
My slides from BMM №3 May 2019
My slides from DevOps-40 meetup Jun 2019
My slides from SECR'2018
My slides from the first SPb SRE community meetup at DataArt
My slides from CC'2019
My slides from BMM №4 Nov 2019
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Dec 2019
Configuration management and Kubernetes
Ansible and other stuff
Python performance engineering in 2017
My talk at SPb SQA sub-meetup of ITGM
My talk at SECR 2017
On scaling teams
MariaDB workshop
Docker for JS people
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on GitHub open data at ITGM #10
My talk on DevOps :) at Stachka 2017

Chef @DevWeb

  • 1. Управление окружениями в сложном проекте Chef и другие Александр Чистяков, admin@cezurity.com DevOps Cezurity http://vk.com/av 13.10.2012 www.cezurity.com 1
  • 2. Давайте знакомиться и дружить Я: • Дезертировавший кодер на Java • Дезертировавший кодер на PHP • Дезертировавший кодер на C++ • Дезертировавший кодер на Perl • Немного знаю PowerPoint и Win 7 13.10.2012 www.cezurity.com 2
  • 3. Пожалуйста, не расходитесь! Вы: • Разрабатываете веб-приложения? • Разрабатываете (компонуете) архитектуру веб-приложений? • Поддерживаете production систему? • Можете назвать первого мэра Санкт- Петербурга? 13.10.2012 www.cezurity.com 3
  • 4. Чем занимается компания Cezurity? • Мы разрабатываем свою антивирусную систему • Работающую через web («облачную») • Но в чем killer features? – Бесплатно, без SMS – Статистический анализ (все слышали про байезианские фильтры спама?) 13.10.2012 www.cezurity.com 4
  • 5. Чем занимаюсь в компании я? • Поддерживаю production инфраструктуру • Управляю конфигурацией production и development окружений • Поддерживаю код некоторых подсистем • Компоную всю вспомогательную инфраструктуру 13.10.2012 www.cezurity.com 5
  • 6. Быстрое введение в предметную область 13.10.2012 www.cezurity.com 6
  • 7. Помедленнее, я записываю! • Есть сервисы, которые написаны не нами • Есть сервисы, которые написаны не нами, но нами модифицированы (исправлены, либо дополнены) • Есть сервисы, которые написаны нами • Есть правила компоновки и настройки этих сервисов • Есть production и development окружения и ветки кода 13.10.2012 www.cezurity.com 7
  • 8. Какие задачи нужно решить? • Унификация описаний конфигурации (желательно все хранить в одном месте) • Унификация окружений (development окружение – добрый брат-близнец production, а не злой) • Приведение всех видов сервисов к единому представлению (captain Package Manager to the rescue!) • Необходим общий механизм управления, анализа состояния системы и контроля • Кроме того, все должно быть четко 13.10.2012 www.cezurity.com 8
  • 9. Какими принципами руководствуемся? • Всё уже придумано до нас! • К сожалению, не все придумано для нас – готовимся засучить рукава • Алгоритм принятия решений: – Тестируем – Измеряем – Анализируем – Повторяем или Выходим • Сосед Вася лжет (кстати, все лгут) 13.10.2012 www.cezurity.com 9
  • 10. Поехали! • Унификация описаний конфигурации (желательно все хранить в одном месте) – Репозиторий у нас уже есть (Subversion), там и будем хранить • Возникают новые вопросы: – Как в репозитории скомпоновать конфигурационные файлы (Вместе с приложением? Или все конфиги в одном общем месте?) – Как хранить конфиги разных окружений (Делать брэнчи в Subversion или хранить все в разных каталогах одной ветки?) 13.10.2012 www.cezurity.com 10
  • 11. Вопросов пока все больше... • Унификация окружений (development окружение – добрый брат-близнец production, а не злой) – Количество ручной работы при развертывании нового окружения должно быть минимально, иначе окружения рассинхронизируются – Идеально, когда конфигурация сервисов генерируется автоматически по декларативно описанным параметрам нового окружения 13.10.2012 www.cezurity.com 11
  • 12. Но мы будем их записывать... • Приведение всех видов сервисов к единому представлению (captain Package Manager to the rescue!) – Кажется, эту типовую задачу решали множество раз? – http://docs.fedoraproject.org/en- US/Fedora_Draft_Documentation/0.1/html/R PM_Guide/index.html – http://www.debian.org/doc/manuals/maint- guide/ 13.10.2012 www.cezurity.com 12
  • 13. Степень фрустрации пока что возрастает • Я сисадмин! Я не хочу ничего читать! Я хочу пакеты! 13.10.2012 www.cezurity.com 13
  • 14. Количество логотипов будет расти... • Необходим общий механизм управления, анализа состояния системы и контроля – Нужно централизовать сбор логов – Нужно мониторить основные параметры системы и генерировать предупреждения – Нужно собирать статистику и рисовать графики – Нужно разворачивать новые версии окружения согласно установленной процедуре – Которую сначала необходимо установить • Кроме того, все должно быть четко! 13.10.2012 www.cezurity.com 14
  • 15. Чем пользуются другие коллеги? • Управление конфигурацией, на выбор: – Chef – Puppet – CFEngine • Решаемые задачи: – Централизованное хранение описаний конфигураций – Генерация конфигов по шаблонам и параметрам – Автоматическое развертывание окружений согласно заданному алгоритму 13.10.2012 www.cezurity.com 15
  • 16. Необходимо сделать выбор • Puppet vs. Chef: – Оба написаны на Ruby – Я уже имел некоторый опыт с Puppet – И мне показалось, что learning curve у него не такая короткая (а кроме меня системой управления конфигурацией будут пользоваться и другие) – Макс Трескин считает, что про Puppet я все вру, и он прост, но – Макс пишет на Эрланге и носит с собой штопор 13.10.2012 www.cezurity.com 16
  • 17. Необходимо сделать выбор • Chef vs. CFEngine: – Chef требует Solr, CouchDB, RabbitMQ (логотипы логотипы логотипы!) – Все это хозяйство существенно расходует ресурсы – CFEngine может работать на телефоне LG с Android – CFEngine’s learning curve? 13.10.2012 www.cezurity.com 17
  • 18. Словарик • «Chef», а не «Chief» not not • knife – команднострочный клиент для управления • recipe – алгоритм применения правил конфигурации • cookbook – набор связанных между собой «рецептов», шаблонов и других определений • role – группа «рецептов» и других ролей 13.10.2012 www.cezurity.com 18
  • 19. Словарик • run list – набор «рецептов» и ролей для применения • attribute – переменная, свойство ноды • node – абстракция хоста, ей ставятся в соответствие атрибуты и run list • environment – декларативно объявленные атрибуты, предописывающие окружение 13.10.2012 www.cezurity.com 19
  • 20. Как это работает? • Клиент, сервер (клиент это тоже daemon) • Клиент через определенные промежутки времени забирает с сервера конфигурацию, составляет и применяет run list • Это pull-модель, а не push (это может быть важно!) • Все упомянутые выше CM системы работают по pull-модели • Клиент коллекционирует атрибуты узла, такие как версия и дистрибутив ОС при помощи утилиты ohai 13.10.2012 www.cezurity.com 20
  • 21. Как конфигурация попадает на сервер? • Помните, я начал словарик с утилиты knife? • knife – средство опроса состояния конфигурации на сервере и внесения изменений в конфигурацию • Конфигурация на сервере может не соответствовать тому, что лежит в репозитории – не забывайте использовать knife! • К chef-server’у также прилагается web- интерфейс, который я всегда зачем-то настраиваю и никогда не использую 13.10.2012 www.cezurity.com 21
  • 22. Словарик strikes back • Ведь есть еще chef-solo, data bags, providers, LWRPs… • О которых я не упомянул • Так, что я там говорил про learning curve? • Кстати, где брать cookbooks? • Chef очень хорошо приспособлен для работы с github (там имеется централизованный репозиторий основных cookbooks) <- счастье состоит как раз из таких вот мелочей 13.10.2012 www.cezurity.com 22
  • 23. Настало время ответов на вопросы • 42 • Репозиторий для Chef у нас находится в выделенном месте, конфиги лежат в нем же (это просто шаблоны в терминологии Chef) • Мы используем несколько веток в Subversion для хранения разных окружений, что позволяет нам также иметь разный эталонный набор cookbooks • Вопрос унификации окружений почти решен 13.10.2012 www.cezurity.com 23
  • 24. Почти, потому что есть еще пакеты... • Мы используем Debian – Работает (в отличие от RH) checkinstall, но в интерактивном режиме он довольно говорлив – Отличная утилита FPM, написанная на Ruby человеком, который хорошо понимал слайд 13 – https://github.com/jordansissel/fpm • Собственная build-система на Python • Сильно заточенная под наши нужды, но наши пакеты она прекрасно собирает • Пакеты мало собрать, нужно еще сложить в репозитории 13.10.2012 www.cezurity.com 24
  • 25. ...и репозитории • Утилита reprepro • Всем хороша, но хранит только последнюю версию пакета • Поэтому у нас пока два независимых репозитория для production и dev • Из соображений безопасности так будет всегда, но в дальнейшем мы настроим синхронизацию файлов между ними • Видимо, сделав разные префиксы для разных окружений 13.10.2012 www.cezurity.com 25
  • 26. Свобода подразумевает ответственность • Кстати, Chef позволяет разворачивать сервисы, вообще не заботясь о предварительном создании пакетов • Я не рекомендую так делать без необходимости, но в некоторых случаях приходится • Например, пакеты для Python и Node.JS ставятся из исходников в обход пакетного менеджера Debian 13.10.2012 www.cezurity.com 26
  • 27. Собранные пакеты надо уметь деплоить • Наши deployment scripts написаны на shell за пару вечеров • Они неоптимальны • В частности, из-за pull-модели у нас пока нет обратной связи с Chef-клиентами • Для параллельного исполнения команд на многих нодах мы применяем pssh • Будем пробовать RunDeck или Fabric 13.10.2012 www.cezurity.com 27
  • 28. Сервисами надо уметь управлять • Мы используем runit для управления большинством наших daemons • runit работает как watchdog, если сервис упал – он будет запущен снова через секунду • Утилита svlogd перехватывает консольный вывод, перенаправляет его в файл и берет на себя ротацию этих файлов • Любой процесс может быть превращен в сервис, не нужно уметь detach’иться от консоли – runit берет это на себя 13.10.2012 www.cezurity.com 28
  • 29. Давненько не было новых логотипов • Большой брат должен следить, варианты: – Zabbix или NAGIOS для алертинга, – Munin или Zabbix для графиков • Я много раз пытался использовать Zabbix, и каждый раз бросал: – Чтобы понять, почему, сделайте в нем Screen на 9-12 графиков и бонусом приложите базу 9-12 одновременными тяжелыми сортировками 13.10.2012 www.cezurity.com 29
  • 30. Zabbix это боль • Я умею строить partial index, который решает проблему трэшинга диска, но • Нормально заскриптовать Zabbix через шаблоны, пригодные для помещения в Chef repo я так и не смог (устал) • А поэтому – NAGIOS, Munin, но • Период опроса длинноват, fork()и при работе плагинов 13.10.2012 www.cezurity.com 30
  • 31. Надо отделять мух от котлет • Маленький период опроса при алертинге is overrated – в случае падения 30 секунд или 5 минут на доставку алерта не играют решающей роли • Но информацию для показа на графиках хотелось бы получать чаще • А поэтому 13.10.2012 www.cezurity.com 31
  • 32. Avoid server-side JS at all cost • Графики – Graphite + Statsd – Graphite это такой better MRTG/RRDTool, написан на Python (но это неважно) – Statsd это такой агрегатор первичных значений метрик, написан на базе Node.JS (это важно), и от 20 до 50 процентов метрик он у нас терял • Graphite позволяет определять графики прямо в процессе их просмотра, что мне очень нравилось на начальном этапе 13.10.2012 www.cezurity.com 32
  • 33. Кстати, а зачем два инструмента? • Statsd умеет принимать данные по UDP (Graphite уже тоже умеет, но Statsd научился первым) • Всегда передавайте вспомогательную статистику по UDP – ей не жалко пожертвовать при отказах системы обработки статистики • В один Graphite можно передавать данные через несколько Statsd, что позволяет обрабатывать очень большой поток первичных значений 13.10.2012 www.cezurity.com 33
  • 34. Ruby is the new Perl • Statsd пришлось выбросить из-за упомянутых потерь первичных значений • Похоже, весь нормальный Ops engineering софт в современном мире пишется на Ruby: – https://github.com/seatgeek/statsd_rb – Drop-in замена оригинальному statsd, которая работает и ничего не теряет 13.10.2012 www.cezurity.com 34
  • 35. Сбор логов – как это делают люди? • Splunk, loggly и т.п. – стоят денег • http://www.quora.com/What-are-the- best-free-alternatives-to-Splunk: – Logstash – Graylog2 – Logio (Node.JS!) – Fluentd 13.10.2012 www.cezurity.com 35
  • 36. Сбор логов – как это делаем мы? • Часть наших daemons логгируют через syslog, часть – в файлы, часть – на консоль • Удобнее всего – на консоль, мы заворачиваем такие логи в файлы через svlogd • Logstash – агент на нодах и препроцессор, мониторит файлы логов и сбрасывает результаты обработки на Graylog2 • syslogd – сбрасывает логи на Graylog2 напрямую 13.10.2012 www.cezurity.com 36
  • 37. Сбор логов – как это делает Graylog2? • ElasticSearch для индексации и хранения • MongoDB для хранения вспомогательной информации • Ruby-based web dashboard • Ну и как оно? – С 23 сентября по 12 октября обработано 96 миллионов сообщений – Продолжаем наблюдение 13.10.2012 www.cezurity.com 37
  • 38. Я забыл сказать, в чем была сложность? • Некоторые параметры наших окружений: – 62 cookbooks – 31 roles – 18 nodes in dev env, 25 in production – Hundreds of daemons in production 13.10.2012 www.cezurity.com 38
  • 39. Планы на будущее • pull-модель не очень хорошо совместима с нашим текущим набором deployment scripts – Хотим упорядочить процесс выкладки • Графики Graphite хорошо бы тоже описывать при помощи Chef – https://github.com/ripienaar/gdash (Ruby again!) • Нагрузка будет расти - есть планы по улучшению инфраструктуры уже сейчас (логотипы логотипы логотипы!) 13.10.2012 www.cezurity.com 39
  • 40. Выводы • Конфигурация это код • Сисадмин – девелопер • Знание – сила 13.10.2012 www.cezurity.com 40
  • 41. Вопросы • .................? • ....................? • ...............? • ...................? 13.10.2012 www.cezurity.com 41
  • 42. Спасибо за внимание! • Александр Чистяков, компания Cezurity • admin@cezurity.com • http://alexclear.livejournal.com • https://github.com/alexclear • Кстати, мы нанимаем! – Developers, developers, developers! 13.10.2012 www.cezurity.com 42