Введение

Компьютерная файловая система

Write Anywhere File Layout (WAFL) — это проприетарная файловая система, поддерживающая большие высокопроизводительные массивы RAID, быструю перезагрузку без длительных проверок целостности в случае сбоя или отключения питания, а также быстрое увеличение размера файловой системы. Она была разработана NetApp для использования в своих системах хранения, таких как NetApp FAS, AFF, Cloud Volumes ONTAP и ONTAP Select. Автор WAFL утверждает, что это не файловая система, хотя она и включает в себя одну. WAFL отслеживает изменения аналогично журналируемым файловым системам, используя журналы (известные как NVLOGs) в выделенном устройстве хранения энергонезависимой памяти с произвольным доступом, называемой NVRAM или NVMEM. WAFL предоставляет механизмы, позволяющие различным файловым системам и технологиям получать доступ к дисковым блокам.

Дизайн

WAFL хранит метаданные вместе с данными в файлах; метаданные, такие как иноды и карты блоков, указывающие, какие блоки в томе выделены, не хранятся в фиксированных местах в файловой системе. Файл верхнего уровня в томе – это файл inode, который содержит иноды для всех остальных файлов; инод для самого файла inode, называемый корневым инодом, хранится в блоке с фиксированным местоположением. Инод для достаточно маленького файла содержит содержимое файла; в противном случае он содержит список указателей на блоки данных файла или список указателей на косвенные блоки, содержащие списки указателей на блоки данных файла и так далее, с таким количеством уровней косвенных блоков, сколько необходимо, формируя дерево блоков. Все блоки данных и метаданных в файловой системе, кроме блока, содержащего корневой инод, хранятся в файлах в файловой системе. Таким образом, корневой инод может быть использован для определения местоположения всех блоков всех файлов, кроме файла inode. Оперативная память используется в качестве кэша страниц для блоков из файлов. Когда в блок файла вносятся изменения, копия в кэше страниц обновляется и помечается как "грязный", а разница записывается в энергонезависимую память в журнал, называемый NVLOG. Если "грязный" блок в кэше страниц должен быть записан в постоянное хранилище, он не перезаписывается в блок, из которого он был прочитан; вместо этого новый блок выделяется в постоянном хранилище, содержимое блока записывается в новое местоположение, а инод или косвенный блок, указывавший на этот блок, обновляется в оперативной памяти. Если блок, содержащий инод, или косвенный блок, должен быть записан в постоянное хранилище, он также записывается в новое место, а не перезаписывается в предыдущем месте. Это и есть суть "Write Anywhere" в "Write Anywhere File Layout".

Снимок

WAFL поддерживает снимки, которые являются копиями файловой системы, доступными только для чтения. Снимки создаются путем выполнения тех же операций, что и в точке согласованности, но вместо обновления корневого inode, соответствующего текущему состоянию файловой системы, сохраняется копия корневого inode. Поскольку все данные и метаданные в файловой системе можно получить из корневого inode, все данные и метаданные файловой системы на момент создания снимка можно получить из копии корневого inode снимка. Для создания снимка не требуется копировать какие-либо другие данные. Списки контроля доступа (ACL) или простая битовая маска, в то время как более новая модель Windows основана на списках контроля доступа. Эти две возможности позволяют записать файл в сетевую файловую систему типа SMB и затем получить к нему доступ через NFS с Unix-рабочей станции. Помимо обычных файлов, WAFL может содержать файловые контейнеры, называемые LUN, с необходимыми специальными атрибутами, такими как серийный номер LUN для блочных устройств, к которым можно получить доступ с использованием протоколов SAN, работающих в программном обеспечении ONTAP OS.

FlexVol

Каждый гибкий том (FlexVol) представляет собой отдельную файловую систему WAFL, расположенную на агрегате и распределенную по всем дискам в этом агрегате. Каждый агрегат может содержать и обычно содержит несколько томов FlexVol. ONTAP в процессе оптимизации данных, включая алгоритм "Tetris", завершающийся созданием точек согласованности (см. NVRAM), запрограммирован на максимально равномерное распределение блоков данных в каждом томе FlexVol по всем дискам агрегата, чтобы каждый FlexVol мог потенциально использовать всю доступную производительность всех дисков данных в агрегате. Благодаря такому равномерному распределению блоков данных по дискам агрегата, ограничение производительности для FlexVol может выполняться динамически с помощью Storage QoS и не требует выделенных агрегатов или RAID-групп для каждого FlexVol для гарантии производительности и предоставления неиспользуемой производительности тому FlexVol, которому она необходима. Каждый FlexVol может быть сконфигурирован с толстым или тонким выделением пространства и впоследствии изменен в любое время "на лету". Доступ к блочным устройствам с использованием протоколов SAN (storage area network), таких как iSCSI, Fibre Channel (FC) и Fibre Channel over Ethernet (FCoE), осуществляется посредством эмуляции LUN, аналогичной технике Loopback-устройства, поверх тома FlexVol; таким образом, каждый LUN в файловой системе WAFL представляется как файл, но обладает дополнительными свойствами, необходимыми для блочных устройств. LUN также могут быть настроены с толстым или тонким выделением пространства и изменены впоследствии "на лету". Благодаря архитектуре WAFL, FlexVols и LUN могут динамически увеличивать или уменьшать используемое пространство. Если FlexVol содержит данные, внутреннее пространство может быть уменьшено не ниже используемого. Хотя размер LUN с данными на файловой системе WAFL может быть уменьшен, ONTAP не имеет информации о структуре блоков верхнего уровня из-за архитектуры SAN, поэтому он может усечь данные и повредить файловую систему на этом LUN. Поэтому хост должен мигрировать блоки, содержащие данные, в новую границу LUN, чтобы предотвратить потерю данных. Каждый FlexVol может иметь собственные политики QoS, FlashPool, FlashCache или FabricPool. Если создаются два тома FlexVol, каждый на отдельном агрегате, принадлежащем разным контроллерам, и системному администратору необходимо использовать пространство этих томов через протокол NAS, то будут созданы два сетевых ресурса, по одному на каждый том. В этом случае администратор, скорее всего, даже создаст разные IP-адреса, каждый из которых будет использоваться для доступа к выделенному сетевому ресурсу. Каждый том будет иметь одно сродство записи (write affinity), и будут два пула пространства. Даже если два тома находятся на одном контроллере и, например, на одном агрегате (в этом случае второй агрегат не будет использоваться), и к обоим томам осуществляется доступ через один IP-адрес, все равно будет два сродства записи, по одному на каждый том, и всегда будут два отдельных пула пространства. Следовательно, чем больше томов, тем больше сродств записи (лучшая параллелизация и, следовательно, более эффективное использование ЦП), но тогда будет несколько томов (и несколько пулов пространства, а значит, несколько сетевых ресурсов).

Плексы

Подобно RAID 1, плексы в системах ONTAP могут хранить зеркальные данные в двух местах, но в то время как обычный RAID 1 должен существовать в пределах одной системы хранения, два плекса могут быть распределены между двумя системами хранения. Каждый агрегат состоит из одного или двух плексов. Обычные системы хранения с высокой доступностью (HA) имеют только один плекс для каждого агрегата, в то время как конфигурации SyncMirror Local или MetroCluster могут иметь два плекса для каждого агрегата. С другой стороны, каждый плекс включает в себя базовое дисковое пространство из одной или нескольких групп RAID NetApp или LUN от сторонних систем хранения (см. FlexArray) в одном плексе, аналогично RAID 0. Если агрегат состоит из двух плексов, один плекс считается главным, а второй – ведомым; ведомые плексы должны состоять из точно такой же конфигурации RAID и дисков. Например, если у нас есть агрегат, состоящий из двух плексов, где главный плекс состоит из 21 диска данных и 3 SAS-дисков паритета объемом 1,8 ТБ в RAID TEC, то ведомый плекс должен состоять из 21 диска данных и 3 SAS-дисков паритета объемом 1,8 ТБ в RAID TEC. Второй пример: если у нас есть агрегат, состоящий из двух плексов, где главный плекс состоит из одного RAID 17 дисков данных и 3 SAS-дисков паритета объемом 1,8 ТБ, сконфигурированных как RAID TEC, а второй RAID в главном плексе – RAID DP с 2 дисками данных и 2 SSD-дисками паритета объемом 960 ГБ, то второй плекс должен иметь ту же конфигурацию: один RAID 17 дисков данных и 3 SAS-дисков паритета объемом 1,8 ТБ, сконфигурированных как RAID TEC, а второй RAID в ведомом плексе – RAID DP с 2 дисками данных и 2 SSD-дисками паритета объемом 960 ГБ. Конфигурации MetroCluster используют технологию SyncMirror для синхронной репликации данных. Существует два варианта SyncMirror: MetroCluster и Local SyncMirror, оба использующие одну и ту же технику плексов для синхронной репликации данных между двумя плексами. Local SyncMirror создает оба плекса в одном контроллере и часто используется для дополнительной защиты от сбоя всего дискового полока в системе хранения. MetroCluster позволяет реплицировать данные между двумя системами хранения. Каждая система хранения может состоять из одного контроллера или быть сконфигурирована как пара HA с двумя контроллерами. В одной паре HA возможно наличие двух контроллеров в отдельных шасси, расстояние между которыми может составлять десятки метров, в то время как в конфигурации MetroCluster расстояние может достигать 300 км.

Нелетучая память

Как и многие конкуренты, NetApp ONTAP использует память как значительно более быстрый носитель для приема и кэширования данных от хостов и, что наиболее важно, для оптимизации данных перед записью, что значительно повышает производительность таких систем хранения. В то время как конкуренты широко используют энергонезависимую память с произвольным доступом (NVRAM) для сохранения данных в ней при неожиданных событиях, таких как перезагрузка, как для кэширования записи, так и для оптимизации данных, системы NetApp ONTAP используют обычную память с произвольным доступом (RAM) для оптимизации данных и выделенную NVRAM или NVDIMM для ведения журнала исходных данных в неизменном виде, как они поступают от хостов, аналогично ведению журнала транзакций в реляционных базах данных. Следовательно, в случае сбоя оперативная память будет автоматически очищена после перезагрузки, а данные, хранящиеся в энергонезависимой памяти в виде журналов, называемых NVLOGs, переживут перезагрузку и будут использованы для восстановления согласованности. Все изменения и оптимизации в системах ONTAP выполняются только в оперативной памяти, что позволяет уменьшить объем энергонезависимой памяти, необходимой для систем ONTAP. После оптимизации данные от хостов структурируются подобно принципу "Тетрис", оптимизируются и подготавливаются, проходя несколько этапов (например, WAFL и RAID), для записи на базовые диски в RAID-группы на агрегате, где будут храниться данные. После оптимизации данные последовательно записываются на диски в рамках транзакции точки согласованности (CP). Данные, записанные в агрегаты, содержат необходимые метаданные WAFL и четность RAID, поэтому дополнительные операции чтения с дисков данных, вычисления и записи на диски четности не выполняются, как в традиционных RAID 6 и RAID 4 группах. CP сначала создает системный снимок на агрегате, куда будут записаны данные, затем оптимизированные и подготовленные данные из оперативной памяти записываются последовательно в виде единой транзакции в агрегат. В случае сбоя вся транзакция откатывается при внезапной перезагрузке, что гарантирует согласованность файловой системы WAFL. В случае успешного завершения транзакции CP новая активная точка файловой системы распространяется, а соответствующие NVLOGs очищаются. Все данные всегда записываются в новое место, и переписывание исключено. Блоки данных, удаленные хостами, помечаются как свободные, чтобы их можно было использовать в последующих циклах CP, и система не столкнется с нехваткой места благодаря политике WAFL, которая всегда записывает новые данные в новое место. Только NVLOGs в системах хранения HA реплицируются синхронно между двумя контроллерами для обеспечения отказоустойчивости системы хранения HA, что помогает снизить общие накладные расходы на защиту памяти системы. В системе хранения с двумя контроллерами в конфигурации HA или MetroCluster с одним контроллером на каждом узле каждый из двух контроллеров разделяет свою энергонезависимую память на две части: локальную и принадлежащую партнеру. В конфигурации MetroCluster с четырьмя узлами каждая энергонезависимая память разделена на следующие части: локальную, локальную память партнера и удаленную память партнера. Начиная с системы All Flash FAS A800, NetApp заменила модуль NVRAM PCI на NVDIMM, подключенные к шине памяти, что повысило производительность.