SlideShare a Scribd company logo
Как не положить тысячи
серверов с помощью системы
централизованного управления
конфигурацией на примере
CFEngine
Дмитрий Самсонов
Дмитрий Самсонов
Ведущий системный администратор в OK.RU
Компетенция:
● Zabbix
● CFEngine
● Linux tuning
dmitry.samsonov@odnoklassniki.ru
https://www.linkedin.com/in/dmitrysamsonov
Одноклассники
>11000 серверов
>150 приложений
>600 кластеров
Разоблачение
Я предвзят
Разоблачение
Я предвзят
У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x
Разоблачение
Я предвзят
У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x
CFEngine не лидер и не аутсайдер рынка
Разоблачение
Я предвзят
У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x
CFEngine не лидер и не аутсайдер рынка
Я не буду сравнивать configuration management на сегодняшний день
Разоблачение
Я предвзят
У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x
CFEngine не лидер и не аутсайдер рынка
Я не буду сравнивать configuration management на сегодняшний день
У меня есть опыт использования только CFEngine и Ansible
Классические средства конфигурации
● ssh + scp + winexe
Классические средства конфигурации
● ssh + scp + winexe
● dssh-command + dscp + dwinexe-command
Классические средства конфигурации
● ssh + scp + winexe
● dssh-command + dscp + dwinexe-command
● Образ OS (регулярные обновления)
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
How much is 5 + 8 =
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
How much is 5 + 8 =
50, 100, 200...
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
How much is 5 + 8 = 13
Correct
srvd1352:O:0:srvd1352
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
How much is 5 + 8 = 13
Correct
srvd1352:O:0:srvd1352
Executing: "hostname"
Do you want to execute the command on servers in DL? [Yes/No]: Yes
srvd1353:O:0:srvd1353
dssh-command
# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
How much is 5 + 8 = 13
Correct
srvd1352:O:0:srvd1352
Executing: "hostname"
Do you want to execute the command on servers in DL? [Yes/No]: Yes
srvd1353:O:0:srvd1353
Executing: "hostname"
Do you want to execute the command on servers in M100? [Yes/no]: Yes
srve1993:O:0:srve1993
srve2765:O:0:srve2765
...
Full output saved in /tmp/dsshFullOutput_29606_2016-10-14_13-17.log
file.
Сервера настроены неправильно
Как мы выбирали и что выбрали в 2012
● Интеграция с CMDB
● Установка пакетов
● Работа с файлами (копирование/редактирование/атрибуты)
● Контроль файлов (содержимое/атрибуты)
● Управление процессами и сервисами
● Ручной запуск политик
● Контроль версий, логирование изменений, отчеты
● Масштабирование, резервирование
● Поддержка Linux и Windows
● Проверка на наличие серверов без работающего CM
Как мы выбирали и что выбрали в 2012
● Производительность
Производительность
3000 клиентов
Как мы выбирали и что выбрали в 2012
● Производительность
● Зрелость
Современная история CM
“A theory of configuration maintenance was worked out by Mark Burgess with a practical implementation on present day computer systems in
the software CFEngine able to perform real time repair as well as preventive maintenance.”
https://en.wikipedia.org/wiki/Configuration_management#Operating_System_configuration_management
Как мы выбирали и что выбрали в 2012
● Зрелость
● Производительность
● Популярность
Популярность CM
CFEngine в Одноклассниках
CFEngine может быть простым
Типичная политика настройки приложения
"app_ok_feed" or => {"cmdb_group_feeds_proxy",
“cmdb_group_feeds_cache};
...
bundle agent app_ok_feed
{
vars:
"application" string => "ok-feed";
methods:
"app_ok" usebundle => app_ok("$(application)");
}
Библиотека настройки приложений
bundle agent app_ok(application)
{
vars:
"file[/ok/bin/$(application)][policy]" string => "copy";
"file[/ok/bin/$(application)][mode]" string => "0755";
"file[/ok/conf/$(application).conf][policy]" string => "copy";
"file[/root/ok/ok.properties][policy]" string => "edit";
"file[/root/ok/ok.properties][suffix]" string => "$(application)";
"file[/root/ok/ok.properties][type]" string => "file";
methods:
"files" usebundle => files_manage("$(this.bundle).file");
}
CFEngine может быть простым в
использовании
Добавить пользователя:
"user[git][policy]" string => "add";
Запустить сервис:
"service[mysql][policy]" string => "start";
Добавить крон:
"cron[do_well][cron]" string => "* * * * * do_well";
Установить пакет:
"package[rsyslog][policy]" string => "add";
Количество политик по типам
Библиотека
Служебные
Приложения
Возможно всё!
● IP routes
● HW RAID Write cache
● SELinux
● IPMI SOL
● Kernel modules
● RSS/RPS/RFS
Чем он нам не нравится
● Высокий порог вхождения
Чем он нам не нравится
● Высокий порог вхождения
● Сильно отстаёт от конкурентов
Чем он нам не нравится
● Высокий порог вхождения
● Сильно отстаёт от конкурентов
● Нет возможности расширять функционал
Чем он нам не нравится
● Высокий порог вхождения
● Сильно отстаёт от конкурентов
● Нет возможности расширять функционал
● Плохие шаблоны
Чем примечательна дата
4 апреля?
“В одну тихую весеннюю ночь, а именно с 4-
го на 5-ое апреля 2013-го года, ничто не
предвещало беды — юзеры непринуждённо
общались, грузили и комментили фоточки,
и собирали урожай, как вдруг всё ё***лось, и
что, с**а, характерно, обратно не
поднялось. Ни через час, ни через два, ни
через три. И даже не через 20 часов! … Что
это за централизованная система
управления, которая лёгким движением
руки позволяет отправить несколько
тысяч серверов в /dev/null, знают только её
разработчики…”
https://lurkmore.to/Одноклассники
Можно ли было избежать?
● Проверка синаксиса
● Тестовые окружения
● Ревью
● Мониторинг ошибок
Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine /  Дмитрий Самсонов (Одноклассники)
CFEngine по-прежнему работает
постоянно и проверяет политики
каждые 5 минут
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
GIT hooks
● Проверка синтаксиса
GIT hooks
● Проверка синтаксиса
● Автокоррекция стиля
GIT hooks
● Проверка синтаксиса
● Автокоррекция стиля
● Автозаполнение и проверка commit message
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
Проверка в тестовом окружении
● Unstable - виртуалки
Проверка в тестовом окружении
● Unstable - виртуалки
● Testing - физические сервера
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
Stable
● Прод сервера
Stable
● Прод сервера
● От каждого нового кластера
берётся один сервер
Stable
● Прод сервера
● От каждого нового кластера
берётся один сервер
● Все варианты железа и
приложений
Stable
● Прод сервера
● От каждого нового кластера
берётся один сервер
● Все варианты железа и
приложений
● Потеря прозрачна для
пользователей
Stable
● Прод сервера
● От каждого нового кластера
берётся один сервер
● Все варианты железа и
приложений
● Потеря прозрачна для
пользователей
● Обновления плавно в течение
одного часа
Stable
● Прод сервера
● От каждого нового кластера
берётся один сервер
● Все варианты железа и
приложений
● Потеря прозрачна для
пользователей
● Обновления плавно в течение
одного часа
● Для серверов автоматически
контролируется нагрузка
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
Ревью
Ревью политики:
1. Соблюдение style guide (большая часть проверяется pre-commit хуком в git)
2. “Адекватность” кода
3. Использование последних версий методов
4. …
Ревью
Соблюдение всех условий для продвижения в прод:
1. Нет ошибок выполнения
2. Нет проблем с нагрузкой
3. “Промариновалось”
Ещё пара слов про ревью
● Исключение - инциденты!
Ещё пара слов про ревью
● Исключение - инциденты!
● Кто ревьювит?
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
Production
● Поделен на независимые
части
Production
● Поделен на независимые
части
● Каждая часть применяет
изменения равномерно в
течение часа
Production
● Поделен на независимые
части
● Каждая часть применяет
изменения равномерно в
течение часа
● Обновления работают только
с 8:00 до 20:00
Как мы работаем
1. Проверка в git hooks
2. Проверка в тестовом окружении
3. Проверка на части прод серверов с
автоматизированным контролем нагрузки
4. Ревью
5. Плавное распространение по проду
Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine /  Дмитрий Самсонов (Одноклассники)
План “Б”
● Альтернативный
минимальный набор
политик
● Изменяется очень редко
План “В”
cf-stop - остановка CFEngine на всём проде за
несколько минут
cf-update
exit
status=0
update+execute
execute
stop
exit
status=0
batch size x2
continue
Это надо делать обязательно
● Тестировать в разных условиях
● Долго тестировать на части прода
● Делать ревью
● Распространять обновления в продакшене плавно и
поэтапно
● Иметь план на случай аварии
Спасибо за внимание!
● Блог Одноклассников на Хабре
http://habrahabr.ru/company/odnoklassniki/
● Больше о нас и наших докладах
http://v.ok.ru/
Дмитрий Самсонов
dmitry.samsonov@odnoklassniki.ru
https://www.linkedin.com/in/dmitrysamsonov

More Related Content

PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PPTX
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
PPTX
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
PPTX
Опыт построения СХД на базе Windows Server для использования в публичном обла...
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
PPTX
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)

What's hot (20)

PDF
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
PDF
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
PDF
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PPTX
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PPTX
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PPTX
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
PPSX
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
PDF
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
PPTX
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
PPTX
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
обзор архитектуры и подсистем деплоя и мониторинга
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Ad

Viewers also liked (20)

PDF
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
PPTX
SmartMonitoring - мониторинг бизнес-логики в Одноклассниках / Сергей Шарапов ...
PPTX
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
PDF
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
PDF
Поиск совпадений и дедупликация в потоке / Леонид Юрьев (Positive Technologies)
PPTX
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
PPTX
Как мы готовим MySQL / Николай Королёв (Badoo)
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
PPT
PDF
DevOps и системы управления конфигурацией. SECON 2015
PPTX
Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...
PDF
Тестирование аварий. Андрей Губа. Highload++ 2015
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPTX
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
PPTX
Путь мониторинга, DevOps club в Grammarly
PDF
Monitoring base, golang meetup, kyiv
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
SmartMonitoring - мониторинг бизнес-логики в Одноклассниках / Сергей Шарапов ...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Поиск совпадений и дедупликация в потоке / Леонид Юрьев (Positive Technologies)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Как мы готовим MySQL / Николай Королёв (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
DevOps и системы управления конфигурацией. SECON 2015
Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...
Тестирование аварий. Андрей Губа. Highload++ 2015
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Путь мониторинга, DevOps club в Grammarly
Monitoring base, golang meetup, kyiv
Ad

Similar to Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine / Дмитрий Самсонов (Одноклассники) (20)

PDF
Managing thousands of servers at OK.RU
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
PDF
Чему мы научились разрабатывая микросервисы?
PDF
My talk on Salt and Ansible from DevConf 2014
PDF
Continuousdelivery
PDF
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PPTX
Жизнь проекта на production
PDF
Иван Евтухович — Как перестать релизиться и начать жить
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PDF
IT-инфраструктура. FAQ для разработчика
ODP
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
PDF
Управление контейнерами в облаках
PDF
Алексей Залесов-«Управление контейнерами в облаках»
PPTX
High Availability в жизни обычного разработчика
PDF
Chudov
PPTX
Chef @DevWeb
PPTX
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
PPTX
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Managing thousands of servers at OK.RU
Вадим Мадисон "Опыт разработки через микросервисы"
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились разрабатывая микросервисы?
My talk on Salt and Ansible from DevConf 2014
Continuousdelivery
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production
Иван Евтухович — Как перестать релизиться и начать жить
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
IT-инфраструктура. FAQ для разработчика
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Управление контейнерами в облаках
Алексей Залесов-«Управление контейнерами в облаках»
High Availability в жизни обычного разработчика
Chudov
Chef @DevWeb
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
Управление тысячами серверов в Одноклассниках. Алексей Чудов.

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
PPTX
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)

Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine / Дмитрий Самсонов (Одноклассники)

  • 1. Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine Дмитрий Самсонов
  • 2. Дмитрий Самсонов Ведущий системный администратор в OK.RU Компетенция: ● Zabbix ● CFEngine ● Linux tuning dmitry.samsonov@odnoklassniki.ru https://www.linkedin.com/in/dmitrysamsonov
  • 5. Разоблачение Я предвзят У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x
  • 6. Разоблачение Я предвзят У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x CFEngine не лидер и не аутсайдер рынка
  • 7. Разоблачение Я предвзят У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x CFEngine не лидер и не аутсайдер рынка Я не буду сравнивать configuration management на сегодняшний день
  • 8. Разоблачение Я предвзят У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x CFEngine не лидер и не аутсайдер рынка Я не буду сравнивать configuration management на сегодняшний день У меня есть опыт использования только CFEngine и Ansible
  • 10. Классические средства конфигурации ● ssh + scp + winexe ● dssh-command + dscp + dwinexe-command
  • 11. Классические средства конфигурации ● ssh + scp + winexe ● dssh-command + dscp + dwinexe-command ● Образ OS (регулярные обновления)
  • 12. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"
  • 13. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname" How much is 5 + 8 =
  • 14. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname" How much is 5 + 8 = 50, 100, 200...
  • 15. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname" How much is 5 + 8 = 13 Correct srvd1352:O:0:srvd1352
  • 16. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname" How much is 5 + 8 = 13 Correct srvd1352:O:0:srvd1352 Executing: "hostname" Do you want to execute the command on servers in DL? [Yes/No]: Yes srvd1353:O:0:srvd1353
  • 17. dssh-command # cqn feeds-portlet-cdb | dssh-command -t 300 "hostname" How much is 5 + 8 = 13 Correct srvd1352:O:0:srvd1352 Executing: "hostname" Do you want to execute the command on servers in DL? [Yes/No]: Yes srvd1353:O:0:srvd1353 Executing: "hostname" Do you want to execute the command on servers in M100? [Yes/no]: Yes srve1993:O:0:srve1993 srve2765:O:0:srve2765 ... Full output saved in /tmp/dsshFullOutput_29606_2016-10-14_13-17.log file.
  • 19. Как мы выбирали и что выбрали в 2012 ● Интеграция с CMDB ● Установка пакетов ● Работа с файлами (копирование/редактирование/атрибуты) ● Контроль файлов (содержимое/атрибуты) ● Управление процессами и сервисами ● Ручной запуск политик ● Контроль версий, логирование изменений, отчеты ● Масштабирование, резервирование ● Поддержка Linux и Windows ● Проверка на наличие серверов без работающего CM
  • 20. Как мы выбирали и что выбрали в 2012 ● Производительность
  • 22. Как мы выбирали и что выбрали в 2012 ● Производительность ● Зрелость
  • 23. Современная история CM “A theory of configuration maintenance was worked out by Mark Burgess with a practical implementation on present day computer systems in the software CFEngine able to perform real time repair as well as preventive maintenance.” https://en.wikipedia.org/wiki/Configuration_management#Operating_System_configuration_management
  • 24. Как мы выбирали и что выбрали в 2012 ● Зрелость ● Производительность ● Популярность
  • 28. Типичная политика настройки приложения "app_ok_feed" or => {"cmdb_group_feeds_proxy", “cmdb_group_feeds_cache}; ... bundle agent app_ok_feed { vars: "application" string => "ok-feed"; methods: "app_ok" usebundle => app_ok("$(application)"); }
  • 29. Библиотека настройки приложений bundle agent app_ok(application) { vars: "file[/ok/bin/$(application)][policy]" string => "copy"; "file[/ok/bin/$(application)][mode]" string => "0755"; "file[/ok/conf/$(application).conf][policy]" string => "copy"; "file[/root/ok/ok.properties][policy]" string => "edit"; "file[/root/ok/ok.properties][suffix]" string => "$(application)"; "file[/root/ok/ok.properties][type]" string => "file"; methods: "files" usebundle => files_manage("$(this.bundle).file"); }
  • 30. CFEngine может быть простым в использовании Добавить пользователя: "user[git][policy]" string => "add"; Запустить сервис: "service[mysql][policy]" string => "start"; Добавить крон: "cron[do_well][cron]" string => "* * * * * do_well"; Установить пакет: "package[rsyslog][policy]" string => "add";
  • 31. Количество политик по типам Библиотека Служебные Приложения
  • 32. Возможно всё! ● IP routes ● HW RAID Write cache ● SELinux ● IPMI SOL ● Kernel modules ● RSS/RPS/RFS
  • 33. Чем он нам не нравится ● Высокий порог вхождения
  • 34. Чем он нам не нравится ● Высокий порог вхождения ● Сильно отстаёт от конкурентов
  • 35. Чем он нам не нравится ● Высокий порог вхождения ● Сильно отстаёт от конкурентов ● Нет возможности расширять функционал
  • 36. Чем он нам не нравится ● Высокий порог вхождения ● Сильно отстаёт от конкурентов ● Нет возможности расширять функционал ● Плохие шаблоны
  • 38. “В одну тихую весеннюю ночь, а именно с 4- го на 5-ое апреля 2013-го года, ничто не предвещало беды — юзеры непринуждённо общались, грузили и комментили фоточки, и собирали урожай, как вдруг всё ё***лось, и что, с**а, характерно, обратно не поднялось. Ни через час, ни через два, ни через три. И даже не через 20 часов! … Что это за централизованная система управления, которая лёгким движением руки позволяет отправить несколько тысяч серверов в /dev/null, знают только её разработчики…” https://lurkmore.to/Одноклассники
  • 39. Можно ли было избежать? ● Проверка синаксиса ● Тестовые окружения ● Ревью ● Мониторинг ошибок
  • 41. CFEngine по-прежнему работает постоянно и проверяет политики каждые 5 минут
  • 42. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 43. GIT hooks ● Проверка синтаксиса
  • 44. GIT hooks ● Проверка синтаксиса ● Автокоррекция стиля
  • 45. GIT hooks ● Проверка синтаксиса ● Автокоррекция стиля ● Автозаполнение и проверка commit message
  • 46. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 47. Проверка в тестовом окружении ● Unstable - виртуалки
  • 48. Проверка в тестовом окружении ● Unstable - виртуалки ● Testing - физические сервера
  • 49. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 51. Stable ● Прод сервера ● От каждого нового кластера берётся один сервер
  • 52. Stable ● Прод сервера ● От каждого нового кластера берётся один сервер ● Все варианты железа и приложений
  • 53. Stable ● Прод сервера ● От каждого нового кластера берётся один сервер ● Все варианты железа и приложений ● Потеря прозрачна для пользователей
  • 54. Stable ● Прод сервера ● От каждого нового кластера берётся один сервер ● Все варианты железа и приложений ● Потеря прозрачна для пользователей ● Обновления плавно в течение одного часа
  • 55. Stable ● Прод сервера ● От каждого нового кластера берётся один сервер ● Все варианты железа и приложений ● Потеря прозрачна для пользователей ● Обновления плавно в течение одного часа ● Для серверов автоматически контролируется нагрузка
  • 56. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 57. Ревью Ревью политики: 1. Соблюдение style guide (большая часть проверяется pre-commit хуком в git) 2. “Адекватность” кода 3. Использование последних версий методов 4. …
  • 58. Ревью Соблюдение всех условий для продвижения в прод: 1. Нет ошибок выполнения 2. Нет проблем с нагрузкой 3. “Промариновалось”
  • 59. Ещё пара слов про ревью ● Исключение - инциденты!
  • 60. Ещё пара слов про ревью ● Исключение - инциденты! ● Кто ревьювит?
  • 61. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 62. Production ● Поделен на независимые части
  • 63. Production ● Поделен на независимые части ● Каждая часть применяет изменения равномерно в течение часа
  • 64. Production ● Поделен на независимые части ● Каждая часть применяет изменения равномерно в течение часа ● Обновления работают только с 8:00 до 20:00
  • 65. Как мы работаем 1. Проверка в git hooks 2. Проверка в тестовом окружении 3. Проверка на части прод серверов с автоматизированным контролем нагрузки 4. Ревью 5. Плавное распространение по проду
  • 67. План “Б” ● Альтернативный минимальный набор политик ● Изменяется очень редко
  • 68. План “В” cf-stop - остановка CFEngine на всём проде за несколько минут
  • 70. Это надо делать обязательно ● Тестировать в разных условиях ● Долго тестировать на части прода ● Делать ревью ● Распространять обновления в продакшене плавно и поэтапно ● Иметь план на случай аварии
  • 71. Спасибо за внимание! ● Блог Одноклассников на Хабре http://habrahabr.ru/company/odnoklassniki/ ● Больше о нас и наших докладах http://v.ok.ru/ Дмитрий Самсонов dmitry.samsonov@odnoklassniki.ru https://www.linkedin.com/in/dmitrysamsonov