main page
russian english
Блоги » Vallefor »

Удача 90-го уровня

Удача 90-го уровня
31 июл 2019 07:01:20

Всем привет!

Много пользователей, наверное заметили, что сайт лег на полтора дня.
На самом деле мы пережили интересный коллапс :)

Как вообще у нас устроено с резервированием данных:
На сервере, где находится Полка, установлено 2 жестких диска в программном RAID1 - это когда все данные дублируются и если умирает один диск, то во первых все продолжит работать как и работало, а во вторых - его достаточно просто заменить, проделать не сложные манипуляции, после чего все данные синхронизируются на новый диск и все продолжает работать в штатном режиме. На самом деле, можно даже сайт включить во время синхронизации данных (это все будет идти на много дольше, но в целом ничего страшного в этом нет).

По мимо этого, раз в день, мы делаем инкрементальную копию файлов и базы на Backblaze, используем при этом Percona Xtrabackup (позволяет делать копию базы без блокирования таблиц и нагрузки на сервер) и Duplicacy (очень крутая штука для инкрементальных бекапов файлов). То есть если накроется вообще все, то придется просто заново установить и настроить, все, что у нас там было и развернуть бекап (что, платно).

Что случилось у нас:
Сначала пришло уведомление, что развалился RAID1 массив, я в это время обедал и его успешно не заметил. Не успел я вернуться с обеда, как Feba написала, что полка лежит, захожу, вижу ошибку 502 Bad Gateway (окей, по какой-то причине лег php-fpm). Захожу на сервер, пробую запустить php-fpm - говорит, что PID файл есть и возможно все уже запущено. Смотрю PID файл и правда есть, но удалить его не получается, так как файл побитый и нужно делать проверку файловой системы - что на запущенном сервере сделать нельзя и нужно делать либо на перезагрузке.

Тут закрадывается мысль проверить а что там с RAID1 (почту то я все еще не проверил). Проверяю - один хард отвалился. Ок, ничего хорошего, но не так уж и плохо.

Проверяю SMART двух хардов и вижу, что:
Первый хард начинает покрываться битыми секторами - этот хард остался в рейде и продолжал пыхтеть.
У второго харда счетчик включений/выключений достиг 6400+ (что явно аномально).

Ок, второй хард уже, можно сказать, в могиле. Интересно, когда туда отправится первый?
Пробую сделать полный бекап всего на Backblaze - бекап успешно создается.

Пишу в поддержку Hetzner (там мы сервер арендуем), отправляю логи - говорят, что ошибок достаточно и оба харда можно заменить. Окей, прошу их поменять хард, что вылетел из RAID.

Хард меняют, загружают сервер в Rescue System (это практически как со стороннего носителя загрузиться, в случае полного коллапса, у тебя есть еще возможность все исправить). Добавляю хард в RAID, запускается синронизация данных. Думаю, что сейчас все засинхронизируется на новый хард, попрошу заменить второй и засинхронизирую еще раз.
Так как хард размером в 2ТБ - синхронизация идет 4 часа. Раз в час, проверяю, что там как. На 95%+ синхронизация останавливается и mdadm (это утилита для управления программным RAID) выкидывает новый хард из массива. dmesg покрывается красными сообщениями "I/O Error" и говорит, какие сектора побились. Принудительно затираю эти сектора другой утилитой, проверяю, что они читаются, запускаю синхронизацию еще раз. Опять ошибка на 95%+ (становится понятно, что так дело не пойдет).

Синхронизирую данные с умирающего диска на новый при помощи ddrescue (по крайней мере эта утилита, в случае ошибок чтения, не останавливается), а это опять 4 часа.

Клонирование завершено, останавливаю все текущие RAID1 массивы, создаю заново новые с использованием нового диска (отмечая, что второй диск пока отсутствует). Все создается, главный раздел с файлами вполне себе живой, раздел /boot почему-то уничтожился (по факту этот раздел нужен только на старте загрузки, его довольно просто восстановить), форматирую заново /boot, восстанавливаю все файлы в нем, устанавливаю GRUB в загрузочную область, все выглядит вполне себе живым. Думаю, что мой поезд встал на рельсы удачи.

Отправляю запрос на замену второго жесткого диска. Hetzner умудряется поменять его за 2 минуты оО. Добавляю новый хард в массив, запускаю синхронизацию. Синхронизация успешно завершается. Устанавливаю GRUB в загрузочную область второго диска, проверяю, что все новые разделы монтируются куда нужно, настройки mdadm правильные, выглядит вроде бы все как надо.

Перезагружаюсь... и тишина *_*
Linux конечно дает восстановить себя из любой ситуации (GRUB не смог загрузку инициировать - вот тебе консоль GRUBа, дальше что-то не грузится - вот тебе root-консоль), но это можно сделать находясь рядом с сервером, а он далеко. Перезагружаюсь опять Rescue System, опять проверяю все, что могу, выглядит все ок и должно загружаться.
Думаю, ну вот, теперь приедтся просить KVM-over-IP и платить за нее. Если просто, то KVM-over-IP это штука, которая транслирует тебе видео с экрана удаленного сервера и транслирует обратно все клики мышкой и кнопки на клаве).

Иду смотреть цену, оказалось, что KVM теперь они могут дать бесплатно на 3 часа (но не гарантируют, что это будут именно 3 часа, могут раньше забрать). Запрашиваю KVM, где-то через час мне его выдают (время уже 00:30). Подключаюсь, выглядит так, что mdadm не может примонтировать разделы + еще небольшая ошибка с swap разделом. И тут меня ждет нечто. KVM-консоль предлагает ввести root-пароль для восстановления. Ввожу пароль - не подходит. Ввожу - не подходит. Думаю, что забыть я его вроде не мог, перезагружаюсь в Rescue System, меняю root пароль, перзагружаюсь, вводжу пароль - не подходит. Закрадывается мысль, что KVM не принимает какие-то командные клавиши или символы. Устанавливаю пароль попроще - он начинает подходить. Узнаю, что в KVM печатается вместо y - z, а вместо z - y. Символы типа | и > вообще неизвестно как напечатать. В общем, не сразу, но получилось понять, почему загрузка не шла и в 01:21 уже все работало *_*

Такие дела :)
Еще у нас есть сейчас проблема с ачивками. Это сторонняя проблема. Сегодня-завтра я ее исправлю.
116 0
Поделиться
Автор
Полка Профиль Фигурки Аниме Блог Фото Активность Отзывы Магазин
Отправить ПМ