Sunday, 29 August 2010

Что такое RAID-Z?

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

Для начала стоит отметить, что это не какая-то абсолютно новая технология, а, скорее, работа над проблемами, которые имели место в RAID-5. Какие именно недостатки она исправляет? Во-первых, устраняется проблема под название "Write hole", во-вторых, в RAID-5, если была изменена лишь часть страйпа (страйп - это группа блоков, каждый из которых расположен на отдельном жестком диске), то необходимо перечитывать весь страйп для того, чтобы пересчитать его данные четности (а это наносит серьезный урон производительности). То есть, если идет запись всего страйпа целиком, то мы просто асинхронно ее выполняем на всех дисках. Если же переписывается только часть страйпа, то необходимо сначала выполнить синхронное чтение перед тем, как что-либо писать. У железных RAID-5 контроллеров это решается посредством сохранения записываемых данных в кэше на то время пока будет выполнено синхронное чтение.

Как же указанные проблемы решаются в RAID-Z? Во-первых, в ZFS RAID-Z используется динамический размер старйпа (что автоматически устраняет случай "частичной перезаписи страйпа"). Таким образом, устранение частичных записей страйпа вместе с принципом записи copy-on-write (новые данные не записываются поверх старых, а пишутся в новое место, а потом атомарно происходит переустановка указателя на новое расположение данных) полностью решают проблему "Write hole". Также, RAID-Z имеет преимущество в скорости, так как ему не нужно выполнять чтение перед записью (так как отсутствуют частичные записи страйпов).

Уход от фиксированного размера страйпа, очевидно, усложняет устройство RAID-массива, так как теперь невозможно пройти весь массив и, допустим, разбив его на блоки 64 килобайта высчитать их ключевые суммы. В связи с динамическим размером страйпа необходимо где-то хранить метаданные о размере страйпов. Что таит в себе еще одну проблему - теперь файловая система (где хранятся эти метаданные) и RAID массив представляю собой единое целое, что делает невозможным раздельную реализицию файловой системы и RAID контроллера. То есть, требуется взгляд как со стороны механики, так и со стороны логики устройства ФС.

Усложнение структуры файловой системы не может не сказаться на скорости работы. Но будет ли это приводить к замедлению? Совершенно нет, так как при синхронизации будут копироваться только блоки с данными, а пустые блоки не будут. Также стоит обратить внимание, что в ZFS блоки хешируются 256 битными ключевыми суммами, в то время как в обычном RAID используется простейший xor.

ZFS RAID-Z также обеспечивает беспрецедентный уровень защиты данных от повреждения по механическим причинам, так как защищает не только от отказа отдельного жесткого диска, но и позволяет обнаруживать отказы отдельных блоков на диске. Когда Вы считываете с RAID-Z блок он сравнивается с его ключевой суммой. Если данные не соответствуют ключевой сумме, то ZFS считывает данные о четности и пытается реконструировать данные, а также при этом выясняет, какой из дисков послужил источником проблемы и, разумеется, уведомляет об этом администратора. Таким образом, приложение запросившее данные получает корректные данные без каких-либо ошибок.

Очень важнй чертой технологии ZFS RAID-Z является то, что она не предъявляет никаких требований к аппаратной части сервера (не считая повышенных требований к оперативной памяти).

Кроме RAID-Z также существует его модификация RAID-Z2 (близка к RAID-6), которая устойчива к отказу двух жестких дисков. Кроме этого, уже существует (но пока только-только портирована во FreeBSD) версия RAID-Z3, которая выдерживает отказ до трех дисков массива.

По материалам: http://blogs.sun.com/bonwick/entry/raid_z и http://en.wikipedia.org/wiki/Non-standard_RAID_levels#RAID-Z

No comments:

Post a Comment

Note: only a member of this blog may post a comment.