RAID-4 / RAID-DP — превращаем недостатки в достоинства

    image
    Когда я в прошлом посте написал, что Snapshots были, на момент появления систем NetApp их главной «фичей», я отчасти слукавил (а отчасти просто забыл), так как у них, на тот момент, была как минимум еще одна особенность, радикально выделяющая их из ряда «традиционных» систем хранения — это «RAID тип 4».
    Это тем более интересно, так как никто больше такой тип RAID для использования в дисковых системах хранения данных не использует.
    Почему же был выбран именно такой тип, в чем его преимущества, и почему никто больше такой тип RAID сегодня не использует?

    Для тех, кто далек от теории рэйдостроения, напомню, что из шести стандартных типов RAID, описанных в научной работе, положившей начало их использованию, RAID тип 2 (с защитой кодом Хэмминга) не применялся в «живой природе», оставшись забавным теоретическим упражнением, RAID-1 (и его вариант RAID-10, или, иногда, как RAID-0+1) это защита данных автоматическим синхронным зеркалированием на паре (или нескольких парах) физических дисков, а RAID-3, 4 и 5 (позже к ним добавился RAID тип 6) — это так называемые «RAID с чередованием и четностью». Между собой они отличаются способом организации и хранения данных четности, а также порядком чередования данных. В обычно хорошо известном всем RAID-5, данные чередуются по дискам вместе с информацией parity, то есть parity специального диска не занимает.
    В RAID-3 и 4 для информации parity выделен отдельный диск (Между же 3 и 4 разница в размере блока чередования — сектор в type 3 и группа секторов, блок — в type 4).

    image

    У RAID-4, то есть «RAID с блочным чередованием и четностью на выделенном диске», есть одно важное достоинство. Его можно увеличивать в размерах, просто добавляя в RAID физические диски, и при этом нет необходимости перестраивать полностью весь RAID, как, например, обстоит дело в случае RAID-5. Если вы используете 5 дисков под данные (и один под parity) в RAID-4, то для того, чтобы увеличить его емкость, вы можете просто добавить в него один, два, и так далее дисков, и емкость RAID-массива немедленно увеличится на объем добавленных дисков. Никакого длительного процесса перестроения недоступного для использования RAID-массива, как в случае RAID-5, не нужно. Очевидное, и очень удобное на практике преимущество.

    image

    Отчего же тогда RAID-4 не применяют повсеместно вместо RAID-5?
    Он имеет одну, но очень серьезную проблему — производительность на записи.
    Дело в том что каждая операция записи блока на дисках RAID, сопровождается записью для обновления блока parity на диске Parity. Это означает, что сколько мы ни добавим к наш массив дисков, между которыми будет распараллелен ввод-вывод, он все равно весь упрется в один единственный диск — диск parity. По сути производительность RAID-4, в «классическом» его применении, ограничена производительностью диска Parity. Пока на этом диске не прошла запись обновления содержимого лежащих на нем блоков parity, все остальные диски, хранящие данные, крутятся и ждут завершения этой операции.

    Отчасти эта проблема была решена в RAID-5, где блоки parity также распараллеливаются по дискам, как и блоки данных, и проблема «бутылочного горла» в отношении диска parity была отчасти решена, что, впрочем, не означает, что RAID-5 лишен всех недостатков, скорее наоборот, это, на сегодня, наихудший тип RAID из всех широко применяемых, страдающий и от ненадежности, и от низкой производительности, о чем я писал в статье «Почему RAID-5 — mustdie?».

    Особо останавливаясь на вопросах производительности (о надежности читайте статью выше) следует отметить, что RAID-5 имеет одну, но очень серьезную «родовую травму», изначально конструктивно присущую этому типу RAID вообще (типов 3,4,5 и 6 — «чередование с четностью») — малой производительности на произвольной (random) записи. Этот аспект в реальной жизни очень важен, так как объемы произвольной, случайной по характеру, записи в общем трафике хранения довольно значительны (достигая 30-50%), и падение производительности на записи напрямую влияет на производительность хранилища вообще.

    Этой проблемой «болеют», повторюсь, все «классические» системы хранения, использующие RAID такого типа (3, 4, 5 и 6).
    Все, кроме NetApp.

    Каким образом NetApp удалось решить сразу и проблему «бутылочного горла» с диском parity, и проблему низкой производительности при random write?
    Тут нам опять придется вспомнить структуру WAFL, о которой я уже писал ранее.
    Как сказал по этому поводу инженер NetApp Kostadis Roussos: «Почти любая файловая система сегодня лежит поверх того или иного RAID. Но только WAFL и RAID на NetApp при этом знают друг о друге столько, чтобы взаимно использовать возможности, и компенсировать недостатки друг друга». Это действительно так, ведь для WAFL уровень RAID есть просто еще один логический уровень data layout внутри самой файловой системы. Напомню, что NetApp не использует аппаратные RAID-контроллеры, предпочитая строить RAID средствами своей файловой системы (аналогичный подход позже выбрала ZFS со свои RAID-Z)

    Что же это за «взаимные возможности»?
    Как вы помните из моего рассказа про WAFL, она устроена таким образом, что данные на ней, однажды записанные, в дальнейшем не перезаписываются. В случае же необходимости внести изменения содержимого внутри уже записанного файла, выделяется место в пространстве свободных блоков, запись измененного блока проводится туда, а затем указатель на содержимое старого блока переставляется на новый блок, бывший пустым, а теперь несущий новое содержимое.

    Такая стратегия записи позволяет нам превратить случайную (random) запись в последовательную (sequental). А раз так, мы можем делать запись максимально эффективным способом — «полным страйпом» предварительно подготовив его, и собрав все «перезаписи», нацеленные в разные участки дисков, в одну удобную для записи область. То есть вместо перезаписи отдельных блоков, записывая в один прием готовую, сформированную «полосу» данных, разом на все диски RAID, включая и предварительно вычисленную parity всего страйпа на соответствующий ему диск. Вместо трех операций чтения-записи — одна.
    Ни для кого не секрет, что sequental операции значительно быстрее и удобнее для системы, чем операции типа random.

    image

    image

    Запись «полным страйпом», то есть на все диски RAID с чередованием, это максимально желанный алгоритм записи для такого типа RAID. Именно для этого на RAID-контроллерах наращивают объемы кэш-памяти, достигающих на high-end системах весьма впечатляющих размеров (и стоимости). Чем больше кэш на запись в традиционных массивах, и чем дольше в нем «зависает» блок данных, пришедший с сервера на запись на диск, тем больше шансов на то, что в этом кэше однажды соберется из таких блоков «полный страйп», и его можно будет слить на диски максимально выгодно.
    Именно поэтому write-back кэши RAID-контроллеров стремятся сливать (flush) данные на диски пореже, и обязательно нуждаются в автономном питании своей памяти от батарейки для сохранения блоков данных, ожидающих своей очереди в кэше.

    С ростом объемов дисков NetApp, как и все другие, столкнулась с необходимостью обеспечить повышенную надежность хранения данных RAID. Именно по этой причине, начиная с 2005 года, именно RAID-DP, NetApp-овская реализация RAID-6, является рекомендуемой, предпочтительной, и вообще «конфигурацией по умолчанию». В этом NetApp также первенствует, так как RAID -DP, защищая, как и RAID-6, от потери данных при потере двух дисков разом (например, сбое во время ребилда ранее отказавшего диска), не ухудшает показатели производительности, в отличие от RAID-6, в сравнении с RAID-5 или RAID-10.

    Причины этому все те же. Ситуация у «других вендоров» с RAID-6, по сравнению с RAID-5 еще более ухудшается. Принято считать, что производительность RAID-6 падает по сравнению с RAID-5 на 10-15%, а по сравнению с RAID-10 на 25-35%. Теперь надо проводить не только чтение-запись одного блока parity, но надо делать это для двух разных групп блоков.
    Однако RAID-DP по прежнему не нуждается в этом, причины этому все те же — случайная запись в произвольное место массива превращается в нем усилиями WAFL в последовательную запись в заранее выделенное пространство, а такая запись осуществляется гораздо быстрее и выгоднее.

    Подтверждение того, что использование RAID-4 (и его варианта — RAID-DP, аналога RAID-6) на системах NetApp объективно не приводит к ухудшению производительности — авторитетные тесты производительности дисковых систем SAN (Storage Performance Council, SPC-1/SPC-1E) и NAS (SPECsfs2008), которые NetApp демонстрирует на RAID-4 (и RAID-DP с 2005 года).
    Более того, системы NetApp с RAID-DP на равных соревнуются там с системами с RAID-10, то есть показывают производительность значительно выше привычной для «RAID с чередованием и четностью», сохраняя высокую эффективность использования пространства, ведь, как вы знаете, на RAID-10 можно использовать под данные всего 50% от купленной емкости, в то время, как на RAID-DP, при более высокой надежности, но сравнимом c RAID-10 быстродействии, и для стандартного размера группы, получается доступного места для данных свыше 87%.

    Таким образом, остроумное использование совместно двух «фич» — RAID-4 и режима записи в WAFL, позволило получить преимущества от них обоих, одновременно избавившись от их недостатков. А дальнейшее развитие RAID-4 в RAID-DP, обеспечивающего защиту от двойного дискового сбоя, позволило повысить надежность хранения данных не жертвуя при этом традиционно высокой производительностью. А это непросто. Достаточно сказать, что использование RAID-6 (аналога RAID-DP, с эквивалентно высоким уровнем защиты), по причине низкой производительности на записи не практикуется и не рекомендуется для primary data больше никем из производителей систем хранения.

    Как стать одновременно богатым, сильным и здоровым (и чтобы за это ничего не было)? Как обеспечить высокую степень защиты данных от сбоя, при этом не пожертвовав ни высокой производительностью, ни объемом дискового пространства?
    Ответ знает NetApp.
    Обращайтесь к его компаниям-партнерам ;)

    UPD: в главной роли на фото в заставке статьи — NetApp FAS2020A из хозяйства хабраюзера foboss.
    NetApp
    0,00
    Компания
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 50

      0
      Так-так, если я все правильно понял, то можно обойтись без WAFL, если использовать SSD как parity-диск.
      И это будет намного дешевле текущих решении NetApp. Ничего против NetApp не имею, но хочется мм… съэкономить. Ждем таких RAID-ов.
        +1
        Вы напрасно считаете SSD какой-то панацеей. На запись SSD значительно менее эффективен, чем на чтение. По оценке, которой я склонен доверять, производительность в IOPS на random write для типового enterprise-class SSD всего в полтора-два раза выше, чем у 15KRPM SAS.
        И это мы еще не трогаем проблемы с конечностью ресурсов записи у SSD.

        SSD действительно очень эффективен на random read небольшими блоками, за что его и любят, но странно считать его совсем уж лишенным недостатков и универсальным решением.

        Насчет «дешевле» есть обоснованные сомнения. Тем более о том, во что это «дешевле» обойдется в долгосрочной перспективе.
          0
          Ясно, спасибо за просвещение неразумного…
            +1
            То есть даже если SSD будет быстрее SAS на запись в пять раз, это будет значить, что такой parity disk не будет тормозить RAID только при размере RAID-группы размером в пять SAS data-disks, а это, по сути, совсем немного, типовой размер RAID-групп у NetApp для SAS сейчас это 20-24, максимально возможный — 28.
            Обычно стремятся максимально увеличивать длину RAID-группы, так как это увеличивает ее быстродействие.

            А с использованием Flash есть другая, в крайний год очень популярная идея — использовать его как своеобразный persistent cache для данных. У NetApp такое устройство тоже есть, расскажу парой постов далее.
            0
            А что насчет надежности parity диска. что произойдет при выходе его из строя? А если после сбоя parity диска выйдет еще один диск из строя?
              0
              В случае RAID-DP выносится выход из строя любых двух дисков в RAID-группе. Двух parity, parity и data, двух data, по любому. Данные сохраняются. При потере двух parity остаются все data. При потере одного — данные второго восстанавливаются за счет избыточности на оставшихся дисках.
              То есть все как обычно для RAID, например RAID-6.

              Сразу после выхода из строя (или при спрогнозированном выходе) начинается переливание всего уцелевшего на диск hot spare, который всегда должен быть в системе, все что не читается — восстанавливается из избыточных байтов.
              Сбойный (или ненадежный) диск начинает внутри системы прогоняться тестами, и, если удается восстановить его работу, возвращается в hotspare, если нет — отмечается как убитый, и заменяется.
              0
              В таком случае есть вариант RAM диска. Но это уже совсем энтерпрайз… Да и сложно сделать RAM диск на парочку терабайтов…
            0
            RAID10 как производительный вариант используют не для линейного чтения/записи, а для случайного доступа, и как раз в этом виде и показывается его высокая производительность, RAID-DP может конкурировать в этом режиме работы?
              0
              А почему нет? Чтение не является его слабой стороной, а запись превращяется в линейную. Цифры должны быть сопоставимы.
                0
                Чтение в десятке быстрее, т.к. можно одновременно читать в разных дисков в разных местах. Простой пример — raid10, 4 диска, файл записывается на 4 диска разом, чтобы записать надо записать удвоенный размер файла на 4 диска, т.е. условно по пол файла на диск, а чтобы прочитать файл надо прочитать по четвертинке с диска, т.е. с каждого диска по половине информации о файле, записанной на диск, в других вариантах рэйдов надо с каждого диска прочитать всю информацию о файле, записанную на диск.
                  0
                  В RAID10 мы так же читаем с 4х дисков одновременно если их там 4.
                    0
                    Чтение сравнимо и у RAID-5, на равном количестве дисков.
                    Чтение успешно параллелится, это не проблема ни для RAID-5,6 ни для RAID-10, вот с записью начинаются проблемы.
                    А запись это, оценочно, до 30% операций.

                    Поэтому улучшение характеристик записи у RAID-4/DP естественным образом улучшает показатели массива в целом, так как мы минимум втрое ускоряем 30% всех операций.
                      0
                      Ну, все зависит от приложений, есть и «пишущие» системы, и «читающие».
                        +1
                        Согласен, но если мы возьмем, например, характерную для ынтерпрайза задачу — OLTP-базу, то принято считать, что это 100% random и 66%/33% read/write.

                        Да, для вебсервера, отдающего статику это будет 100% random read, для системы видеонаблюдения — 100% sequental write.
                        Но все же 100% только read или только write то какой-то небольшой нишевой случай.
                  0
                  Упс. Промахнулся. Вот ответ.
                  habrahabr.ru/company/netapp/blog/113427/#comment_3663033
                  +1
                  > RAID10 как производительный вариант используют не для линейного чтения/записи, а для случайного доступа

                  Так и я о том же. На сегодня sequental операции сравнительно редки, строго говоря это только задачи backup-restore, ну и всякие специфические, типа видеозаписи и иногда DSS-операции в базах.

                  > RAID-DP может конкурировать в этом режиме работы?

                  Именно тут он и конкурирует. Поскольку random-записи в WAFL автоматически, вследствие его организации, превращаются в sequental, это снимает основную проблему в RAID-c-чередованием-и-четностью — высокий penalty при random-записи.

                  Простой пример — никто из вендоров не демонстрирует результаты на SPC-1 на RAID-5 или RAID-6, например. А NetApp показывает их на RAID-DP, и во многих случаях они оказываются сравнимыми с результатами на RAID-10.
                    +1
                    > RAID-10, или, иногда, как RAID-0+1

                    RAID-10 это совсем не RAID-0+1, отличия в том что у одного сначала половину дисков в Stripe, а потом Mirror, а у другого сначала Mirror и потом собираем Stripe.
                      0
                      На этот счет существуют разные мнения, и чтобы не устраивать тут спор остроконечников с тупоконечниками, что в каком порядке зеркалится и страйпится, я не хотел останавливать на этом внимания, речь тут, собственно, не об этом.
                      0
                      Адаптек давно решил проблему батареек у рейда с помощью ионистора и маленькой флешки.
                        +2
                        Не вполне понял к чему был этот комментарий, поясните?
                          0
                          К утверждению, что требуется батарея для рейда, чтобы юзать wb-кеш.
                            0
                            Неожиданно :)
                        0
                        Никогда не понимал почему стоимость «батарейки» для контроллеров превышает $100
                        3ware adaptec
                          0
                          Потому что это не батарейка отдельно (батарейки отдельно это в Ашане на кассе), а специальный продукт, в цену которого много что включено.

                          А это отчего вы вспомнили про батарейки? Вон и amarao к чему-то упоминает батарейки, только не пойму к чему, я вроде про это даже ничего и не писал.
                          +3

                          «специальный продукт, в цену которого много что включено»
                          ~5 000 руб.

                          Ситуация, как и с принтерами. Они тоже иногда стоят по 1500 руб, но комплект картриджей стоит столько же — 1500 руб.

                          Мне отчего-то кажется, что стоимость этого аккумулятор около $5. Я не понимаю почему их не интегрируют во все контроллеры прямо на заводе. Отвечаю сам себе на вопрос: потому что людей принято «доить»
                            +3
                            Если вы так считаете, то, уверен, вам ничего не стоит заткнуть за пояс Adaptec, начав производить RAID-контроллеры по себестоимости плюс сколько вы считаете приемлемой маржой. Все покупатели Adaptec немедленно будут ваши, что они, дураки платить по 5000 рублей за аккумулятор, который у вас будет стоить ну пусть не 5, а 6$
                            Отдаю идею всемирного бизнеса даже забесплатно, «за спасибо». Хорошему человеку помочь даже приятно.

                            Вы не ответили на вопрос, отчего вы решили поднять эту тему в топике, в котором речь идет совсем не о батарейках к контроллерам?
                              0
                              А в чём смысл в аккумуляторе контроллёра, если диски в момент аварии и так обесточиваются? Рассчёт на то, что ПОСЛЕ восстановления основного питания данные, сохранённые в энергонезависимой памяти контроллёра, подпитываемой этим аккумулятором, записались на диски так, как будто ничего и не было.

                              Здесь есть неочевидные точки отказа, которые разрушают всю идиллию (непрогнозируемая деградация активной массы аккумулятора, прежде всего). И производители таких контроллёров, конечно же, знают об этом и не могут взять на себя полную ответственность за сохранность данных, поставляя в комплекте с контроллёром относительно дешёвые аккумуляторы (или ионисторы).
                              0
                              >Запись в RAID-5
                              >Чтобы изменить блок D1 надо:
                              >1.Считать соответствующий Parity Block

                              Но зачем? Ведь Parity Block и так придётся вычислять заново и записывать наравне с новым блоком (страйпом) данных!
                                0
                                А как мы рассчитаем новый «из ничего», ведь содержимое его зависит не от одного только записываемого блока, а от всех. То есть альтернатива — читать весь страйп целиком и перерасчитывать его по данным всего страйпа с одним измененным блоком в нем, и записывать, но это заметно больше операций.
                                Таким образом, чтобы получить значение нового parity block нам обязательно надо откуда-то недостающую информацию для расчета добыть.
                                  0
                                  Во-первых, файловая система всегда работает только с целостным блоком данных. Задача аппаратного контроллёра или программного механизма (в случае программной реализации) скрыть детали манипуляции со страйпом от файловой системы. То есть все низкоуровневые манипуляции со страйпом, его перестроение и вычисление блока контроля чётности остаются на совести контроллёра (аппаратного или программного), но никак не файловой системы, с которой вы сравниваете RAID-4+WAFL.

                                  В обшем, вы сравниваете низкоуровневые операции с высокоуровневой моделью обработки данных WAFL, что несколько странно, так как низкоуровневые манипуляции со страйпом могут быть также хорошо оптимизированы и не вызывать существенных задержек в выполнении в том числе для традиционных файловых систем, которым неизвестна вся подноготная RAID.
                                    0
                                    > То есть все низкоуровневые манипуляции со страйпом, его перестроение и вычисление блока контроля чётности остаются на совести контроллёра (аппаратного или программного), но никак не файловой системы, с которой вы сравниваете RAID-4+WAFL.

                                    Вы упускаете из виду, что, в случае WAFL, RAID это функция файловой системы.
                                    Все «низкоуровневые манипуляции» в WAFL/NetApp, в том числе страйпрование и вычисление parity, осуществляются OS, для нее диски это просто массивы байт, никакого «аппаратного контроллера» над ними, отделяющего их от OS и файловой системы нет.

                                    То есть WAFL это сам себе RAID-контроллер, примерно также, как RAID-Z в ZFS это просто такая манера писать на диски у ZFS.
                                      0
                                      Вы полагаете, что в ZFS используется стратегия записи данных, показанная на иллюстрации с примером записи на RAID-5, с четырьмя пунктами операций?
                                        0
                                        Я ничего не говорю про ZFS хотя бы потому, что в ZFS не используется RAID-5.
                                        В RAID-Z ипользуется схема, аналогичная использованной в WAFL, ZFS вообще ну очень похожа ;) на WAFL, появившуюся лет за 12 до нее, и за эти 12 лет довольно убедительно продемонстрировавшую свои преимущества.
                                0
                                А чем это лучше zfs? :)
                                  0
                                  Как ни странно, ничем. RAID-Z, RAID-Z2 тоже можно расширять, заменяя в них диски на диски повышенной ёмкости.
                                    0
                                    откровенно говоря — это не лучший способ. Для домашнего использования.
                                      0
                                      Вы знаете лучший? Огласите, пожалуйста.
                                        0
                                        Для домашней файлопомойки?

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

                                        Если же есть возможность купить несколько новых вместительных дисков, то зачем ими заменять старый массив? Это долго и опасно, лучше сразу создать новый массив и на него перелить инфу.
                                          0
                                          Если денег нет на чтобы «сразу», то можно постепенно заменять устаревающие диски новыми, чтобы в один прекрасный момент, на последнюю зарплату купив последний диск на замену, ощутить радость от увеличения полезного объёма RAID.
                                            0
                                            объясни, мне дураку, смысл этого подхода. У тебя получается место, которое ты не можешь использовать, лишний старый винт. Деньги потрачены. Никаких плюсов, только потрачены ресурсы. Проще копить деньги. Либо просто подключать новые винты, а потом из них организовать рейд.
                                    0
                                    Ну как… Один это оригинал, а второй — талантливая копия :)

                                    А если серьезно, то пользуйтесь тем что больше нравится, и что вас больше устраивает с точки зрения надежности и производительности.
                                      0
                                      А в чём заключается «талантливая копия»? (Что-то я не нахожу сравнения WAFL с ZFS на известной страничке).
                                        0
                                        zraid ближе к 5-ому райду, zraid2 ближе к 6 райду, не знаю как 4-ый сюда затесался.
                                        zraid паритет обеспечивают на уровне данных, а не устройства, отсюда выгода перед их «железными» братьями ну и плюс исключение «глюков» райдадаптера в случае чего.
                                        Я вот думаю реально как-то устройство отдать как локальное другой системе, чтобы делать распределенный raidz2 по 2-3 системам…
                                          0
                                          о, реально оказывается. через geom_gate.
                                          так теперь вообще не ясна выгода адаптера…
                                    0
                                    Правильно ли я понял следующее:
                                    Если у меня был забитый raid-4, я добавил диск. Все новые данные будут писаться на новый диск?
                                      0
                                      Да, и в этом есть, кстати говоря, одна эксплуатационная сложность. Если есть, например, длинный RAID, например в 20 дисков, и он почти заполнен, и к нему добавили еще пару дисков, то все записи, согласно логике WAFL, которая пишет «на свободное место» пойдут далее преимущественно на эти два добавленных диска, как «самые пустые». Такое поведение может вызвать серьезное ограничение в производительности (так называемая «проблема hot spindles»), поэтому предусмотрена специальная процедура physical realocate, при добавлении дисков в таких случаях, при которой блоки данных внутри FS более равномерно «растасовываются» по дискам, выравнивая их загрузку, а не падают прямиком на эти только что добавленные, и перегруженные этим, диски.
                                        0
                                        Процедура сильно напоминает ребилд пятого\шестого рейда? По описанию — сильно.

                                        Можно ли поподробнее о RAID-DP? Я так понял там не только добавлен диск с четностью.
                                          0
                                          В каком-то смысле- да, но без риска потери данных.
                                          Опять же, это опциональная процедура, вот в таких экстремальных вариантах, как описано выше.
                                      0
                                      Господи, на фото же моя FAS2020 :)
                                        +1
                                        Да, спасибо, я воспользовался любезно предоставленным автором копилефтом :)
                                        Не знаю, распространяется ли он и на палец ;)

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

                                      Самое читаемое