Как вы, наверное, все знаете, утром 12 декабря (в 10 утра по московскому времени) наш сервер перестал работать. Когда я пошёл разбираться, оказалось, что не работает он не по внутренним, а по-внешним причинам — от меня не зависящим.
Через какое-то время служба поддержки хостинга вывесила объявление, что у сервера вышел из строя жесткий диск, и что устранение ситуации будет завершено в течение дня.
На самом деле, в течение того дня, конечно, не последовало ни восстановления работы, ни какой-либо отписки от персонала дата-центра. С учётом того, что хостеры клянутся, что применяют RAID-зеркалирование, а оно, как известно, не подразумевает длительных перерывов (а обычно вообще не подразумевает никаких перерывов), при выходе из строя одного из HDD, тот факт, что уже сутки никто ничего не починил, на второй день вызывал у меня сильное беспокойство.
Тут я уже пошёл активно донимать поддержку расспросами насчёт срока (первый день я их не трогал — объявление есть, чего зря людей отвлекать от работы). Со слов хостера, ничего серьёзного не произошло, никакие данные не были повреждены или потеряны, а затягивание сроков вызвано большим объёмом файлов, которые необходимо проверить™.
Что делать?
Очевидно, в сложившейся ситуации у меня было два выхода:
- Срочно броситься поднимать сервер в другом месте из собственных бэкапов.
- Дождаться восстановления
С учётом того, что я не приверженец шаблонных готовых решений, а предпочитаю всё делать вручную, не теряя контроль за ситуацией, первый вариант не обещал быть быстрым. Возможно, что я потратил бы кучу времени, и когда всё было бы уже почти готово, оригинальный сервер восстановили бы.
Другая большая проблема с первым вариантом была в том, что имеющиеся у меня бэкапы были не самыми свежими. И даже очень не свежими.
Бэкапы
Делались ли вообще бэкапы VBStreets? Со стороны хостера никаких действий по созданию бэкапов не предпринималось вообще (с определённого момента истории, когда они решили полностью переложить это бремя на клиентов). В свою очередь с моей стороны снятие бэкапов проводилось регулярно — последний бэкап был сделан 18 ноября 2016 года, то есть чуть меньше, чем за месяц до аварии.
Однако, когда я пошёл смотреть на этот бэкап, я был немало шокирован: оказалось, со временем что-то в махнизме создания бэкапов поломалось, и последний снятый бэкап оказался непригодным для использования. И его предшественник тоже. И предшественник предшественника...
В общем, изучив всю вереницу папок, стало ясно, что последний успешный полноценный бэкап был сделан аж 10 октября 2014 года.
Отсюда мораль: мало снимать бэкапы. Мало автоматизировать процесс их создания. Нужно ещё наладить контроль за правильностью их создания, целостностью файлов и проверять, получается ли из снятого бэкапа развернуть окружение. Желательно всё это автоматизировать.
К слову, причина, по которой с определённого момента бэкапы перестали правильно забираться с сервера, была установлена, и, пожалуй, в отдельном посте я о ней расскажу.
Шэф, всё пропало?
С учётом вышесказанного, два варианта моих возможных действий представлялись уже так: либо дождаться восстановления, либо потерять все топики за последние 2 года. Поскольку если выбрать вариант ожидания, можно было вообще так ничего и не дождаться, были предприняты активные действия: путём приложения немалых усилий все потерянные топики за 2 года были восстановлены из кешей Яндекса, Гугла и сайта archive.org. Отдельно спасибо можно было бы сказать Яндексу, потому что его бот приходил сюда буквально за несколько часов до аварии и проиндексировал все топики в самом свежем их состоянии.
Так что все топики за 2 года были спасены, а вот восстановить подобным образом аттачи (вложения) и личные сообщения не представлялось возможным, что конечно давало повода для переживаний на тот момент.
Почему так долго?
С самого начала у меня был «план А» — дождаться восстановления данных, и «план Б» на случай, если никто ничего не восстановит — использовать старый бэкап + материалы из кешей поисковиков. Поэтому с одной стороны я ждал, а с другой стороны по мере возможного проводилось вытаскивание топиков из кеша поисковиков.
Первые дни хостер пытался всех убедить, что потерей данных даже не пахнет.
Затем хостер всё-таки сознался: умер не хард в составе RAID-массива, а RAID-контроллер. При этом повредились данные на дисках. Удастся ли им восстановить какие-то данные — под большим вопросом.
Это, вкупе с тем, что на сервере использовалось старое железо и стояла FreeBSD 8, поддержка которой уже несколько лет кончилась, заставило хостера принять решение вообще не восстанавливать сервер.
В итоге, только 18 декабря мне впервые удалось получить от хостера огромный архив со всеми данными, которые им удалось восстановить. Архив загружен, а дальше мне предстояло определить, какая часть данных уцелела (в ходе восстановления).
Надо сказать, что архив содержал большое число аномалий: файлы с одинаковыми именами (вплоть до регистра символов), но разным размером, пустые файлы и файлы с совершенно фантастическим содержимым (вроде смеси из содержимого совершенно других файлов моей файловой системы).
Больше всего пострадал каталог с вложениями: множество вложений отсутствовало, часть была повреждена. Однако же большая часть пострадавших вложений пришлась на то время, которое было захвачено старыми бэкапами. Таким образом, из всех вложений (а их 10 тысяч) потеряно только что-то около трёх.
Все файлы (вложения, аватары, скрипты, БД) нуждались в детальной проверки, и это заняло некоторое время.
Беда пришла откуда не ждали
Но не в этом причина большей части задержки. С 12 по 19 декабря я по большей части ждал результатов работы хостера по восстаовлению файлов, загрузал и проверял эти файлы.
Что же с 20-го декабря по 29-ое?
Так получилось, что 20-го декабря я весь день был вынужден провести в разъездах. Магазины, банки, государственные органы. Пришлось немало понервничать.
Под конец дня я уже чувствовал, что мне не совсем хорошо. Я незаметно уснул.
Однако я проснулся уже в 3 часа ночи и почувствовал, что мне уже совсем не хорошо.
Последующие 10 дней я себя чувствовал так «хорошо», что даже просто подойти к компьютеру (не говоря уже, чтобы что-то делать) не представлялось возможным. Разве что я мучил себя мыслью о том, насколько же всё это затянется, если меня увезут в больницу в инфекционный бокс. К счастью, подобной участи я избежал.
Как вы понимаете, это было вовсе не что-то банальное типа гриппа. До выздоровления ещё неделя, две или три — но по крайней мере сидеть уже не так больно, как лежать, а поэтому я могу делать что-то полезное, как-то работать.
Может быть я напишу по поводу болезни отдельный пост в блог.
Что с VBStreets?
На самом деле, на разворачивание сервера нужно пару дней. Примерно так я и рассчитывал, когда повесил страницу-заглушку «с дихлофосом». Увы, но после этого выпало 10 дней из жизни.
Как я и обещал, работоспособность основного сайта (со статьями) и форума восстановлены.
Никакие топики, посты, пользователи и личные сообщения не потеряны.
Пока что форум работает с некоторыми ограничениями:
- Отключена регистрация новых пользователей
- Отключены все функции, связанные с email
Причина в том, что подсистема, относящаяся к отправке и получению почты, ещё не готова. Как только я всё настрою, регистрация и email-зависимые функции (уведомления, восстановление пароля) будет включено вновь.
Кроме того, нам предстоит ещё один переезд в середине января или немного раньше. Дело в том, что сервер, на который я сейчас всё перенёс, довольно таки слабый, ограниченный и убогий (и дешёвый как следствие). Если не будет ощущаться совсем уж сильной нехватки его ресурсов, мы досидим на нём предоплаченный месяц и перейдём на более мощный сервер. В противном случае придётся мигрировать раньше.
P.S. Простите за сумбурный стиль изложения и ошибки (если есть) — сейчас 5 утра, а я не в самой лучшей форме.
P.P.S. Если наблюдаете ошибки или проблемы — сообщайте в личку или на sls_hacker@mail.ru. Хотя я и поглядываю за логами, могу какие-то проблемы пропустить. Писать на forum@vbstreets.ru или admin@vbstreets.ru пока что нельзя.