51

Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

  • Upload
    yandex

  • View
    150

  • Download
    7

Embed Size (px)

Citation preview

Page 1: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning
Page 2: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Построение кластеров, нагрузочное тестирование и capacity planning

Куликовский Дмитрий

[email protected]

Page 3: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

С чего всё начинается

Возможные варианты:

1) Стартап – сервис, который только начинает свою жизнь

2) BigData only – сервис по обработке данных, mapReduce, machine learning и прочий OLAP

3) Проект с историей и большим количеством legacy

Нижний колонтитул

Page 4: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Важность проектирования

•  Где разместить проект

•  Какой уровень резервирования необходим

•  Что должно войти в SLA

•  Как проект будет масштабироваться

4

Page 5: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Использовать облако или нет?

5

Page 6: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Масштабирование

• Масштабирование может быть как вертикальным, так и горизонтальным.

• Шардирование – основа для горизонтального масштабирования.

• Правильная архитектура в целом – основа для вертикального масштабирования

6

Page 7: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Deploy

Перед тем как начать разрабатывать новый сервис или просто собирать кластер для майнинга данных, нужно ответить на крайне важные вопросы про то как обновлять или откатывать софт в продакшине.

• Как выкладывать новый софт?

• Как в продакшн выходит новый релиз пакета или ядра?

• Релизный цикл, continous integration

• Тесты, препродакшн стенд

• Как выкладывать хотфиксы или откатываться назад?

7

Page 8: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Всегда есть что то еще

Всё предусмотреть невозможно, поэтому нужно пользоваться простыми правилами:

•  Сначала проектировать, потом делать

•  Unix way – каждый кусок делать должен делать свою работу и делать её хорошо

•  SLA

•  и самое главное..

8

Page 9: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

9

Page 10: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Новый сервис: свои сложности

• Серверов и мощностей всегда мало, их приходится экономить

• Сервера живут у какого то хостера или в облаке и их обслуживание затрудненно

• Приходится учитывать вероятность того что сервер или диск будут менять долго – день, два, неделю

• Если все сервера в одном дц, он может полностью выйти из строя, даже сгореть

Page 11: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Новый сервис: свои сложности

• Нет большого выбора в решениях по резервированию

• Зачастую нет хорошего выбора железа

• В облаках есть свои проблемы – например нельзя, докупив новые мощности, решить проблему медленного IO

• Множество других проблем из-за того что эксплуатация инфраструктуры отдана внешним людям

Page 12: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Выбор софта

Правильный выбор софта, который будет использоваться – один из самых важных моментов в жизни сервиса. Использовать ли Mysql или купить лицензию Oracle. Приобрести лицензию на gpfs или использовать cephfs (которое еще даже не production ready)..

12

Page 13: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Выбор софта

λ Oracle или mysql λ Gpfs или Ceph λ VmWare или OpenStack λ  И т.д.

13

Page 14: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Новый сервис: очевидные телодвижения

•  Нужно сразу выделить мощности под разработку и тестирование

•  Отследить очевидные точки отказа и подумать как их зарезервировать

•  Мониторинг – что и как мониторить

•  Графики – опять же, что и как показывать на графиках

14

Page 15: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Простой пример

15

Page 16: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Новый сервис: очевидные телодвижения

•  Бекапы важных данных

•  Учесть административные риски:

• Новости хостера

• Даты контрактов

• Ситуация в стране

• и т.д.

•  Удалённые бекапы

16

Page 17: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Кластер для big data

•  Какой софт использовать

•  Резервирование на уровне приложения или средствами ОС

•  Как проводить обновление, обслуживание кластеров

•  real time или работа с большими заданиями

17

Page 18: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Проект с историей

18

How did this Happen?

Page 19: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Проект с историей

•  Редко когда есть актуальная и толковая документация, в том числе и по архитектуре проекта

•  У всех в проекте замылен глаз

•  Сложно вносить существенные изменения

•  Продакшн оброс legacy кодом, который некому поддерживать

19

Page 20: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Мониторинг

В первую очередь надо определится – что за сервис мы предоставляем, по какому показателю клиенты решат что всё работает хорошо.

• Если сервис обрабатывает и показывает картинки, что является его показателем работоспособности?

• А если сервис занимается составлением большого отчета?

• Как видят «правильную» работу сервиса разработчики, админы, директор?

20

Page 21: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Что такое SLA

•  Традиционный пункт в SLA – доступность сервиса: 99% или 99.9999%

•  Время реакции системы – тайминги или время обработки задания

•  Скорость реакции на проблемы

•  Время восстановления после сбоя

21

Page 22: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Мониторинг, основы

Всегда нужно мониторить сам сервер

•  Доступность сервера

•  Загруженность ресурсов: сеть, диски, процессор, память

•  Ошибки в сети

•  Здоровье дисков, рейдов

22

Page 23: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Мониторинг сервисов

На каждый важный процесс должен быть мониторинг.

• Если это http сервер, то должна быть проверка, делающая http запрос.

•  Если делается бекап, то нужно проверять сделался ли он или сразу проверять что он разворачивается на тестовом стенде (комплексная проверка).

•  Мониторинг должен давать ясный ответ на вопрос о том что сломалось.

23

Page 24: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Мониторинг – основа здоровья

24

Page 25: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Функциональный мониторинг

•  Мониторинг показателей SLA.

•  Асинхронный мониторинг – скрипт отправляет задание в очередь и ждёт результат на другом конце, т.о. Проверяет всю цепочку обработки задания.

•  Активный мониторинг, который может переводить нагрузку на заглушку, т.н. тыкву (например мониторинг ipvs)

25

Page 26: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Графики

•  Собирайте все возможные метрики как можно чаще

•  Из основных метрик собирайте dashboard’ы и медитируйте над ними

•  Графики лучший способ увидеть поведение системы в динамике

26

Page 27: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Минимальная отказоустойчивость

Классическая схема с hot standby

27

Page 28: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Как задачи предстоит решать

• Синхронизация, что выбрать?

• Репликация

• Rsync

• Drdb, gpfs, ceph etc.

•  Механизмы переключения, автоматика v.s. ручное

•  Как проверять синхронность, как её восстанавливать

28

Page 29: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример

29

Page 30: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Что проверять?

•  Проверка синхронизации данных

•  Синхронизация конфигурации

•  «Учения» по переключению на standby

30

Page 31: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Живая копия

31

Page 32: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример

32

Page 33: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Всё тоже самое, но только быстрей

•  Синхронизация стала сложнее, должна работать в обе стороны.

•  Latency сети выходит на передний план

•  Split brain – третья «как бы нога»

•  Распределённые сервисы – кеш, очереди, блокировки

•  Транспорт (p2p, multicast, rsync, etc.)

33

Page 34: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Больше дц

34

Page 35: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Инфраструктура

•  Без удобного способа запускать новые сервера больше жить нельзя

•  Своя инфрастурктура сети, свой днс и firewall

•  Системы управления конфигурациями: salt, puppet, chef, etc.

•  Наливка и обновление серверов

35

Page 36: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Инфраструктура

•  Время еще раз подумать про облачные решения

•  Не каждый дц одинаково полезен

•  Новые дц больше и железо в них более свежее

•  Апгрейд серверов или гетерогенная среда и умная балансировка нагрузки

36

Page 37: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Кластерные решения

•  Дерево репликации

•  Синхронная копия без подтверждения записи или с частичным подтверждением

•  Полностью синхронная копия

•  Базы с поддержкой региональности

37

Page 38: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Мониторинг не сервера, а сервиса

Для кластерных решений с несколькими дц мониторинг выглядит по-другому, на первый план выходит мониторинг сервиса и агрегаты проверок.

• Агрегированный мониторинг, понятия кворум и гистерезис.

• В SLA включается понятие о степени деградации

• Для графиков тоже теперь есть смысл смотреть только на агрегированные значения

• Косвенный мониторинг – сломалось на одном хосте, а загорелось на другом

38

Page 39: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Планетарная отказоустойчивость

Задача не решается чисто техническим путём, использовать датацентры на разных континентах можно будет только если заложить это в архитектуру сервиса.

•  Локальность пользователя

•  Шардирование, редиректы, частичная синхронизация

•  CDN

•  Распределённый мониторинг

39

Page 40: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Новые задачи

•  Традиционные решения для транспорта данных не работают (например реплика), нужно тюнить сеть и выбирать новые решения.

•  Синхронизация всего – пакетов, конфигов, доступов, ёмкостей кластеров.

•  Больше формализации и бюрократии

40

Page 41: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Deploy в масштабах планеты

•  Выкладка новой версии – задача на целый день

•  Кровавая война за скорость выкладки

•  Как обновить ядро на 50 000 серверах по всему миру?

•  Автоматизировать выкладку или нанять команду админов?

41

Page 42: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Как за всем уследить

42

Page 43: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Как за всем уследить

•  Dashboard’ы с метриками из SLA

•  Тщательные разборы инцидентов по мониторигам параметров SLA

•  Системы управления кластерами и задачи синхронизации версий пакетов, скриптов, конфигов

•  Максимальное покрытие тестами и нагрузочным тестированием

43

Page 44: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Capacity planning

•  Нагрузочное тестирование

•  Анализ продуктовых планов

•  Анализ естественного роста

Всегда нужно учитывать рост скорости работы новых серверов, разные компоненты растут по разному.

44

Page 45: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример 1

Capacity planning в простом сервисе, когда достаточно учитывать только естественный рост.

•  Найти самый загруженный ресурс

•  Оценить тренд

•  Прикинуть, с линейкой, когда ресурс закончится

45

Page 46: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример 1

46

Page 47: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример 2

Большой кластер с разными по размеру дц

Разные по мощности сервера

Высокие требования по доступности и качеству

Кластера должны выдерживать пиковые нагрузки при подключении новых клиентов

47

Page 48: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Пример 2

48

Page 49: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Анализ планов

Планы по продукту «Сервис 2.0»

• Запустить новый фронтэнд

• Ускорить генерацию отчетов до 1с

• Повысить отказоустойчивость

• Новые среды для тестирования

49

Планы в железе

• По 4 новых сервера в 3х дц

• +50% серверов под новое решение = 600*50% = 300 новых серверов

• Добавить дополнительную копию данных = + 300 серверов

• + 30 новых серверов под виртуалки и тестовый стенд

Page 50: Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacity planning

Что почитать

• 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

Что почитать

• Искусство программирования для 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