Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Управление окружениями в                 сложном проекте                              Chef и другие             Александр ...
Давайте знакомиться и дружить       Я:       • Дезертировавший кодер на Java       • Дезертировавший кодер на PHP       • ...
Пожалуйста, не расходитесь!       Вы:       • Разрабатываете веб-приложения?       • Разрабатываете (компонуете)         а...
Чем занимается компания Cezurity?       • Мы разрабатываем свою         антивирусную систему       • Работающую через web ...
Чем занимаюсь в компании я?       • Поддерживаю production         инфраструктуру       • Управляю конфигурацией productio...
Быстрое введение в предметную область17.10.2012              www.cezurity.com             6
Помедленнее, я записываю!       • Есть сервисы, которые написаны не         нами       • Есть сервисы, которые написаны не...
Какие задачи нужно решить?       • Унификация описаний конфигурации         (желательно все хранить в одном месте)       •...
Какими принципами руководствуемся?       • Всё уже придумано до нас!       • К сожалению, не все придумано для нас        ...
Поехали!       • Унификация описаний конфигурации         (желательно все хранить в одном месте)             – Репозиторий...
Вопросов пока все больше...       • Унификация окружений (development         окружение – добрый брат-близнец         prod...
Но мы будем их записывать...       • Приведение всех видов сервисов к         единому представлению (captain         Packa...
Степень фрустрации пока что возрастает       • Я сисадмин! Я не хочу ничего читать!         Я хочу пакеты!17.10.2012      ...
Количество логотипов будет расти...       • Необходим общий механизм         управления, анализа состояния системы и      ...
Чем пользуются другие коллеги?       • Управление конфигурацией, на выбор:             – Chef             – Puppet        ...
Необходимо сделать выбор       • Puppet vs. Chef:             – Оба написаны на Ruby             – Я уже имел некоторый оп...
Необходимо сделать выбор       • Chef vs. CFEngine:             – Chef требует Solr, CouchDB, RabbitMQ (логотипы          ...
Словарик       • «Chef», а не «Chief»                not   not       • knife – команднострочный клиент для         управле...
Словарик       • run list – набор «рецептов» и ролей для         применения       • attribute – переменная, свойство ноды ...
Как это работает?       • Клиент, сервер (клиент это тоже daemon)       • Клиент через определенные промежутки         вре...
Как конфигурация попадает на сервер?       • Помните, я начал словарик с утилиты knife?       • knife – средство опроса со...
Словарик strikes back       • Ведь есть еще chef-solo, data         bags, providers, LWRPs…       • О которых я не упомяну...
Настало время ответов на вопросы       • 42       • Репозиторий для Chef у нас находится в         выделенном месте, конфи...
Почти, потому что есть еще пакеты...       • Мы используем Debian             – Работает (в отличие от RH) checkinstall, н...
...и репозитории       • Утилита reprepro       • Всем хороша, но хранит только         последнюю версию пакета       • По...
Свобода подразумевает ответственность       • Кстати, Chef позволяет разворачивать         сервисы, вообще не заботясь о  ...
Собранные пакеты надо уметь деплоить       • Наши deployment scripts написаны на         shell за пару вечеров       • Они...
Сервисами надо уметь управлять       • Мы используем runit для управления         большинством наших daemons       • runit...
Давненько не было новых логотипов       • Большой брат должен         следить, варианты:             – Zabbix или NAGIOS д...
Zabbix это боль       • Я умею строить partial index, который         решает проблему трэшинга диска, но       • Нормально...
Надо отделять мух от котлет       • Маленький период опроса при         алертинге is overrated – в случае         падения ...
Avoid server-side JS at all cost       • Графики – Graphite + Statsd             – Graphite это такой better              ...
Кстати, а зачем два инструмента?       • Statsd умеет принимать данные по UDP         (Graphite уже тоже умеет, но Statsd ...
Ruby is the new Perl       • Statsd пришлось выбросить из-за         упомянутых потерь первичных         значений       • ...
Сбор логов – как это делают люди?       • Splunk, loggly и т.п. – стоят денег       • http://www.quora.com/What-are-the-  ...
Сбор логов – как это делаем мы?       • Часть наших daemons логгируют через syslog,         часть – в файлы, часть – на ко...
Сбор логов – как это делает Graylog2?       • ElasticSearch для индексации и хранения       • MongoDB для хранения        ...
Я забыл сказать, в чем была сложность?       • Некоторые параметры наших         окружений:             – 62 cookbooks    ...
Планы на будущее       • pull-модель не очень хорошо совместима с         нашим текущим набором deployment scripts        ...
Выводы       • Конфигурация это код       • Сисадмин – девелопер       • Знание – сила17.10.2012           www.cezurity.co...
Вопросы       •     .................?       •     ....................?       •     ...............?       •     ...........
Спасибо за внимание!       • Александр Чистяков, компания         Cezurity       • admin@cezurity.com       • http://alexc...
Upcoming SlideShare
Loading in …5
×

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

4,396 views

Published on

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

Аннотация
Облачный антивирус, который мы делаем в партнерстве с vk.com, отличается от типичного веб-проекта наличием большого числа специализированных и не очень специализированных подсистем. Это ставит перед отделом эксплуатации принципиально новые вызовы: нужно не только уметь реагировать на случайные сбои и предсказывать неслучайные, но и просто помнить где что лежит и какую задачу выполняет. О том, как мы отвечаем на эти вызовы в компании Cezurity - мой доклад.

Биография
Докладчик - узкий специалист широкого профиля, относит себя к виду, называемому в современной англоязычной литературе термином "DevOps". Любит принимать участие в создании сложных систем и постоянно это делает. Никогда не работал в Яндексе, компенсировав это работой в Mail.Ru и некоторых других местах.

Published in: Technology

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

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

×