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

Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Embed Size (px)

Citation preview

Page 2: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Дмитрий СамсоновВедущий системный администратор в OK.RU

Компетенция:

● Zabbix

● CFEngine

● Linux tuning

[email protected]

https://www.linkedin.com/in/dmitrysamsonov

Page 3: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Одноклассники>11000 серверов

>150 приложений

>600 кластеров

Page 4: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РазоблачениеЯ предвзят

Page 5: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РазоблачениеЯ предвзят

У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x

Page 6: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РазоблачениеЯ предвзят

У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x

CFEngine не лидер и не аутсайдер рынка

Page 7: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РазоблачениеЯ предвзят

У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x

CFEngine не лидер и не аутсайдер рынка

Я не буду сравнивать configuration management на сегодняшний день

Page 8: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РазоблачениеЯ предвзят

У меня есть опыт использования CFEngine только версии 3.3.x-3.4.x

CFEngine не лидер и не аутсайдер рынка

Я не буду сравнивать configuration management на сегодняшний день

У меня есть опыт использования только CFEngine и Ansible

Page 9: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Классические средства конфигурации

● ssh + scp + winexe

Page 10: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Классические средства конфигурации

● ssh + scp + winexe● dssh-command + dscp + dwinexe-command

Page 11: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Классические средства конфигурации

● ssh + scp + winexe● dssh-command + dscp + dwinexe-command● Образ OS (регулярные обновления)

Page 12: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"

Page 13: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"How much is 5 + 8 =

Page 14: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"How much is 5 + 8 =

50, 100, 200...

Page 15: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"How much is 5 + 8 = 13Correctsrvd1352:O:0:srvd1352

Page 16: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"How much is 5 + 8 = 13Correctsrvd1352:O:0:srvd1352Executing: "hostname"Do you want to execute the command on servers in DL? [Yes/No]: Yessrvd1353:O:0:srvd1353

Page 17: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

dssh-command# cqn feeds-portlet-cdb | dssh-command -t 300 "hostname"How much is 5 + 8 = 13Correctsrvd1352:O:0:srvd1352Executing: "hostname"Do you want to execute the command on servers in DL? [Yes/No]: Yessrvd1353:O:0:srvd1353Executing: "hostname"Do you want to execute the command on servers in M100? [Yes/no]: Yessrve1993:O:0:srve1993srve2765:O:0:srve2765...Full output saved in /tmp/dsshFullOutput_29606_2016-10-14_13-17.log file.

Page 18: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Сервера настроены неправильно

Page 19: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы выбирали и что выбрали в 2012● Интеграция с CMDB● Установка пакетов● Работа с файлами (копирование/редактирование/атрибуты)● Контроль файлов (содержимое/атрибуты)● Управление процессами и сервисами● Ручной запуск политик● Контроль версий, логирование изменений, отчеты● Масштабирование, резервирование● Поддержка Linux и Windows● Проверка на наличие серверов без работающего CM

Page 20: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы выбирали и что выбрали в 2012

● Производительность

Page 21: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Производительность

3000 клиентов

Page 22: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы выбирали и что выбрали в 2012

● Производительность

● Зрелость

Page 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

Page 24: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы выбирали и что выбрали в 2012

● Зрелость

● Производительность

● Популярность

Page 25: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Популярность CM

Page 26: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

CFEngine в Одноклассниках

Page 27: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

CFEngine может быть простым

Page 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)");}

Page 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");}

Page 30: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

CFEngine может быть простым в использовании

Добавить пользователя:"user[git][policy]" string => "add";

Запустить сервис:"service[mysql][policy]" string => "start";

Добавить крон:"cron[do_well][cron]" string => "* * * * * do_well";

Установить пакет:"package[rsyslog][policy]" string => "add";

Page 31: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Количество политик по типам

Библиотека

Служебные

Приложения

Page 32: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Возможно всё!● IP routes

● HW RAID Write cache

● SELinux

● IPMI SOL

● Kernel modules

● RSS/RPS/RFS

Page 33: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Чем он нам не нравится● Высокий порог вхождения

Page 34: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Чем он нам не нравится● Высокий порог вхождения

● Сильно отстаёт от конкурентов

Page 35: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Чем он нам не нравится● Высокий порог вхождения

● Сильно отстаёт от конкурентов

● Нет возможности расширять функционал

Page 36: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Чем он нам не нравится● Высокий порог вхождения

● Сильно отстаёт от конкурентов

● Нет возможности расширять функционал

● Плохие шаблоны

Page 37: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Чем примечательна дата4 апреля?

Page 38: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

“В одну тихую весеннюю ночь, а именно с 4-го на 5-ое апреля 2013-го года, ничто не предвещало беды — юзеры непринуждённо общались, грузили и комментили фоточки, и собирали урожай, как вдруг всё ё***лось, и что, с**а, характерно, обратно не поднялось. Ни через час, ни через два, ни через три. И даже не через 20 часов! … Что это за централизованная система управления, которая лёгким движением руки позволяет отправить несколько тысяч серверов в /dev/null, знают только её разработчики…”

https://lurkmore.to/Одноклассники

Page 39: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Можно ли было избежать?● Проверка синаксиса● Тестовые окружения● Ревью● Мониторинг ошибок

Page 40: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на
Page 41: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

CFEngine по-прежнему работает постоянно и проверяет политики

каждые 5 минут

Page 42: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 43: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

GIT hooks

● Проверка синтаксиса

Page 44: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

GIT hooks

● Проверка синтаксиса

● Автокоррекция стиля

Page 45: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

GIT hooks

● Проверка синтаксиса

● Автокоррекция стиля

● Автозаполнение и проверка commit message

Page 46: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 47: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Проверка в тестовом окружении

● Unstable - виртуалки

Page 48: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Проверка в тестовом окружении

● Unstable - виртуалки

● Testing - физические сервера

Page 49: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 50: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера

Page 51: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера● От каждого нового кластера

берётся один сервер

Page 52: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера● От каждого нового кластера

берётся один сервер● Все варианты железа и

приложений

Page 53: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера● От каждого нового кластера

берётся один сервер● Все варианты железа и

приложений● Потеря прозрачна для

пользователей

Page 54: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера● От каждого нового кластера

берётся один сервер● Все варианты железа и

приложений● Потеря прозрачна для

пользователей● Обновления плавно в течение

одного часа

Page 55: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Stable● Прод сервера● От каждого нового кластера

берётся один сервер● Все варианты железа и

приложений● Потеря прозрачна для

пользователей● Обновления плавно в течение

одного часа● Для серверов автоматически

контролируется нагрузка

Page 56: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 57: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РевьюРевью политики:

1. Соблюдение style guide (большая часть проверяется pre-commit хуком в git)2. “Адекватность” кода3. Использование последних версий методов4. …

Page 58: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

РевьюСоблюдение всех условий для продвижения в прод:

1. Нет ошибок выполнения2. Нет проблем с нагрузкой3. “Промариновалось”

Page 59: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Ещё пара слов про ревью

● Исключение - инциденты!

Page 60: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Ещё пара слов про ревью

● Исключение - инциденты!● Кто ревьювит?

Page 61: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 62: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Production

● Поделен на независимые части

Page 63: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Production

● Поделен на независимые части

● Каждая часть применяет изменения равномерно в течение часа

Page 64: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Production

● Поделен на независимые части

● Каждая часть применяет изменения равномерно в течение часа

● Обновления работают только с 8:00 до 20:00

Page 65: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Как мы работаем1. Проверка в git hooks

2. Проверка в тестовом окружении

3. Проверка на части прод серверов с автоматизированным контролем нагрузки

4. Ревью

5. Плавное распространение по проду

Page 66: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на
Page 67: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

План “Б”

● Альтернативный минимальный набор политик

● Изменяется очень редко

Page 68: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

План “В”cf-stop - остановка CFEngine на всём проде за несколько минут

Page 69: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

cf-update

exitstatus=0

update+execute

executestop

exitstatus=0

batch size x2

continue

Page 70: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Это надо делать обязательно● Тестировать в разных условиях

● Долго тестировать на части прода

● Делать ревью

● Распространять обновления в продакшене плавно и

поэтапно

● Иметь план на случай аварии

Page 71: Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на

Спасибо за внимание!

● Блог Одноклассников на Хабре http://habrahabr.ru/company/odnoklassniki/

● Больше о нас и наших докладахhttp://v.ok.ru/

Дмитрий Самсонов[email protected]

https://www.linkedin.com/in/dmitrysamsonov