Как ZDS хранит данные
Режим хранения данных
В текущем варианте документации ZDS рассматривается режим EC (Erasure Coding). В этом режиме файл не хранится как одна неделимая сущность на одном диске. Вместо этого ZDS разбивает его на несколько частей и распределяет их между компонентами кластера.
Такой подход позволяет:
- реализовать отказоустойчивость;
- использовать дисковое пространство эффективнее, чем при полном дублировании;
- сохранять доступность данных при отказе части компонентов.
Схема K + M
Параметры EC обычно задаются как K + M, где:
- K - количество частей, содержащих исходные данные;
- M - количество дополнительных частей для восстановления.
Общее число частей файла равно K + M.
Это означает следующее:
- при записи ZDS создаёт полный набор частей;
- при чтении для восстановления файла достаточно любых K доступных частей;
- чем больше значение M, тем выше запас отказоустойчивости, но тем больше служебных затрат на хранение.
Смотрите Рекомендации к подбору схемы Erasure Coding.
Как выполняется запись файла
При записи файла ZDS выполняет несколько последовательных шагов:
- Принимает файл в рамках выбранного вольюма.
- Делит файл на части исходных данных.
- Формирует дополнительные parity-части.
- Выбирает подходящую группу хранения.
- Размещает каждую часть на отдельном диске в составе выбранной группы.
- Сохраняет метаданные о файле и его частях.
Для корректной записи важно, чтобы в выбранной группе хранения было достаточно доступных дисков для размещения всех частей.
Как части размещаются в кластере
В режиме EC ZDS старается распределить части файла так, чтобы они не оказались на одном и том же диске. На практике это даёт следующие свойства:
- потеря одного диска не должно делать файл недоступным;
- потеря одного узла не должно делать файл недоступным;
- чтение и восстановление могут использовать части, расположенные на разных узлах.
При этом один файл размещается в рамках одной выбранной группы хранения. Поэтому корректный состав групп хранения напрямую влияет на отказоустойчивость и возможность записи. Уровень отказоустойчивости также определяется выбранной схемой EC (K + M).
Ограничения групп хранения
Для режима EC нужно учитывать несколько базовых ограничений:
- общее количество частей файла равно K + M;
- для размещения полного набора частей требуется не меньше K + M доступных дисков;
- части одного файла должны размещаться на разных дисках;
- если в группе хранения недостаточно доступных дисков, запись в неё невозможна.
Если количество дисков в группе больше, чем требуется для текущей схемы K + M, это не означает, что один файл будет использовать все диски одновременно. ZDS выбирает диски, подходящие для конкретной записи, а распределение нагрузки зависит от текущего состояния группы.
Роль метаданных
После записи файла ZDS сохраняет метаданные, описывающие:
- в каком вольюме находится файл;
- в какой группе хранения он размещён;
- из каких частей он состоит;
- на каких узлах и дисках находятся части;
- какие части являются data, а какие parity.
Метаданные нужны для всех последующих операций:
- чтения;
- проверки состояния;
- восстановления;
- синхронизации между узлами.
Если метаданные утрачены, наличие самих частей на дисках ещё не гарантирует доступность файла, потому что система теряет карту размещения. Метаданные могут быть восстановлены с другого узла кластера. Поиск метаданных при их отсутствии происходит автоматически. Если метаданных нет на всех узлах, то лишь в этом случае доступ к файлу будет потерян.
Как выполняется чтение файла
При чтении ZDS:
- Находит метаданные файла.
- Определяет местоположение частей.
- Запрашивает доступные части с локальных или внешних узлов.
- Собирает исходный файл из полученных данных.
Если все необходимые data-части доступны, чтение выполняется напрямую. Если часть частей недоступна, ZDS может использовать parity-части для восстановления недостающих данных при условии, что в распоряжении остаётся достаточное количество частей.
Как выполняется восстановление
Восстановление требуется, если часть данных временно или постоянно недоступна. В этом случае ZDS использует оставшиеся доступные части и формирует недостающие данные заново в процессе чтения.
Возможность восстановления зависит от того, осталось ли как минимум K доступных частей для конкретного файла. Если доступных частей меньше, собрать исходный файл невозможно.
Что важно учитывать при проектировании
При планировании кластера ZDS важно заранее определить:
- значения
dataPartsиparityParts; - количество узлов и дисков;
- состав групп хранения;
- допустимый уровень отказоустойчивости.
Эти параметры должны согласовываться между собой. Изучите далее рекомендации по выбору схемы Erasure coding.
Подробнее о состоянии компонентов кластера см. в статье Кластер ZDS и состояния компонентов, а о настройке параметров - в статье Конфигурация ZDS.