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



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

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



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

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


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

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



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

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


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




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

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


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

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


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

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


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

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



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

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



17.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/



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

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




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

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


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

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



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

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



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

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




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

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

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



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

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

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

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



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

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



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

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


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

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




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

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



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

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


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

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


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

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


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

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



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

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



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

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


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

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


17.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 позволяет определять графики
         прямо в процессе их просмотра, что мне
         очень нравилось на начальном этапе

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

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



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

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


17.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



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

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



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

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



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

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




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

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




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

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




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

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




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

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



17.10.2012                   www.cezurity.com        42

Weitere ähnliche Inhalte

Was ist angesagt?

Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
 

Was ist angesagt? (20)

Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
мир без Jsp. thymeleaf 2.0
мир без Jsp. thymeleaf 2.0мир без Jsp. thymeleaf 2.0
мир без Jsp. thymeleaf 2.0
 
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 

Ähnlich wie 13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление окружениями в сложном проекте: Chef и другие", Александр Чистяков (Cezurity)

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex 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, Как мы используем Yii
Alexander Makarov
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Dmitry Samsonov
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 

Ähnlich wie 13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление окружениями в сложном проекте: Chef и другие", Александр Чистяков (Cezurity) (20)

Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Sivko
SivkoSivko
Sivko
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 

Mehr von IT-Portfolio

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
IT-Portfolio
 

Mehr von IT-Portfolio (9)

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
 

13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление окружениями в сложном проекте: Chef и другие", Александр Чистяков (Cezurity)

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