Linux Labs

Практики SRE: SLO, инциденты, отказоустойчивость / Итоговая лаба

Смена дежурного

сложная ~50 мин
Не запущена Запускается обычно ~20 с
Сообщить о проблеме

Ситуация

Ты принимаешь смену дежурного. Сайт заказов shop.lab.test работает на двух машинах. Пользователи открывают его по имени shop.lab.test — это плавающий адрес (VIP), его держит keepalived: основная машина — node1, резервная — node2. На node1 — балансировщик nginx и Prometheus, который собирает метрики обеих машин. На node2 — два backend'а приложения (службы lab-shop@8081 и lab-shop@8082), PostgreSQL с базой shop и отдельный том /var/log/shop для журналов приложения.

Вечером прошлая смена вносила изменения на обе машины. Несколько минут назад пошли жалобы: заказов на сайте не видно. Прошлый дежурный успел передать ещё две вещи: на node2 кончается место, а правило алерта, которое должно было об этом предупредить, в Prometheus так и не появилось. Ранбук по сайту — /srv/runbooks/shop-down.md на node1.

node1 — твой терминал. Команды на node2 выполняй через SSH: ssh node2 'команда' или войди в оболочку — ssh node2, назад — exit. sudo на обеих машинах работает без пароля. Браузера к машинам нет: сайт и Prometheus смотри из терминала — curl, jq, promtool.

Задача

Сначала верни сайт пользователям, потом разбирайся с остальным.

  1. Сайт http://shop.lab.test/ по плавающему адресу отдаёт список заказов из базы — на каждый запрос. Адрес, как и задумано, держит node1, keepalived работает на обеих машинах.
  2. К базе shop подключается только приложение (роль shop). Это требование ввели вчера, и оно остаётся: роль report к базе shop не пускают.
  3. Том /var/log/shop на node2 занят меньше чем на 80 %, а журнал приложения растёт так же, как до вечерних изменений.
  4. Правило LogVolumeAlmostFull из /etc/prometheus/rules/ загружено в Prometheus.
  5. В ~/postmortem.md на node1 — разбор сбоя, три раздела: - ## Хронология — не меньше трёх событий, по строке на событие: ЧЧ:ММ:СС что произошло (время машины, UTC, как в журналах). Среди них — момент, когда сайт перестал отдавать заказы; - ## Причина — что именно сломалось: каждая неисправность, которую ты нашёл; - ## Действия — что сделать, чтобы это не повторилось, хотя бы один пункт.

«Проверить» само делает 20 запросов к сайту по плавающему адресу и по 20 — к каждому backend'у на node2 (смотрит, на сколько вырос журнал приложения). Проверка занимает около 10 секунд.

Ограничения

  • Всё должно пережить перезагрузку обеих машин: службы включены, настройки лежат в файлах, а работающие службы перечитали эти файлы после правки.
  • Плавающий адрес не переноси на node2 и keepalived не выключай: резервная машина нужна на случай настоящей аварии.
  • /var/log/shop остаётся отдельным томом из /etc/fstab.

Интернета в лабе нет — только сеть между node1 и node2, всё нужное установлено. Время в журналах машин — UTC.

Видна только тебе. Сохраняется при вводе.

Все заметки

Цели лабы

0 из 5
  • Сайт http://shop.lab.test/ по плавающему адресу отдаёт заказы из базы на каждый из 20 запросов; адрес держит node1, keepalived работает на обеих машинах — ещё не проверялась
  • Приложение подключается к базе shop, а роль report получает отказ — база только у приложения; pg_hba.conf без ошибок и перечитан PostgreSQL — ещё не проверялась
  • Том /var/log/shop на node2 занят меньше чем на 80 %, журнал приложения растёт как до изменений, backend'ы работают с настройками из /etc/default/shop — ещё не проверялась
  • Правило LogVolumeAlmostFull загружено в Prometheus из файла, последняя перечитка конфигурации прошла — ещё не проверялась
  • В ~/postmortem.md на node1 — «Хронология» со временем начала сбоя по журналам, «Причина» с каждой найденной поломкой и «Действия» — ещё не проверялась

Подсказки

открыто 0 из 3 · открываются по одной
Подсказка 1
Показать решение после 3 неудачных проверок

Выйти из лабы?

Машина проработает ещё 10 минут и удалится. Файлы пропадут, выполненные цели останутся.

Загрузка…