42
Тестируем производительность распределенных систем хранения данных Киров Александр Parallels

Тестируем производительность распределённых систем, Александр Киров (Parallels)

  • Upload
    ontico

  • View
    982

  • Download
    2

Embed Size (px)

DESCRIPTION

Доклад Александра Кирова на HighLoad++ 2014.

Citation preview

Page 1: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Тестируем производительность распределенных систем хранения данныхКиров АлександрParallels

Page 2: Тестируем производительность распределённых систем, Александр Киров (Parallels)

О себе5+ лет в Parallels

Деятельность:

• Анализ производительности Parallels Plesk Panel

• Анализ производительности серверной виртуализации

• Program manager Parallels Cloud Storage

Page 3: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Чем важен доклад• Что тестировать и как? (консистентность, производительность)

• На что нужно обращать внимание в первую очередь?

• Как обойти множество подводных камней при тестировании?

• Раздаем утилиты для тестирования

Page 4: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Мы знаем о хранении данных

Диски подключенные в кластер

Индивидуальные диски

1TB1TB

1TB

3TB

Parallels Cloud StorageВысокая производительность• Автоматическая балансировка данных• Out-of-the-box SSD-кеширование

Масштабируемость• Легко расширяется, автоматически

масштабируется, реорганизует кластер про добавлении новых дисков/серверов

Отказоустойчивость• Автоматически управляет

отказоустойчивостью и восстановлением• Прозрачная репликация данных

Page 5: Тестируем производительность распределённых систем, Александр Киров (Parallels)
Page 6: Тестируем производительность распределённых систем, Александр Киров (Parallels)

File:101110011001101100

File:000111010101101010

File:111000011101001010

Page 7: Тестируем производительность распределённых систем, Александр Киров (Parallels)
Page 8: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Как тестировать?

Page 9: Тестируем производительность распределённых систем, Александр Киров (Parallels)

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

• Что и сколько хотим получить от системы

Позволяет:

• Понять что действительно важно, а что нет

• Числено определить требования (IOPS, MB/s, ms)

• Понять характер нагрузки, основные сценарии

• Сколько машин работает с хранилищем

Page 10: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Различия сценариевФайловый

сервер

VPS хостинг

VPS кластер

=VM

Page 11: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Не используйте хорошо сжимаемые шаблоны данных

dd if=/dev/urandom of=/tmp/rnd_f size=1Mdd 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Улучшенный вариант, но по-прежнему неправильный :

Page 12: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Используйте большой 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

Page 13: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Кстати, о 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:)

Page 14: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Не пренебрегайте статистикой

• Отведите не меньше минуты на проведение теста

• Лучше – дольше

• Проводите один тест несколько раз, чтобы сгладить отклонения

• Делайте паузу между тестами

Page 15: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Убедитесь, что сравнение честноеВсегда сравнивать только «Яблоки с Яблоками»:

• Одинаковое железо

• Одинаковая нагрузка

• Одинаковый уровень отказоустойчивости

Page 16: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Тестируем Sync()

• Write() и Read() – это не все операции над блочным хранилищем

• Необходимо тестировать sync() 

• Операции sync() и fdatasync() требуют записи данных из кешей на диск

User application

write(),read(),…

Kernel buffer

RAID cache

disk cache

disk

File:101110011001101100

UserKernel

HWKernel

Page 17: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Масштабируемость Sync()/flush

Тип Входящих дисков

Кол-во Sync() / сек

1 disk 1

RAID 1 N

RAID 0 N

RAID 10 N

RAID 5/6 N

Во сколько раз массив из дисков способен сделать больше операций sync()/flush по сравнению с одним диском?

Данные должны быть сброшены на каждом диске!

Скорость одного диска

Скорость одного дискаСкорость одного диска

Скорость одного диска

Скорость одного диска

Page 18: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Sync() в распределенной системе

File:101110011001101100

Kernel

HW

Page 19: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Результат тестирования

*Parallels Cloud Storage 6.0: pstorage-5.0.1-440 ; OnApp Cloud 3.0: onapp-store-install-3.0.0-24, onapp-cp-install-3.0.0-20

Cluster: 7 nodes, 14 HDD, 1 Gbit

Page 20: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Как тестируем?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 на каждом сервере

Page 21: Тестируем производительность распределённых систем, Александр Киров (Parallels)

At_io_iopsat_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” пишет все вызовы

Page 22: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Результаты: Read Performance

HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960

Page 23: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Результаты: Write Performance

HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960

Page 24: Тестируем производительность распределённых систем, Александр Киров (Parallels)

РаздаткаСкачать методологию:

Скачать at_io_iops:

http://goo.gl/aWAiVZhttp://goo.gl/dIuxLI

Page 25: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Консистентность

Page 26: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Консистентность• Строгая консистентность (англ. strict consistency)

гарантировано возвращает значение, записанное самой последней операцией "запись”

Примеры: Parallels Cloud Storage, Lustre, …

• Консистентность в конечном счете (англ. eventual consistency) гарантирует, что, в отсутствии изменений данных, в конечном счете все запросы будут возвращать последнее обновленное значение.

Примеры: DNS, Amazon S3, …

Page 27: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Как проверять консистентность?Решение:

• Записать данные и прочитать их

Проблемы:

• Кеши

• Распределенность системы

• Консистентность системы связана с её устойчивостью к сбоям

Page 28: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Чем проверять консистентность?Утилита «hw_flush_check»

Принцип работы:1. Клиент записывает данные и посылает Sync() (сбрасывает на

диск)2. По окончанию Sync(), посылает отчет аудитору3. Моделируем отключение питания 4. Когда система запустится то клиент проверит сохранились ли

данные

disk

Клиент Аудитор

Page 29: Тестируем производительность распределённых систем, Александр Киров (Parallels)

РаздаткаСкачать hw_flush_check:

http://goo.gl/dIuxLI

Page 30: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Как железо влияет на системы хранения?

Page 31: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Консистентность данных на 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 не теряющие данные имеют конденсаторы

Page 32: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Консистентность. Выводы• SW и HW необходимо тестировать на сохранность данных• Используем для этого утилиту hw_flush_check• Не используем SSD для ноутбуков в серверах• Покупаем SSD с Power Loss Protection• Покупаем SSD с большим сроком службы (durability)

Page 33: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Наработка на отказ

The mean time to data loss (MTTDL) — среднее время наработки до потери данных:

MTTDL ~= 1 / T^2T – время восстановления

Вывод: Чем быстрее система восстанавливает данные, тем выше наработка на отказ

Наработка на отказ связана со скоростью восстановления данных

Page 34: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Как проверить?Сценарий:

1. Записать значительный объем данных

2. Отключить компонент

3. Замерить время до полного восстановления данных

Результат:

Сильно зависит от архитектуры

Page 35: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Время восстановления RAID

Тип Чтение с рабочих дисков Запись на новый дискRAID 0 n/a n/aRAID 1 1 Скорость 1 дискаRAID 5/6 со всех Скорость 1 дискаRAID 10 1 Скорость 1 диска

Если на диски идёт нагрузка, то время будет значительно больше

Page 36: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Сравнение скорости восстановления

HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960

Page 37: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Попробовать Parallels Cloud Storage

http://goo.gl/kdXxLF

Parallels Cloud Storage в PCS:

http://sp.parallels.com/products/pcs/

Parallels Cloud Storage для OpenVZ:

http://openvz.org/Parallels_Cloud_Storage

http://goo.gl/4MXwRa

Page 38: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Q&A

Киров АлександрParallels® [email protected]+7-495-783-29-77 (76244)

Page 39: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Appendix

Page 40: Тестируем производительность распределённых систем, Александр Киров (Parallels)

CEPH

Page 41: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Традиционные системы храненияРезервируют всё на HW уровне:

• Дублированное питание

• Двойные «мозги»

• Дублированное подключение

• Централизованная система принятия решений

Page 42: Тестируем производительность распределённых систем, Александр Киров (Parallels)

Распределенные системы храненияРезервируют всё на SW уровне:

• HW априори никогда не надежно

• Резервирование на уровне SW

• Готова к отказу любого компонента

• Не требует необычного железа• Распределенная система

принятия решений