Горячий резерв или горячий беспорядок
Распространённый подход к повышению надёжности RAID — держать резервный диск (или несколько), чтобы минимизировать время замены вышедшего из строя. Крайней формой этого является так называемый «горячий резерв» — запасной диск, физически находящийся в массиве, но не используемый до тех пор, пока массив не обнаружит отказ диска: в этот момент система автоматически отключает неисправный диск и подключает горячий резерв — точно так же, как если бы человек вручную извлёк один диск и вставил другой, — позволяя процессу восстановления (resilver) начаться как можно быстрее. Это может сократить время замены диска с часов или дней до секунд и теоретически обеспечить значительное повышение надёжности.
Прежде всего я хотел бы указать на то, что лично считаю ошибкой в терминологии. То, что мы называем «горячим резервом», по моему мнению, следовало бы называть «тёплым резервом», поскольку этот диск готов к работе, но не содержит необходимых данных для немедленного использования. Резервный диск, хранящийся вне корпуса и требующий ручной замены человеком, был бы «холодным резервом». Чтобы называться по-настоящему горячим резервом, диск должен быть заполнен данными и, следовательно, в какой-то мере являться активным участником RAID-массива. У Red Hat есть хорошая статья о том, как эта терминология применяется к сайтам аварийного восстановления для справки. Это разграничение важно, поскольку то, что мы называем горячим резервом, не содержит данных и не заменяет вышедший из строя диск немедленно, а лишь немедленно начинает процесс восстановления утраченного диска — принципиальное различие.
Для ясности изложения далее я буду называть то, что производители именуют горячими резервами, «тёплыми резервами». Вскоре это станет понятным.
Существуют две основные проблемы с тёплыми резервами. Первая — неэффективность тёплого резерва в большинстве случаев использования, вторая — риск «автоматического разрушения массива».
Большинство людей рассматривают концепцию тёплого резерва как способ снизить высокий риск отказа второго диска в RAID 5 с чётностью. Массивы RAID 5 защищают лишь от отказа одного диска в массиве. После отказа одного диска массив остаётся без какой-либо чётности, и любой последующий отказ диска приводит к полной потере массива. RAID 5 выбирают из-за его низкой стоимости при заданной ёмкости, жертвуя надёжностью ради экономичности. Поскольку RAID 5 рискованнее по сравнению с другими вариантами RAID, такими как RAID 6 или RAID 10, для него часто применяют тёплый резерв, чтобы минимизировать время пребывания массива в деградированном состоянии и дать ему возможность начать восстановление как можно быстрее.
Ключевой вывод здесь таков: тёплые резервы, как правило, используются в качестве буфера при использовании менее надёжных типов RAID-массивов в целях экономии. Тёплые резервы значительно чаще встречаются в массивах RAID 5, а затем RAID 6, — оба выбираются вместо RAID 10 из соображений стоимости на единицу ёмкости, а не надёжности или производительности. Есть один случай, когда идея тёплого резерва действительно оправдана для повышения надёжности — это RAID 10 с тёплым резервом, но к этому мы ещё вернёмся. За пределами этого сценария тёплые резервы, на мой взгляд, мало смысла имеют в реальном мире.
Начнём с рассмотрения RAID 1 с тёплым резервом. RAID 1 состоит из двух или более дисков в зеркале. Добавление тёплого резерва хорошо тем, что если один из дисков зеркала выходит из строя, тёплый резерв немедленно начинает зеркалирование оставшегося диска, и вы снова будете защищены в короткие сроки. Это замечательно. Кроме одного небольшого изъяна: вместо тёплого резерва тот же диск можно было с самого начала добавить в массив RAID 1, где он стал бы третичным зеркалом. В роли третичного зеркала диск повысил бы общую производительность массива при чтении почти на пятьдесят процентов при неизменной производительности записи и обеспечил бы мгновенную защиту при отказе диска, а не защиту «как только зеркало будет восстановлено». По сути, это был бы настоящий «горячий резерв», а не тёплый. Таким образом, без дополнительных затрат система имела бы лучшую производительность дискового массива и лучшую надёжность просто за счёт того, что дополнительный диск находился бы в «горячем» состоянии внутри массива, а не простаивал в тёплом ожидании катастрофы.
В случае RAID 5 мы видим ещё более серьёзное предостережение против концепции тёплого резерва — именно здесь она встречается чаще всего. RAID 5 — это RAID с одиночной чётностью, способный восстанавливать любой отказавший диск в массиве с использованием чётности. Вот где начинаются настоящие проблемы. В отличие от RAID 1, где операция восстановления зеркала может быть довольно быстрой, восстановление (resilver) RAID 5 может занять очень много времени. Тёплый резерв не поможет защитить массив до успешного завершения этого процесса — обычно это многие часы, нередко дни, а в зависимости от размера массива и его загруженности — недели или месяцы. Если тот же диск тёплого резерва задействовать вместо этого как член массива с дополнительной полосой чётности, мы получим RAID 6. Тот же набор дисков, что для RAID 5 плюс тёплый резерв, создаст массив RAID 6 той же ёмкости. Аналогично примеру с RAID 1, это было бы похоже на наличие горячего резерва, где диск участвует в массиве с реальными данными, а не стоит без дела в ожидании отказа другого диска, после чего начинает процесс замены. В этом случае при сбое массив деградирует до эквивалента RAID 5, но без какого-либо времени восстановления, поэтому дополнительный диск полезен немедленно, а не только после возможно очень длительного процесса resilver. Таким образом, за те же деньги и с той же ёмкостью выбор RAID 6 вместо RAID 5 плюс тёплый резерв — однозначная победа.
Продолжим этот пример с RAID 6 плюс тёплый резерв. Этот случай несколько сложнее определить, поскольку в большинстве RAID-систем, за исключением не очень распространённого RAIDZ3 из ZFS, нет системы тройной чётности на один уровень выше RAID 6 (представьте, например, если бы существовал RAID 7). Если бы такой вариант был, тот же аргумент, что для RAID 5 плюс тёплый резерв, применялся бы к RAID 6 плюс тёплый резерв. В большинстве случаев RAID 6 с тёплым резервом должен оправдывать себя в сравнении с массивом RAID 10. RAID 10 более производителен и значительно надёжнее массива RAID 6, но RAID 6 обычно выбирают для экономии по сравнению с RAID 10. Однако для компенсации хрупкости RAID 6 иногда применяют тёплые резервы. В некоторых случаях, например при небольшом массиве RAID 6 из пяти дисков с тёплым резервом, это равнозначно по стоимости массиву RAID 10 из шести дисков без тёплого резерва. В более крупных массивах ценовое преимущество RAID 6 становится очевидным, но чем больше экономия, тем больше разница в риске: RAID-системы с чётностью наращивают риск с увеличением размера массива значительно быстрее, чем зеркальные системы вроде RAID 10. Любая сэкономленная сегодня сумма несёт в себе риск простоя или потери данных завтра.
Тёплый резерв эффективен в массиве RAID 10, где восстановление тёплого резерва — это восстановление зеркала, как в RAID 1, которое не несёт рисков чётности и где нет логически следующего уровня RAID выше RAID 10, от которого мы пытаемся сэкономить, переходя на более хрупкую систему. Здесь добавление тёплого резерва может иметь смысл для критически важных массивов, поскольку более рентабельного способа достичь той же дополнительной надёжности не существует. Однако RAID 10 без тёплого резерва настолько надёжен, что любая организация, рассматривающая RAID 5 или RAID 6 с тёплым резервом, логически остановится на простом RAID 10, уже превысив тот уровень надёжности, на который она ранее была готова согласиться. Поэтому только организации, не рассматривающие более хрупкие системы и ищущие максимально надёжный вариант, логически обратятся к RAID 10 плюс тёплый резерв.
Для технической точности: RAID 10 можно расширить для улучшения производительности чтения и значительного повышения надёжности (но с увеличением стоимости на пятьдесят процентов), перейдя к зеркалам RAID 1 из трёх дисков в полосе RAID 0 вместо стандартных зеркал RAID 1 из двух дисков, как было показано в примере с RAID 1. Это уровень надёжности, редко востребованный в реальном мире, но он существует и является вариантом. Как правило, его ограничивают ограничения на количество дисков в физических корпусах массивов, а также конкуренция с созданием полностью отдельного вторичного массива RAID 10 в другом корпусе с последующим зеркалированием на высоком уровне, что фактически создаёт RAID 101 — именно такой результат имеют современные высококлассные кластеры систем хранения данных.
Вторая наша проблема — «автоматическое разрушение массива». Это касается только сценариев с чётностью RAID 5 и RAID 6 (или редких RAID 2, RAID 3, RAID 4 и RAIDZ3). Концепция тёплого резерва предполагает, что при отказе диска контроллер массива автоматически и мгновенно вводит в работу тёплый резерв и процесс восстановления начинается немедленно. Если бы восстановление было полностью надёжным процессом, это, очевидно, было бы весьма желательным. К сожалению, реальность совсем иная.
Во время процесса resilver RAID-массив с чётностью подвержен появлению неисправимых ошибок чтения (URE). Если URE возникает при восстановлении RAID с одиночной чётностью (то есть RAID 2–5), процесс восстановления завершается с ошибкой и массив полностью теряется. Это критически важно понимать, поскольку никакого дополнительного диска не отказывало. То есть, если бы тёплого резерва не было, восстановление не началось бы, и данные оставались бы нетронутыми и доступными — просто не так быстро, как обычно, и с небольшим риском отказа второго диска. Частота URE весьма высока на современных больших дисках, и для крупных массивов риски могут стать настолько высокими, что переходят из категории «возможных» в категорию «ожидаемых» в ходе стандартной операции восстановления.
Таким образом, во многих случаях сам тёплый резерв может стать причиной потери данных, а не их спасителем, как ожидалось. Массив, который мог бы выжить, может быть разрушен процессом resilver ещё до того, как администратор будет уведомлён об отказе первого диска. Если бы в процессе участвовал человек, он мог бы как минимум сделать свежую резервную копию массива перед запуском восстановления, зная, что последняя копия данных будет доступна в случае неудачи. Это также позволило бы запланировать время начала восстановления, возможно, дождавшись окончания рабочего дня или выходных, когда массив менее нагружен.
RAID с двойной и тройной чётностью (RAID 6 и RAIDZ3 соответственно) также подвержены риску URE, поскольку тоже основаны на чётности. Они снижают этот риск благодаря дополнительным уровням чётности и в большинстве случаев успешно. Риск всё же существует, особенно в очень больших массивах RAID 6, но в ближайшие несколько лет он остаётся в целом достаточно низким для большинства систем хранения данных — до тех пор, пока на рынке не появятся значительно более ёмкие носители на шпинделях.
Главная проблема RAID с чётностью и риска URE состоит в том, что стимул к выбору RAID с чётностью (готовность принять дополнительные риски для целостности данных ради снижения стоимости) совпадает со стимулом, порождающим повышенный риск URE (приобретение более дешёвых, не корпоративных SATA-дисков). Организации, использующие RAID с чётностью, как правило, делают это с большими дешёвыми SATA-дисками, соединяя два очень опасных фактора во взрывоопасную комбинацию. Использование зеркального RAID 1 или RAID 10 полностью устраняет проблему, а использование надёжных корпоративных дисков SAS радикально снижает фактор риска на порядок (не образно говоря — это действительно изменение на один порядок величины).
Кроме того, в ходе операций resilver производительность систем с чётностью может деградировать настолько сильно, что это равносильно длительному отказу. Процесс восстановления, особенно на больших массивах, может быть настолько интенсивным, что конечные пользователи не смогут отличить полностью отказавший массив от восстанавливающегося. Более того, resilver в крайних случаях может занять так много времени и быть настолько разрушительным, что затраты для бизнеса окажутся выше, чем если бы массив просто полностью отказал и было выполнено восстановление из резервной копии. Эта проблема resilver не затрагивает RAID 1 и RAID 10, опять же потому, что они являются зеркальными, а не чётностными RAID-системами, и их процесс восстановления тривиален, а деградация производительности системы минимальна и кратковременна. В крайних случаях resilver чётностного RAID может занять недели или месяцы, в течение которых системы ведут себя так, будто находятся в автономном режиме, — и в любой момент этого процесса могут возникнуть упомянутые выше ошибки URE, которые завершат resilver и всё равно принудят к восстановлению из резервной копии. (Типичные операции resilver не занимают недели, но занимают много часов, и занять дни — совершенно не редкость.)
Итоговый обзор можно свести к следующему (снова используется общепринятый термин «горячий резерв»): RAID 10 без «горячего резерва» почти всегда лучший выбор, чем RAID 6 с «горячим резервом». RAID 6 без «горячего резерва» всегда лучше, чем RAID 5 с «горячим резервом». RAID 1 с дополнительным членом зеркала всегда лучше, чем RAID 1 с «горячим резервом». Таким образом, какой бы уровень RAID с горячим резервом вы ни выбрали, просто перейдите на один уровень выше по надёжности RAID и откажитесь от «горячего резерва», чтобы максимизировать производительность и надёжность при равных или почти равных затратах.
Тёплые резервы, как и RAID с чётностью, были на пике своей актуальности. На самом деле, именно когда RAID с чётностью ещё имел смысл для широкого применения — когда ошибки URE были маловероятны, а стоимость дисков высока, — тёплые резервы тоже имели смысл. Они были хорошей парой: когда один был оправдан, другой тоже часто был. Нередко упускается из виду, что по мере того, как RAID с чётностью, и в особенности RAID 5, утрачивал эффективность, он тянул за собой тёплый резерв неожиданным образом.
