2. О себе
5+ лет в Parallels
Деятельность:
• Анализ производительности Parallels Plesk Panel
• Анализ производительности серверной виртуализации
• Program manager Parallels Cloud Storage
3. Чем важен доклад
• Что тестировать и как? (консистентность, производительность)
• На что нужно обращать внимание в первую очередь?
• Как обойти множество подводных камней при тестировании?
• Раздаем утилиты для тестирования
4. Мы знаем о хранении данных
Диски подключенные в кластер
Индивидуальные диски
1TB
1TB
1TB
3TB
Parallels Cloud Storage
Высокая производительность
• Автоматическая балансировка данных
• Out-of-the-box SSD-кеширование
Масштабируемость
• Легко расширяется, автоматически
масштабируется, реорганизует кластер про
добавлении новых дисков/серверов
Отказоустойчивость
• Автоматически управляет отказоустойчивостью
и восстановлением
• Прозрачная репликация данных
9. Определиться что хотим получить
• Понять какая предполагается нагрузка на систему
• Что и сколько хотим получить от системы
Позволяет:
• Понять что действительно важно, а что нет
• Числено определить требования (IOPS, MB/s, ms)
• Понять характер нагрузки, основные сценарии
• Сколько машин работает с хранилищем
11. Не используйте хорошо сжимаемые
шаблоны данных
dd if=/dev/urandom of=/tmp/rnd_f size=1M
dd if=/tmp/rnd_f of=/dev/sda size=1M oflag=direct
Правильно:
dd if=/dev/zero of=/dev/sda size=1M
Самый популярный неправильный тест:
dd if=/dev/urandom of=/dev/sda size=1M
Улучшенный вариант, но по-прежнему неправильный :
12. Используйте большой working set
Пример плохого теста: iozone имеет маленький working set, поэтому
меряет память
Пример как working-set влияет на результат:
Random 4K write на Adaptec RAID 71605 (12 SSD) при различном working
set:
Working set Random 4K write
512 MB 100’000 IOPS
2048 MB 3’000 IOPS
13. Кстати, о RAID - контроллерах
Model Seq. write
LSI MegaRAID 2008M-8i 298 MB/s
MegaRAID 9271CV-8i 834 MB/s
Производительность одного диска:
Model Seq. write
LSI MegaRAID 2008M-8i 118 MB/s
MegaRAID 9271CV-8i 134 MB/s
RAID-контроллеры иногда показывают удивительные вещи, если нагружать
все диски параллельно (Sum Total Throughput across all 6 devices:)
14. Не пренебрегайте статистикой
• Отведите не меньше минуты на проведение теста
• Лучше – дольше
• Проводите один тест несколько раз, чтобы сгладить отклонения
• Делайте паузу между тестами
15. Убедитесь, что сравнение честное
Всегда сравнивать только «Яблоки с Яблоками»:
• Одинаковое железо
• Одинаковая нагрузка
• Одинаковый уровень отказоустойчивости
16. Тестируем Sync()
• Write() и Read() – это не все операции
над блочным хранилищем
• Необходимо тестировать sync()
• Операции sync() и fdatasync() требуют
записи данных из кешей на диск
User application
write(),read(),…
Kernel buffer
RAID cache
disk cache
disk
File:
101110
011001
101100
User
Kernel
HW
Kernel
17. Масштабируемость Sync()/flush
Тип Входящих дисков Кол-во Sync() / сек
1 disk 1
RAID 1 N
RAID 0 N
RAID 10 N
RAID 5/6 N
Во сколько раз массив из дисков способен сделать больше операций
sync()/flush по сравнению с одним диском?
Данные должны быть сброшены на каждом диске!
Скорость одного диска
Скорость одного диска
Скорость одного диска
Скорость одного диска
Скорость одного диска
20. Как тестируем?
IO workloads:
• Sequential read of 16MB block
• Sequential write of 16MB block
• Random read of 4KB block
• Random write of 4KB block + sync
• Random write of 32x 4KB block + sync
Масштабируемость:
• 1, 10, 21 физических серверов в кластере
• 1, 4, 16 IO workloads на каждом сервере
21. At_io_iops
at_io_iops --read --rand -s 4K --iops -p 4 -t 60 -u 16G -S -f
/pstorage/<cluster_name>/<benchmark_dir>
• Умеет покрывать все необходимые сценарии
• Правильно подготавливает данные для теста
• Удобная настройка working set, потоков, нагружаемых файлов
• Умеет тестирвать sync
• Умеет aio/dio, cached/uncached
• Через опцию “-vvv” пишет все вызовы
26. Консистентность
• Строгая консистентность (англ. strict consistency) гарантировано
возвращает значение, записанное самой последней операцией "запись”
Примеры: Parallels Cloud Storage, Lustre, …
• Консистентность в конечном счете (англ. eventual consistency)
гарантирует, что, в отсутствии изменений данных, в конечном счете
все запросы будут возвращать последнее обновленное значение.
Примеры: DNS, Amazon S3, …
27. Как проверять консистентность?
Решение:
• Записать данные и прочитать их
Проблемы:
• Кеши
• Распределенность системы
• Консистентность системы связана с её устойчивостью к сбоям
28. Чем проверять консистентность?
Утилита «hw_flush_check»
Принцип работы:
1. Клиент записывает данные и посылает Sync() (сбрасывает на диск)
2. По окончанию Sync(), посылает отчет аудитору
3. Моделируем отключение питания
4. Когда система запустится то клиент проверит сохранились ли данные
disk
Клиент Аудитор
31. Консистентность данных на SSD
Тот же подход применим к тестированию железа:
SSD, RAID-контролеров, SAN
Ищите в спецификации к SSD:
• Intel: Enhanced Power Loss Data Protection
• Samsung: Cache Power Protection
• Kingston: Power-Failure Support
• OCZ: Complete Power Fail Protection
SSD не теряющие данные имеют конденсаторы
32. Консистентность. Выводы
• SW и HW необходимо тестировать на сохранность данных
• Используем для этого утилиту hw_flush_check
• Не используем SSD для ноутбуков в серверах
• Покупаем SSD с Power Loss Protection
• Покупаем SSD с большим сроком службы (durability)
33. Наработка на отказ
The mean time to data loss (MTTDL) — среднее время наработки
до потери данных:
MTTDL ~= 1 / T^2
T – время восстановления
Вывод: Чем быстрее система восстанавливает данные, тем выше
наработка на отказ
Наработка на отказ связана со скоростью восстановления данных
34. Как проверить?
Сценарий:
1. Записать значительный объем данных
2. Отключить компонент
3. Замерить время до полного восстановления данных
Результат:
Сильно зависит от архитектуры
35. Время восстановления RAID
Тип Чтение с рабочих дисков Запись на новый диск
RAID 0 n/a n/a
RAID 1 1 Скорость 1 диска
RAID 5/6 со всех Скорость 1 диска
RAID 10 1 Скорость 1 диска
Если на диски идёт нагрузка, то время будет значительно больше
41. Традиционные системы хранения
Резервируют всё на HW уровне:
• Дублированное питание
• Двойные «мозги»
• Дублированное подключение
• Централизованная система
принятия решений
42. Распределенные системы хранения
Резервируют всё на SW уровне:
• HW априори никогда не надежно
• Резервирование на уровне SW
• Готова к отказу любого компонента
• Не требует необычного железа
• Распределенная система принятия
решений
Notas del editor
Какую бы систему не выбрали,
Кому полезен доклад:
Тем, кто выбирает систему хранения
Тем, кто собирается разворачивать ту или иную системы хранения данных
Тем, кому важно не потерять свои данные
Narrator:
Parallels Cloud Storage works by turning unused disk space on your hardware nodes into a single pooled cloud storage resource.
Service Providers typically deploy 1 to 2 terabytes of storage on hard drives in the node. However, on average over 50% of this disk space is not utilized and can’t be shared across other nodes.
Parallels Cloud Storage solves this problem by connecting the hard drives in multiple hardware nodes into a storage cluster that is shared across all nodes.
Narrator:
Each node see a shared storage. Each saved file onto the storage are divided into chunks. Each chunk saved in several replicas. We will consider the case when each chunk has two replicas (replication level =2). You can see on the picture that each file is divided into 3 chunks. Each chunk has 2 replicas (one locally and one on the other server). Thus data is distributed over the cluster.
Narrator:
If one hardware node fails, replicas on the node becomes unavailable. Thus some chunks have only one replica (they blinks). Parallels Cloud Storage detects it and create necessary replicas on online servers. Thus all saved files is a safe state and accessible on each node in the cluster
Максимально приближенный к реальной нагрузке
Производительность полученная с одной ноды не дает представления о производительности системы в целом
Лучше постепенно менять параметры
Если файловый север, то у нас есть только один хост осуществляет нагрузку на все хранилище. Т.е. хранилище должно максимально быстро уметь обслужить один хост.
В сценарии же кластера для VMок (VPS хостинг), кластер должен уметь обслуживать несколько хостов.
Либо у вас кластероное хранилище совмещено с вычислительными нодами и нагрузка на сам кластер идет изнутри на тех же самых нода. Учитывайте расстояние между компонентами, разнесенными друг от друга.
По сути это 3 разных сценария. Нужно не забывать о сети (пропускной способности) и расстоянии (latency).
Если предполагается, что все сервисы работают с хранилищем одновременно, то необходимо гразить хранилище одновременно со всех нод. Результат замеров для одной ноды умноженный на количество нод не даст вам даже похожего результата с реальностью.
Многие системы (в том числе HW, SSD) имеют специальные тригеры на обработку нулевых данных.
Типичная проблема тестов, как Iozone
Типичная проблема тестов, как Iozone
Я сначала расскажу что делать не надо, а потом расскажу что же в итоге нужно делать
Это – самая распространённая ошибка. Всегда надо спрашивать себя: «А честное ли это соревнование?».
Система
Проверить это казалось бы очень просто. Н
Типичная проблема тестов, как Iozone
Строгая консистентность гарантирует, что вы прочитаете строго то, что записали. Всегда. Представить это можно как транзакционную базу данных, где добавив и закоммитив новую строчку в базу вы полностью уверены, что она в этом базе есть.
Eventual consistency не гарантирует, что вы прочитаете новые данные
NFS – “Close-to-Open Consistency”
Проверить это казалось бы очень просто. Но запись фактически может пройти в кеш вместо того чтобы упасть на диски.
Так как система распределенная, то кеш может быть даже не на локальной машине, а где-то в кластере.
Поэтому нужно тестировать консистентность во время моделирование сбоя компонент, чтобы убедиться, что данные реально лежат на дисках.
Моделируем проблему на оборудовании, а hw_flush_check позволяет проверить сохранились ли данные.
Обычно промышленные NAS и SAN это несколько юнитовые коробки с откоусточивостью на железном уровне. Они имеют двойные мозги, двойное питание и все их компоненты дублируются на уровне железа.
Их можно представить себе как отказоустойчивую кружку с двойными ручками.
Самое главное – они имеют централизованное место принятия решений, так называемые «мозги». Есть какой-то выделенный блок, которое определяет состояние данных.
В распределенной системе центр принятия решений не может быть один иначе он будет является единой точной отказа.
То есть система принятий решения должна быть распределенная, иметь устойчивый к сбою.