SlideShare a Scribd company logo
1 of 42
Управление окружениями в
                 сложном проекте
                              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

What's hot

Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL databaseOptimization of a big PostgreSQL database
Optimization of a big PostgreSQL databaseAlex Chistyakov
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Vladimir Malyk
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014Dmytro Zharii
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Ansible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battleAnsible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battleAlex Chistyakov
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
Drupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинDrupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинdrupalconf
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyDmytro Zharii
 

What's hot (19)

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

Viewers also liked

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

Viewers also liked (7)

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

Similar to Chef @DevWeb

13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...GeeksLab Odessa
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Dmitry Samsonov
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времениAndriy Samilyak
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 

Similar to Chef @DevWeb (20)

13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Sivko
SivkoSivko
Sivko
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 

More from Alex Chistyakov

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019Alex Chistyakov
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 Alex Chistyakov
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018Alex Chistyakov
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtAlex Chistyakov
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019Alex Chistyakov
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and KubernetesAlex Chistyakov
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017Alex Chistyakov
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMAlex Chistyakov
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017Alex Chistyakov
 

More from Alex Chistyakov (20)

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