Как ускорить бэкап и сэкономить место на сторадже: на примере ArenadataDB ddboost и СХД Dell EMC Data Domain

Всем привет, меня зовут Андрей, я системный архитектор Arenadata, и в этой статье мы рассмотрим интеграцию решения логического резервного копирования и восстановления gpbackup/gprestore с программно-аппаратным комплексом Dell EMC Data Domain — задача, которой наша команда разработки занималась в 2022 году.

Итогом этой разработки стал плагин-коннектор для нативного использования этой системы хранения данных в задачах резервного копирования и восстановления данных. С декабря 2022 года мы поставляем его в Enterprise Edition нашего продукта Arenadata DB.

plugin

Логический VS физический бэкап

Варианты подхода к реализации резервного копирования БД можно разделить на логическое и физическое создание резервных копий. При логическом резервном копировании состояние БД представляется в виде набора DDL/DML-команд, которые можно применить для восстановления этого состояния. При физическом — процесс оперирует уже физическим представлением данных, как они сохраняются в БД (файлы данных, индексов, WAL-логов и др.).

Логическое резервное копирование при всех его плюсах, а это и возможность восстановления на кластер с другой топологией и (или) другой версией СУБД, гибкими настройками фильтрации по схемам и таблицам и другими полезными возможностями, как правило, медленнее физического варианта реализации. Также из-за необходимости преобразования в текстовый формат представления он предъявляет большие требования к свободному месту в системах хранения данных. Вариант с использованием, например, COPY FROM SEGMENT в комбинации с бинарным форматом передачи данных оставим за границами этой статьи.

Однако влияние этих минусов можно частично нивелировать использованием специализированных программно-аппаратных комплексов, которые предлагают возможность дедупликации, то есть распознавания и исключения повторяющихся копий данных с сохранением на диск только уникальных блоков. Это может значительно экономить объем пространства для хранения данных, а также, если система поддерживает дедупликацию "на лету", это уменьшает и трафик.

Решение Dell EMC Data Domain предоставляет много полезных возможностей, среди которых поддержка шифрования, сжатия, файловой репликации, работа как по TCP/IP, так и по Fibre Channel (DD Boost-over-Fibre Channel Transport), поддержка HA и автоматического failover. С подробным описанием можно ознакомиться на соответствующих ресурсах.

Для нашей же задачи важно, что система обеспечивает дедупликацию данных "на лету". Эта возможность предоставляется библиотекой DD Boost. Библиотека увеличивает производительность процесса резервного копирования за счет использования возможности откинуть дублирующийся блок уже на стороне клиента, не передавая его на сервер. При этом переданные блоки сохраняются в системе хранения вне зависимости от того, завершилось ли резервное копирование успешно или нет, что опять-таки экономит время при повторном резервном копировании в случае ошибки.

Рассмотрим этот процесс более подробно.

DD Boost: дедупликация данных

На рисунке ниже представлена общая схема потока данных при выполнении операции записи данных в систему хранения данных.

Входящий поток (1) разбивается на отдельные блоки (2), этим блокам сопоставляется (3) набор данных (отпечаток), который позволяет определить наличие этого сегмента в системе хранения (4), далее в случае принятия решения об отправке блока он сжимается (5), отправляется в систему хранения (6) и записывается на устройство (7).

flow dark
Схема потока данных при выполнении операции записи
flow light
Схема потока данных при выполнении операции записи

Архитектура решения

Архитектура нашего решения предполагает наличие плагина-коннектора, использующего DD Boost SDK. Плагин-коннектор встраивается в процесс резервного копирования и восстановления. За эти процессы отвечают специализированные утилиты gpbackup и gprestore.

На следующем рисунке представлена общая схема вызовов при выполнении операции резервного копирования.

arch dark
Схема вызовов при выполнении операции резервного копирования
arch light
Схема вызовов при выполнении операции резервного копирования

В общей схеме работы компонентов gpbackup отвечает за:

  • подготовку (1) служебных файлов с метаданными, файлов-смещений, файлов конфигурации, итогового отчета и др.;

  • подготовку к резервному копированию (2) данных таблиц с помощью операции COPY FROM SEGMENT;

  • запуск процесса(ов) плагина (3) с последующей передачей в процесс плагина либо полного пути копируемого файла, либо данных таблицы в виде потока байт. Этот же полный путь к файлу будет использоваться и для восстановления утилитой gprestore.

 

В задачи плагина входит:

  • подготовка системы хранения (4) к выполнению задачи резервного копирования (проверка доступности системы хранения, создание каталогов на файловой системе и тому подобное);

  • сохранение (5) как отдельных файлов, так и потока данных таблиц в файлах в системе хранения в процессе выполнения задачи резервного копирования.

Процесс дедупликации, сжатия и передачи данных в систему хранения библиотека DD Boost берет на себя.

Нагрузочные тесты

Нагрузочные тесты проводились согласно следующему плану:

  1. Определить целевые показатели производительности решения теми средствами/утилитами, которые предлагаются вендором (синтетический тест пропускной способности канала).

  2. Провести изолированные тесты плагина для определения "чистой" производительности, без потенциального влияния утилит gpbackup и gprestore с учетом разного количества соединений (потоков) с одного или нескольких серверов (синтетические изолированные тесты плагина).

  3. Провести итоговые тесты плагина в составе gpbackup и gprestore с различными опциями (итоговые тесты плагина в составе gpbackup и gprestore).

Синтетический тест пропускной способности канала

Для получения целевых показателей на тестовой среде использовалась специализированная утилита ddpconnchk. Данная утилита позволяет провести нагрузочный тест канала до системы хранения данных и получить, по сути, ожидаемые показатели скорости записи и чтения данных. Запуск параметризуется числом потоков, осуществляющих чтение/запись, итоговым размером данных для записи и рядом других параметров.

Несколько запусков этой утилиты на тестовой среде позволили определить целевые показатели по скорости записи (см. таблицу ниже).

Целевые показатели скорости записи
Число потоков Скорость записи в среднем, МБ/сек

1

204

5

1280

10

2560

20

3413

30

2560

Результаты синтетических тестов показали, что наибольшая скорость достигалась при определенной комбинации параметров: тестовый файл в 1 ГБ и 20 потоков. В 30 потоков скорость уже ощутимо меньше — на уровне 10 потоков.

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

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

Синтетические изолированные тесты

Изолированный тест — это тестовая передача данных напрямую в систему хранения данных через плагин без обработки и передачи данных со стороны gpbackup (таких как подготовка данных таблиц с последующей передачей через стандартный ввод/вывод в плагин и тому подобное).

Идея теста заключается в проверке "чистой" производительности с исключением потенциального влияния операций, производимых утилитой gpbackup. Тестовый поток для данного теста представляет собой сгенерированные случайным образом двоичные данные (итоговый объем данных для записи — 200 ГБ одним файлом или разделенным на отдельные части, но таким же объемом). Эти данные перенаправляются напрямую через стандартный ввод/вывод в плагин. Схожим образом с плагинами работают gpbackup и gprestore.

Несколько запусков этого теста позволили определить следующие показатели скорости записи.

Показатели скорости записи одного хоста в 1, 10, 20 потоков
Число потоков Скорость записи в среднем, МБ/сек

1

150

10

1110

20

1100

 

Один сервер — один поток

speed 1 1 dark
Скорость отправки данных с одного хоста в один поток
speed 1 1 light
Скорость отправки данных с одного хоста в один поток

Показатель скорости записи в один поток в среднем составляет ~150 МБ/сек, итоговое время передачи 200 ГБ — ~22 минуты.

 
Один сервер — десять потоков

speed 1 10 dark
Скорость отправки данных с одного хоста в десять потоков
speed 1 10 light
Скорость отправки данных с одного хоста в десять потоков

Из графика на приведенном выше рисунке видно, что при параллельной передаче с одного хоста десяти файлов скорость в среднем была чуть выше 1 ГБ/сек и по мере завершения отправки отдельных частей она снижалась. Итоговое время передачи 200 ГБ составило ~3.5 минуты.

connects 1 10 dark
Число задействованных соединений при передаче данных с одного хоста в десять потоков
connects 1 10 light
Число задействованных соединений при передаче данных с одного хоста в десять потоков

В целом по мере завершения отправки отдельных частей падение общей скорости отправки чуть больше, чем обеспечивало одно соединение в единичном тесте. Например, для двух файлов можно было бы ожидать скорость порядка 300 МБ/сек, по факту видим ~235 МБ/сек. Возможно, это связано с пулом внутренних потоков библиотеки DD Boost и тем, как происходит распределение полосы пропускания между потоками внутри библиотеки.

 
Один сервер — двадцать потоков

speed 1 20 dark
Скорость отправки данных с одного хоста в двадцать потоков
speed 1 20 light
Скорость отправки данных с одного хоста в двадцать потоков

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

connects 1 20 dark
Число задействованных соединений при передаче данных с одного хоста в двадцать потоков
connects 1 20 light
Число задействованных соединений при передаче данных с одного хоста в двадцать потоков

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

Показатели скорости записи в десять потоков с 2/4/8 серверов
Хост В среднем, МБ/сек В среднем, МБ/сек В среднем, МБ/сек

host1

1096

552

278

host2

998

556

279

host3

 — 

552

278

host4

 — 

548

279

host5

 — 

 — 

280

host6

 — 

 — 

279

host7

 — 

 — 

278

host8

 — 

 — 

280

2040

2160

2180

Скорость записи в целом совпадает со скоростью в десять потоков с одного сервера, которую мы увидели в результатах на предыдущих тестах (~1.1 ГБ/сек). С двух серверов в среднем получили ~2 ГБ/сек на запись.

Суммарное значение скорости 2.2 ГБ/сек чуть выше, чем на двадцати соединениях с двух серверов, но уже можно предположить, что, начиная с четырех серверов, виден максимум на запись со стороны системы хранения и дедупликации. Скорость в пиках примерно соответствует максимуму, который достигается с 1-2 серверов, но в среднем видно, что полоса пропускания уже разделяется между всеми сорока соединениями с четырех серверов — по ~550 МБ/сек с сервера.

Дальнейшее падение скорости на запись с одного сервера при аналогичной общей скорости на запись (2.2 ГБ/сек) косвенно подтверждает гипотезу о максимуме на запись со стороны системы хранения и дедупликации. В подтверждение этой гипотезы говорит тот факт, что на синтетических тестах утилитой ddpconnchk со схожими параметрами (30 соединений/потоков) получен в целом аналогичный результат по максимальной скорости на запись (2560.00 МБ/сек).

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

ПРИМЕЧАНИЕ

Проведение отдельной серии тестов дисковой подсистемы показало, что именно производительность дисковой подсистемы ограничивала скорость операции чтения в ~1.1 ГБ/сек в рамках одного хоста.

Итоговые тесты плагина в составе gpbackup и gprestore

Для серии итоговых тестов конфигурация тестового окружения была следующей:

  • Объем данных: 3.1 ТБ; 2 ТБ; 0.6 ТБ.

  • Число таблиц в базе данных: 31200 (5% таблиц размером >= 500 МБ; 28% — пустые таблицы; размер остальных таблиц < 500 МБ).

  • Число серверов в кластере: 22 сегмент-хоста + 2 мастер/standby.

Серия тестов производительности включала в себя:

  1. Тест полного резервного копирования в режиме параллельного копирования (jobs) на очищенный Dell EMC Data Domain.

  2. Тест повторного полного резервного копирования в режиме параллельного копирования (jobs) на Dell EMC Data Domain с данными от предыдущего резервного копирования.

  3. Тест полного резервного копирования в режиме копирования одного файла для всех таблиц сегмента (single-data-file) на очищенный Dell EMC Data Domain.

  4. Повторный тест полного резервного копирования в режиме копирования одного файла для всех таблиц сегмента (single-data-file) на Dell EMC Data Domain с данными от предыдущего резервного копирования.

  5. Тест резервного копирования больших таблиц (~1500 таблиц, суммарный объем — ~2 ТБ) на очищенный Dell EMC Data Domain.

  6. Повторный тест резервного копирования больших таблиц (~1500 таблиц, суммарный объем — ~2 ТБ) на Dell EMC Data Domain с данными от предыдущего резервного копирования.

  7. Тест резервного копирования малых таблиц (~20800 таблиц, суммарный объем — ~0.6 ТБ) на очищенный Dell EMC Data Domain.

Результаты тестов производительности плагина в составе gpbackup на Dell EMC Data Domain
№ теста single-data-file jobs count copy-queue-size Исходный объем данных в таблице* Полное время резервного копирования, минуты Оценочная скорость резервного копирования в среднем, МБ/сек**

1

 — 

15

 — 

3 ТБ

720

72

2

 — 

15

 — 

3 ТБ

630

82

3

+

 — 

20

3 ТБ

58

889

4

+

 — 

20

3 ТБ

38

1334

5

+

 — 

20

2 ТБ

13

2640

6

+

 — 

20

2 ТБ

2

14186

7

+

 — 

20

0.6 ТБ

33

300

* Объем фактически передаваемых данных на 30-40% больше из-за необходимости преобразования в CSV-формат.

** Оценочная скорость рассчитывалась на базе исходного размера БД, а не фактически копируемых данных.

Также были проведены несколько референсных тестов резервного копирования на локальную файловую систему с использованием плагина (8) и без (9), а также серия тестов локальных бэкапов (10-17) с различными настройками длины очереди подготовки таблиц к резервному копированию (copy-queue-size).

Результаты тестов производительности на локальную файловую систему
№ теста single-data-file jobs count copy-queue-size Исходный объем данных в таблице Полное время резервного копирования, минуты Оценочная скорость резервного копирования в среднем, МБ/сек

8

 — 

15

 — 

3 ТБ

14

3829

9

 — 

15

 — 

3 ТБ

15

3557

10

+

 — 

60

3 ТБ

35

1498

11

+

 — 

50

3 ТБ

35

1485

12

+

 — 

40

3 ТБ

30

1709

13

+

 — 

30

3 ТБ

36

1421

14

+

 — 

25

3 ТБ

37

1416

15

+

 — 

20

3 ТБ

38

1365

16

+

 — 

10

3 ТБ

39

1325

17

+

 — 

5

3 ТБ

46

1137

Результаты тестов производительности восстановления из резервной копии
№ теста single-data-file jobs count copy-queue-size Исходный объем данных в таблице Полное время восстановления, минуты Оценочная скорость восстановления в среднем, МБ/сек

18

+

 — 

5

2 ТБ

47

715

Выводы по проведенным тестам:

  1. Вариант параллельного копирования данных таблиц с опцией jobs фактически несовместим с данной системой хранения и не рекомендуется к использованию. Можно предположить, что это связано с существенно большим числом копируемых файлов по сравнению с опцией single-data-file. При этом из тестов (8) и (9) видно, что скорость при копировании на локальную файловую систему была на два порядка выше. Также стоит отметить отсутствие видимых накладных расходов при копировании через плагин в локальную файловую систему — тесты (8) и (9).

  2. Данная система хранения лучше справляется с копированием больших файлов (5). Фактически с учетом результатов синтетических тестов ddpconnchk подобный профиль нагрузки занимает всю доступную полосу пропускания (~2500 МБ/сек при 30 потоках). С небольшими таблицами скорость на порядок ниже — (7).

  3. Наибольшая скорость получена при повторном копировании больших таблиц — (6). Это можно связать с процессом дедупликации, который в этом варианте задействован на полную.

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

На рисунке ниже представлен график копирования данных одним из сегмент-хостов.

volume segments dark
Копирование данных одним из двадцати двух сегмент-хостов (по объему отправленных данных)
volume segments light
Копирование данных одним из двадцати двух сегмент-хостов (по объему отправленных данных)
  1. По данным мониторинга с каждого сегмент-хоста было записано примерно одинаковое количество данных — ~213 ГБ. Таким образом, реальный размер передаваемых данных со всех 22 сегмент-хостов составил ~4.4 ТБ.

  2. По графику подтверждается, что скорость копирования зависит от размера копируемых таблиц: gpbackup создает резервные копии в порядке убывания по размеру таблиц. В первые 30-35 минут резервного копирования средняя скорость составляла ~140 МБ/сек (с одного хоста). В оставшейся части скорость в среднем составляет ~40 МБ/сек, что косвенно подтверждается тестом резервного копирования малых таблиц — (7). В целом скорость копирования варьируется в широком диапазоне. На следующем рисунке представлен сводный график скорости копирования.

speed segments dark
Копирование данных одним из двадцати двух сегмент-хостов (по скорости отправки данных)
speed segments light
Копирование данных одним из двадцати двух сегмент-хостов (по скорости отправки данных)

Заключение

По итогам тестирования можно сделать следующие выводы:

  1. Дедупликация может значительно увеличить скорость создания резервной копии БД (до пяти раз быстрее по результатам наших тестов).

  2. Связка gpbackup, DD Boost и Dell EMC Data Domain показывает лучшую производительность при использовании режима копирования "все таблицы сегмента — один файл" (single-data-file). Режим параллельного копирования (jobs) не рекомендуется к использованию из-за своей крайне низкой производительности записи.

  3. Как следствие из предыдущего пункта: производительность выше при записи больших блоков данных (в тестах использовались таблицы свыше 500 МБ на таблицу). Возможно, такой профиль позволяет системе хранения эффективнее выполнять дедупликацию данных, в том числе и "на лету", а также сократить число служебных операций открытия/закрытия файлов, управления соединениями.

  4. Остальные подсистемы также могут ограничивать общую производительность решения. В ходе конфигурации, тестирования и эксплуатации нужно уделять внимание всем аспектам.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней