28 апреля 2010 г.

Некоторые методы обеспечения целостности данных в Clariion

Давайте рассмотрим несколько потенциальных возможностей появления “битых” данных и способов борьбы с такими случаями в массивах Clariion.

Операция записи данных на RAID5, по сути, состоит из двух фаз: запись блоков данных, запись parity. В случае пропадания питания до того как вторая фаза была завершена, данные parity будут некорректны. Эту проблема, конечно, обнаружится и будет исправлена скрабером SNiiFFER (о нем чуть позже), но только после некоторого неопределенного времени. Если до этого один из дисков выйдет из строя, восстановленные данные будут некорректны. Именно поэтому секторы, содержащие неверные значения parity необходимо выявить и пересчитать как можно раньше. Для ускорения этого процесса используются специальные записи в NVRAM каждого SP. Перед выполнением операции записи на диск, в небольшую область NVRAM помещаются сведения о номере модифицируемой LUN, адресе блока и объеме записываемых данных. После успешного выполнения операции записи данных и parity, эта информация удаляется. При загрузке массива с появлением электропитания, записи NVRAM анализируются на предмет наличия незавершенных операций, а в случае их нахождения, блоки данных и parity сразу восстанавливаются.

Как вы знаете, размер сектора в дисковых массивах Clariion равен не 512, а 520 байт. Дополнительные 8 байт используются для хранения следующей информации:
  • 2bytes контрольная сумма LRC (Longitudinal Redundancy Checksum,)
  • 2bytes штамп времени timestamp
  • 2bytes штамп времени writestamp
  • 2bytes штамп shedstamp
Штампы времени является уникальными значениями, генерируемым SP. Каждый раз, когда производится full stripe write, в соответствующие поля секторов всех дисков RAID Group записывается новый timestamp. В случае модификации только одного из секторов, на дисках с данными и parity выставляются одинаковые значения writestamp. После выполнения full stripe write, writestamp обнуляется. Таким образом, по совпадению значений writestamp в секторе данных и соответствующем ему секторе parity можно убедиться в успешности завершения обеих фаз операции записи. Вместе штампы времени представляют собой уникальный идентификатор “версии” данных и parity. Если после каких-либо сбоев, обнаруживается несовпадение этих версий, значение parity пересчитывается.

Однако, нельзя недооценивать возможность повреждения parity при использовании RAID Group с уже сломавшимся диском. В этом случае, неверный parity может привести к невозможности получения корректных данных. Хочу обратить ваше внимание на то, что приведенная ситуация не является RAID5 double failure и поэтому обязательно должна быть разрешена. Для этого в дисковых массивах Clariion используется проприетарный алгоритм parity shedding. Главным вопросом , который привел к ее появлению был: “зачем нам parity в RAID5 с вышедшим из строя диском?”. При использовании parity shedding, поломка диска запускает процесс восстановления данных и их записи вместо parity. Соответствующий сектор помечается при помощи shedstamp. Таким образом, мы убиваем сразу двух зайцев: во-первых, увеличиваем производительность доступа к данным (ведь уже нет необходимости каждый раз восстанавливать данные из parity), а во-вторых, исключаем потенциальную возможность повреждения самой parity. Ради интереса, задайте вопрос представителям других производителей дисковых массивов, как в их продуктах решена эта задача?  ;)

Рассмотрим случай повреждения или некорректного чтения самих данных. Эта проблема актуальна для всех типов RAID. Решается она классическим способом, вместе с данными хранится контрольная сумма. При считывании сектора, его контрольная сумма вычисляется заново и побитно сравнивается с уже имеющимся значением LRC. В случае несовпадения, производится еще одна попытка чтения данных, а в случае ее повторной неудачи, информация восстанавливается с другой части зеркала RAID10  или parity RAID5.

Скрабинг данных (scrubbing) – это функция обнаружения ошибок чтения и  целостности информации. Фоновый процесс SNiiFFER постоянно читает секторы данных и проверяет их корректность. Он обнаруживает ошибки, которые могут быть исправлены самим контроллером жесткого диска (disk-recovered errors), а также проблемы с данными, которые невозможно восстановить на уровне дисков (medium errors). При обнаружении disk-recovered error, SNiiFFER отдает команду о проактивном переносе данных в другой физический сектор диска. Medium errors восстанавливаются используя возможности избыточности информации в RAID. SNiiFFER работает в фоне с очень низким приоритетом и поэтому никак не влияет на обслуживание операций ввода-вывода. В системе мониторинга производительности его активность видна в видна как операции чтения блоками 64KB и Throughput ~2IOPS).

4 комментария:

  1. ....
    Как вы знаете, размер сектора в дисковых массивах Clariion равен не 512, а 520 байт. Дополнительные 8 байт используются для хранения следующей информации
    .....
    Вычитал вот здесь http://blog.aboutnetapp.ru/archives/708
    интересную вещь про SATA диски - залез проверил на сайт Сигейта - точно так
    ссылка
    http://www.seagate.com/www/en-us/products/enterprise-hard-drives/constellation-es/#tTabContentSpecifications

    и документация на винты
    http://www.seagate.com/staticfiles/support/disc/manuals/enterprise/Constellation%203_5%20in/100516232f.pdf


    (под рукой нет системы с SATA винтами, но так как SAS винты сигейты и соответственно в спецификации на них, на сайте Сигейта написано, что можно форматить размер сектора по 520 байт)


    Соответственно вопрос - как реализованы 520 байтные сектора в системах EMC для SATA винтов???

    (c) villain

    ОтветитьУдалить
  2. SP ничего не знают об особенностях форматирования SATA и поэтому не зависимо от типа накопителя работают с 520 byte секторами. Поэтому вся кухня реализована на "железном" уровне при помощи дополнительного модулька, находящимся на одних салазках с диском вместе с контроллером интерфейса и прочей внешней обвязкой (это, кстати, еще раз объясняет, откуда берутся такие цены на энтерпрайзовые диски). На сколько я знаю, алгоритм реализован простым ремапингом адресов. От блока отделяются данные, которые записываются в сектор. Далее пишутся метаданные прямо за данными в следующий 512-byte сектор. Следующий блок записывается не по границе сектора, а со смещением 8 bytes и т. д. Такой подход, реализованный в железе во первых позволяет минимизировать деградацию производительности, а во вторых экономно расходует дисковое пространство. В приведенном вами примере NetApp, видно что там это не так и для хранения 64 bytes трятятся все 512.

    Кстати, есть интересный документ на эту тему http://www.raidinc.com/pdf/Silent%20Data%20Corruption%20Whitepaper.pdf
    Однако, впечатляет: "A recent academic study [1] of 1.5 million HDDs in the NetApp database over a 32 month period found that 8.5% (!!!) of SATA disks develop silent corruption."

    ОтветитьУдалить
  3. Спасибо. Познавательно.

    (c) villain

    ОтветитьУдалить
  4. Вопрос по поводу parity shedding. Допустим вышел из строя диск, часть данных LUN которая была на этом диске восстанавливается с использованием parity, затем записывается вместо parity, правильно понимаю? А что происходит во время equalizing? Восстановленный сектор копируется на новый диск, а в секторы с shedstamp записываются новые parity? Так?

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.