Резервные копии и миф о RAID
RAID держит доступность, но не спасает от удалённой папки. Реальный случай, как зеркало честно отразило нашу же ошибку, и простой регламент копий, который мы после него собрали.
Объёмы данных растут, стримеры и первые дисковые массивы становятся нормой
Данных у клиентов стало заметно больше. Ещё пару лет назад бухгалтерия помещалась на паре дисков, а сейчас у конторы средней руки на файловой шаре лежат гигабайты, и объём растёт каждый месяц. Вместе с этим в подсобки поехали стримеры и первые дисковые массивы: то, что было редкостью из вычислительного центра, стало нормальным заказом. И тут в головах поселилась удобная, но опасная мысль: раз стоит RAID, значит, данные в безопасности.
Не в безопасности. RAID про доступность, а не про сохранность. И мы это на одном клиенте прочувствовали в полной мере.
Что такое RAID на пальцах
Если совсем просто, зеркало (это RAID уровня 1) - это два диска, на которые контроллер пишет одно и то же одновременно. Умер один диск - второй продолжает работать, сервер даже не икнул, вы меняете сдохший диск на новый, массив тихо восстанавливается. Штука отличная, задачу делает честно: держит непрерывность работы, когда железо подводит.
Ключевое слово тут - железо. Зеркало защищает вас от смерти диска, и только. Оно не знает, хорошие данные вы пишете или дурные. Его дело - записать на оба диска ровно то, что пришло. Пришла команда удалить папку - оно послушно удалит её сразу на обоих. Синхронно, аккуратно, без вопросов.
Как зеркало честно отразило нашу же ошибку
Был у нас клиент, торговая контора, файловый сервер с зеркалом. Мы его ставили, гордились им, диски в зеркале, всё как у взрослых. И в один прекрасный день во время наведения порядка на шаре человек снёс каталог с рабочими документами отдела. Не системный, не наш - живой, нужный людям каталог.
Первая мысль была спокойная: ну ничего, у нас же RAID. А потом дошло. Зеркало сделало ровно то, для чего его придумали: удаление честно отразилось на обоих дисках в ту же секунду. Оба диска живы и здоровы, массив в идеальном состоянии, ни одной ошибки. Просто на обоих больше не было той папки. Второй диск, на который мы втайне надеялись, хранил такую же пустоту, как и первый.
Вытаскивали это долго и некрасиво. Что-то нашлось у людей на локальных машинах, что-то собирали заново, часть просто потеряли. Здец был не в масштабе - обошлось без катастрофы, - а в осознании, что мы сами продали клиенту чувство защищённости, которого у него не было. Поставили зеркало и мысленно поставили галочку "данные в порядке". Галочка была враньём.
Почему их вечно путают
И RAID, и бэкап отвечают на вопрос "а если что-то сломается", поэтому в голове они склеиваются в одну строчку. Но ломается разное. RAID - это про "что если умрёт диск". Бэкап - про "что если пропадут данные", а пропасть они могут сотней способов, к железу отношения не имеющих. Кто-то удалил. Вирус пошифровал. Программа при обновлении покорёжила базу. Человек сохранил кривой файл поверх правильного. Против всего этого зеркало бессильно, потому что послушно тиражирует любое ваше действие, включая ошибочное.
Есть у этой разницы ещё одно измерение - время. RAID знает только "сейчас", у него всегда актуальное состояние диска и ровно оно. А бэкап - это машина времени: вчера, позавчера, неделю назад. Когда вы поняли, что папку снесли три дня назад, вам нужно не текущее состояние диска, а состояние трёхдневной давности. Зеркало вам его не даст никогда.
Регламент, который мы собрали после этого
Сложную систему мы изобретать не стали. Наоборот, вывод был в том, что копии работают только если о них не надо думать. Регламент вышел короткий.
Пишем на отдельный носитель. Как раз подоспели стримеры, и копия уезжает на ленту, физически отдельную от сервера. Носитель с копией не должен зависеть от той же машины и того же массива - иначе одна беда прикончит и оригинал, и копию разом.
Храним несколько дней истории, а не одну последнюю копию. Если затирать вчерашним каждый день, то ошибку, замеченную с опозданием, вы аккуратно размножите во все копии и останетесь ни с чем. Нам хватает нескольких лент в обороте, чтобы всегда был доступ на пару дней назад.
Уносим одну копию с площадки. Пожар, кража, залив - редкость, но если сервер и лента лежат в одной комнате, они и погибнут в одной комнате.
И главный пункт: копию надо проверять восстановлением. Копия, с которой ни разу не пробовали поднять данные, - это не копия, а самоуспокоение. Мы завели правило раз в период честно доставать что-нибудь с ленты и смотреть, читается ли оно. Пару раз именно на этой проверке ловили, что пишется не то или не читается обратно, - и хорошо, что заранее, а не в тот день, когда лента понадобится всерьёз.
Что в итоге
RAID мы ставить не перестали, он делает своё дело: когда мы держим чужую инфраструктуру, падение одного диска не должно ронять контору на полдня. Просто теперь мы не выдаём доступность за сохранность и объясняем клиенту разницу прямо, а не киваем на красивое слово "массив".
Раньше мы уже говорили, что не тащим в продакшн малого бизнеса всё модное ради красивой архитектуры. Тут та же мысль с другой стороны: дорогой массив создаёт ощущение надёжности, за которым не стоит ничего, если рядом нет скучной ленты и скучного регламента. Спасает в итоге не самая дорогая железка, а привычка делать копию и хоть иногда её проверять.