Как ZDS хранит данные

Режим хранения данных

В текущем варианте документации ZDS рассматривается режим EC (Erasure Coding). В этом режиме файл не хранится как одна неделимая сущность на одном диске. Вместо этого ZDS разбивает его на несколько частей и распределяет их между компонентами кластера.

Такой подход позволяет:

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

Схема K + M

Параметры EC обычно задаются как K + M, где:

  • K - количество частей, содержащих исходные данные;
  • M - количество дополнительных частей для восстановления.

Общее число частей файла равно K + M.

Это означает следующее:

  • при записи ZDS создаёт полный набор частей;
  • при чтении для восстановления файла достаточно любых K доступных частей;
  • чем больше значение M, тем выше запас отказоустойчивости, но тем больше служебных затрат на хранение.

Смотрите Рекомендации к подбору схемы Erasure Coding.

Как выполняется запись файла

При записи файла ZDS выполняет несколько последовательных шагов:

  1. Принимает файл в рамках выбранного вольюма.
  2. Делит файл на части исходных данных.
  3. Формирует дополнительные parity-части.
  4. Выбирает подходящую группу хранения.
  5. Размещает каждую часть на отдельном диске в составе выбранной группы.
  6. Сохраняет метаданные о файле и его частях.

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

Как части размещаются в кластере

В режиме EC ZDS старается распределить части файла так, чтобы они не оказались на одном и том же диске. На практике это даёт следующие свойства:

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

При этом один файл размещается в рамках одной выбранной группы хранения. Поэтому корректный состав групп хранения напрямую влияет на отказоустойчивость и возможность записи. Уровень отказоустойчивости также определяется выбранной схемой EC (K + M).

Ограничения групп хранения

Для режима EC нужно учитывать несколько базовых ограничений:

  • общее количество частей файла равно K + M;
  • для размещения полного набора частей требуется не меньше K + M доступных дисков;
  • части одного файла должны размещаться на разных дисках;
  • если в группе хранения недостаточно доступных дисков, запись в неё невозможна.

Если количество дисков в группе больше, чем требуется для текущей схемы K + M, это не означает, что один файл будет использовать все диски одновременно. ZDS выбирает диски, подходящие для конкретной записи, а распределение нагрузки зависит от текущего состояния группы.

Роль метаданных

После записи файла ZDS сохраняет метаданные, описывающие:

  • в каком вольюме находится файл;
  • в какой группе хранения он размещён;
  • из каких частей он состоит;
  • на каких узлах и дисках находятся части;
  • какие части являются data, а какие parity.

Метаданные нужны для всех последующих операций:

  • чтения;
  • проверки состояния;
  • восстановления;
  • синхронизации между узлами.

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

Как выполняется чтение файла

При чтении ZDS:

  1. Находит метаданные файла.
  2. Определяет местоположение частей.
  3. Запрашивает доступные части с локальных или внешних узлов.
  4. Собирает исходный файл из полученных данных.

Если все необходимые data-части доступны, чтение выполняется напрямую. Если часть частей недоступна, ZDS может использовать parity-части для восстановления недостающих данных при условии, что в распоряжении остаётся достаточное количество частей.

Как выполняется восстановление

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

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

Что важно учитывать при проектировании

При планировании кластера ZDS важно заранее определить:

  • значения dataParts и parityParts;
  • количество узлов и дисков;
  • состав групп хранения;
  • допустимый уровень отказоустойчивости.

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

Подробнее о состоянии компонентов кластера см. в статье Кластер ZDS и состояния компонентов, а о настройке параметров - в статье Конфигурация ZDS.