![Page 1: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/1.jpg)
![Page 2: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/2.jpg)
Построение кластеров, нагрузочное тестирование и capacity planning
Куликовский Дмитрий
![Page 3: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/3.jpg)
С чего всё начинается
Возможные варианты:
1) Стартап – сервис, который только начинает свою жизнь
2) BigData only – сервис по обработке данных, mapReduce, machine learning и прочий OLAP
3) Проект с историей и большим количеством legacy
Нижний колонтитул
![Page 4: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/4.jpg)
Важность проектирования
• Где разместить проект
• Какой уровень резервирования необходим
• Что должно войти в SLA
• Как проект будет масштабироваться
4
![Page 5: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/5.jpg)
Использовать облако или нет?
5
![Page 6: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/6.jpg)
Масштабирование
• Масштабирование может быть как вертикальным, так и горизонтальным.
• Шардирование – основа для горизонтального масштабирования.
• Правильная архитектура в целом – основа для вертикального масштабирования
6
![Page 7: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/7.jpg)
Deploy
Перед тем как начать разрабатывать новый сервис или просто собирать кластер для майнинга данных, нужно ответить на крайне важные вопросы про то как обновлять или откатывать софт в продакшине.
• Как выкладывать новый софт?
• Как в продакшн выходит новый релиз пакета или ядра?
• Релизный цикл, continous integration
• Тесты, препродакшн стенд
• Как выкладывать хотфиксы или откатываться назад?
7
![Page 8: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/8.jpg)
Всегда есть что то еще
Всё предусмотреть невозможно, поэтому нужно пользоваться простыми правилами:
• Сначала проектировать, потом делать
• Unix way – каждый кусок делать должен делать свою работу и делать её хорошо
• SLA
• и самое главное..
8
![Page 9: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/9.jpg)
9
![Page 10: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/10.jpg)
Новый сервис: свои сложности
• Серверов и мощностей всегда мало, их приходится экономить
• Сервера живут у какого то хостера или в облаке и их обслуживание затрудненно
• Приходится учитывать вероятность того что сервер или диск будут менять долго – день, два, неделю
• Если все сервера в одном дц, он может полностью выйти из строя, даже сгореть
![Page 11: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/11.jpg)
Новый сервис: свои сложности
• Нет большого выбора в решениях по резервированию
• Зачастую нет хорошего выбора железа
• В облаках есть свои проблемы – например нельзя, докупив новые мощности, решить проблему медленного IO
• Множество других проблем из-за того что эксплуатация инфраструктуры отдана внешним людям
![Page 12: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/12.jpg)
Выбор софта
Правильный выбор софта, который будет использоваться – один из самых важных моментов в жизни сервиса. Использовать ли Mysql или купить лицензию Oracle. Приобрести лицензию на gpfs или использовать cephfs (которое еще даже не production ready)..
12
![Page 13: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/13.jpg)
Выбор софта
λ Oracle или mysql λ Gpfs или Ceph λ VmWare или OpenStack λ И т.д.
13
![Page 14: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/14.jpg)
Новый сервис: очевидные телодвижения
• Нужно сразу выделить мощности под разработку и тестирование
• Отследить очевидные точки отказа и подумать как их зарезервировать
• Мониторинг – что и как мониторить
• Графики – опять же, что и как показывать на графиках
14
![Page 15: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/15.jpg)
Простой пример
15
![Page 16: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/16.jpg)
Новый сервис: очевидные телодвижения
• Бекапы важных данных
• Учесть административные риски:
• Новости хостера
• Даты контрактов
• Ситуация в стране
• и т.д.
• Удалённые бекапы
16
![Page 17: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/17.jpg)
Кластер для big data
• Какой софт использовать
• Резервирование на уровне приложения или средствами ОС
• Как проводить обновление, обслуживание кластеров
• real time или работа с большими заданиями
17
![Page 18: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/18.jpg)
Проект с историей
18
How did this Happen?
![Page 19: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/19.jpg)
Проект с историей
• Редко когда есть актуальная и толковая документация, в том числе и по архитектуре проекта
• У всех в проекте замылен глаз
• Сложно вносить существенные изменения
• Продакшн оброс legacy кодом, который некому поддерживать
19
![Page 20: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/20.jpg)
Мониторинг
В первую очередь надо определится – что за сервис мы предоставляем, по какому показателю клиенты решат что всё работает хорошо.
• Если сервис обрабатывает и показывает картинки, что является его показателем работоспособности?
• А если сервис занимается составлением большого отчета?
• Как видят «правильную» работу сервиса разработчики, админы, директор?
20
![Page 21: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/21.jpg)
Что такое SLA
• Традиционный пункт в SLA – доступность сервиса: 99% или 99.9999%
• Время реакции системы – тайминги или время обработки задания
• Скорость реакции на проблемы
• Время восстановления после сбоя
21
![Page 22: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/22.jpg)
Мониторинг, основы
Всегда нужно мониторить сам сервер
• Доступность сервера
• Загруженность ресурсов: сеть, диски, процессор, память
• Ошибки в сети
• Здоровье дисков, рейдов
22
![Page 23: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/23.jpg)
Мониторинг сервисов
На каждый важный процесс должен быть мониторинг.
• Если это http сервер, то должна быть проверка, делающая http запрос.
• Если делается бекап, то нужно проверять сделался ли он или сразу проверять что он разворачивается на тестовом стенде (комплексная проверка).
• Мониторинг должен давать ясный ответ на вопрос о том что сломалось.
23
![Page 24: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/24.jpg)
Мониторинг – основа здоровья
24
![Page 25: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/25.jpg)
Функциональный мониторинг
• Мониторинг показателей SLA.
• Асинхронный мониторинг – скрипт отправляет задание в очередь и ждёт результат на другом конце, т.о. Проверяет всю цепочку обработки задания.
• Активный мониторинг, который может переводить нагрузку на заглушку, т.н. тыкву (например мониторинг ipvs)
25
![Page 26: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/26.jpg)
Графики
• Собирайте все возможные метрики как можно чаще
• Из основных метрик собирайте dashboard’ы и медитируйте над ними
• Графики лучший способ увидеть поведение системы в динамике
26
![Page 27: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/27.jpg)
Минимальная отказоустойчивость
Классическая схема с hot standby
27
![Page 28: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/28.jpg)
Как задачи предстоит решать
• Синхронизация, что выбрать?
• Репликация
• Rsync
• Drdb, gpfs, ceph etc.
• Механизмы переключения, автоматика v.s. ручное
• Как проверять синхронность, как её восстанавливать
28
![Page 29: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/29.jpg)
Пример
29
![Page 30: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/30.jpg)
Что проверять?
• Проверка синхронизации данных
• Синхронизация конфигурации
• «Учения» по переключению на standby
30
![Page 31: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/31.jpg)
Живая копия
31
![Page 32: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/32.jpg)
Пример
32
![Page 33: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/33.jpg)
Всё тоже самое, но только быстрей
• Синхронизация стала сложнее, должна работать в обе стороны.
• Latency сети выходит на передний план
• Split brain – третья «как бы нога»
• Распределённые сервисы – кеш, очереди, блокировки
• Транспорт (p2p, multicast, rsync, etc.)
33
![Page 34: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/34.jpg)
Больше дц
34
![Page 35: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/35.jpg)
Инфраструктура
• Без удобного способа запускать новые сервера больше жить нельзя
• Своя инфрастурктура сети, свой днс и firewall
• Системы управления конфигурациями: salt, puppet, chef, etc.
• Наливка и обновление серверов
35
![Page 36: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/36.jpg)
Инфраструктура
• Время еще раз подумать про облачные решения
• Не каждый дц одинаково полезен
• Новые дц больше и железо в них более свежее
• Апгрейд серверов или гетерогенная среда и умная балансировка нагрузки
36
![Page 37: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/37.jpg)
Кластерные решения
• Дерево репликации
• Синхронная копия без подтверждения записи или с частичным подтверждением
• Полностью синхронная копия
• Базы с поддержкой региональности
37
![Page 38: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/38.jpg)
Мониторинг не сервера, а сервиса
Для кластерных решений с несколькими дц мониторинг выглядит по-другому, на первый план выходит мониторинг сервиса и агрегаты проверок.
• Агрегированный мониторинг, понятия кворум и гистерезис.
• В SLA включается понятие о степени деградации
• Для графиков тоже теперь есть смысл смотреть только на агрегированные значения
• Косвенный мониторинг – сломалось на одном хосте, а загорелось на другом
38
![Page 39: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/39.jpg)
Планетарная отказоустойчивость
Задача не решается чисто техническим путём, использовать датацентры на разных континентах можно будет только если заложить это в архитектуру сервиса.
• Локальность пользователя
• Шардирование, редиректы, частичная синхронизация
• CDN
• Распределённый мониторинг
39
![Page 40: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/40.jpg)
Новые задачи
• Традиционные решения для транспорта данных не работают (например реплика), нужно тюнить сеть и выбирать новые решения.
• Синхронизация всего – пакетов, конфигов, доступов, ёмкостей кластеров.
• Больше формализации и бюрократии
40
![Page 41: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/41.jpg)
Deploy в масштабах планеты
• Выкладка новой версии – задача на целый день
• Кровавая война за скорость выкладки
• Как обновить ядро на 50 000 серверах по всему миру?
• Автоматизировать выкладку или нанять команду админов?
41
![Page 42: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/42.jpg)
Как за всем уследить
42
![Page 43: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/43.jpg)
Как за всем уследить
• Dashboard’ы с метриками из SLA
• Тщательные разборы инцидентов по мониторигам параметров SLA
• Системы управления кластерами и задачи синхронизации версий пакетов, скриптов, конфигов
• Максимальное покрытие тестами и нагрузочным тестированием
43
![Page 44: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/44.jpg)
Capacity planning
• Нагрузочное тестирование
• Анализ продуктовых планов
• Анализ естественного роста
Всегда нужно учитывать рост скорости работы новых серверов, разные компоненты растут по разному.
44
![Page 45: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/45.jpg)
Пример 1
Capacity planning в простом сервисе, когда достаточно учитывать только естественный рост.
• Найти самый загруженный ресурс
• Оценить тренд
• Прикинуть, с линейкой, когда ресурс закончится
45
![Page 46: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/46.jpg)
Пример 1
46
![Page 47: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/47.jpg)
Пример 2
Большой кластер с разными по размеру дц
Разные по мощности сервера
Высокие требования по доступности и качеству
Кластера должны выдерживать пиковые нагрузки при подключении новых клиентов
47
![Page 48: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/48.jpg)
Пример 2
48
![Page 49: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/49.jpg)
Анализ планов
Планы по продукту «Сервис 2.0»
• Запустить новый фронтэнд
• Ускорить генерацию отчетов до 1с
• Повысить отказоустойчивость
• Новые среды для тестирования
49
Планы в железе
• По 4 новых сервера в 3х дц
• +50% серверов под новое решение = 600*50% = 300 новых серверов
• Добавить дополнительную копию данных = + 300 серверов
• + 30 новых серверов под виртуалки и тестовый стенд
![Page 50: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/50.jpg)
Что почитать
• Web Operations: Keeping the Data On Time https://clck.ru/9MbcW
• The Art of Capacity Planning: Scaling Web Resources https://clck.ru/9MbdF
• Guerrilla Capacity Planning https://clck.ru/9MbdZ
50
![Page 51: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning](https://reader033.vdocuments.net/reader033/viewer/2022042614/5592384f1a28ab44158b47bb/html5/thumbnails/51.jpg)
Что почитать
• Искусство программирования для Unix https://clck.ru/9Mbdy
• Linux Kernel Development (3rd Edition) https://clck.ru/9Mbe8
• Data Analysis with Open Source Tools https://clck.ru/9MbeU
• UNIX. Руководство системного администратора. Для профессионалов https://clck.ru/9MbfZ
51