Отказоустойчивость узла: железо и сервисы [364.1]

Рейтинг: 74.1% · 11 голосов
Специализация LPIC-3 306 (v3.0): кластеры HA (Pacemaker/Corosync), балансировка (LVS, keepalived, HAProxy), DRBD, кластерные и распределённые ФС (GFS2, OCFS2, GlusterFS, Ceph), iSCSI/multipath, advanced RAID/LVM.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Отказоустойчивость узла: железо и сервисы [364.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (14)
  1. Введение в LPIC-3 306: высокая доступность и хранилища
  2. Концепции и теория высокой доступности [361.1]
  3. Кластеры с балансировкой нагрузки [361.2]
  4. Failover-кластеры: Corosync и Pacemaker [361.3, часть 1]
  5. Pacemaker: ресурсы, ограничения, fencing [361.3, часть 2]
  6. DRBD [362.1]
  7. Доступ к кластерному хранилищу [362.2]
  8. Кластерные файловые системы [362.3]
  9. Распределённое хранилище GlusterFS [363.1]
  10. Ceph: архитектура [363.2, часть 1]
  11. Ceph: использование и эксплуатация [363.2, часть 2]
  12. Отказоустойчивость узла: железо и сервисы [364.1] (вы здесь)
  13. Продвинутый RAID
  14. Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]
Урок 11. Отказоустойчивость узла: железо и сервисы [364.1]

Кластер высокой доступности живёт на отдельных узлах, и кластер не спасёт, если узлы тихо деградируют до момента, когда отказывают сразу несколько. Задача администратора - поймать деградацию на уровне одного узла раньше, чем она превратится в инцидент: предсказать смерть диска по SMART, корректно пережить пропадание питания через UPS, поднять упавший демон без ручного вмешательства и заложить аппаратное резервирование (ECC-память, два блока питания). В этом уроке разбираем smartd, NUT и apcupsd, monit и принципы раннего обнаружения деградации.

Изображение

Как это работает

SMART - это набор счётчиков внутри самого накопителя (HDD, SATA SSD, NVMe). Диск сам ведёт статистику по переназначенным секторам, ошибкам чтения, температуре, износу ячеек. Демон smartd периодически опрашивает эти атрибуты и сравнивает с порогами. Хитрость в том, что у каждого атрибута есть текущее нормированное значение (VALUE), порог (THRESH) и худшее зафиксированное (WORST). Когда VALUE опускается до THRESH - диск официально считается предотказным. Но опытный инженер смотрит на RAW-значения сырых счётчиков: рост Reallocated_Sector_Ct или Current_Pending_Sector это сигнал заменить диск, даже если формальный порог ещё не пробит.

UPS защищает от пропадания питания, но сам по себе он только держит нагрузку несколько минут. Смысл мониторинга - поймать переход на батарею, дождаться разумного порога заряда и инициировать корректное выключение, пока питание ещё есть. NUT (Network UPS Tools) - это клиент-серверная архитектура: драйвер (драйвер общается с железом по USB/serial/SNMP), демон upsd отдаёт состояние по сети, а upsmon на каждом узле принимает решение о shutdown. Это позволяет одному UPS обслуживать несколько серверов. apcupsd - более простой монолитный демон, исторически заточенный под APC, но умеющий и другие модели.

monit следит за процессами и ресурсами по принципу проверка - условие - действие. Он опрашивает PID-файл или процесс по имени, и если демон упал, monit запускает его заново. Важно понимать разделение зон ответственности: systemd с Restart=on-failure перезапускает то, что он сам запустил, а monit полезен для проверок уровня приложения (отвечает ли HTTP-эндпоинт, не растёт ли память, есть ли файл сокета) и для алертов.

ECC-память исправляет одиночные битовые ошибки на лету и сообщает о них через EDAC. Двойная ошибка не исправляется, но детектируется. Раннее обнаружение тут - это чтение счётчиков корректируемых ошибок: их рост на конкретной плашке предсказывает её скорый отказ.

Команды и примеры

Установка smartmontools и базовый опрос:

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
apt install smartmontools
# RHEL 10 / Fedora 41+
dnf install smartmontools

smartctl -i /dev/sda          # модель, серийник, поддержка SMART
smartctl -H /dev/sda          # короткий вердикт PASSED/FAILED
smartctl -A /dev/sda          # таблица атрибутов с VALUE/THRESH/RAW
smartctl -a /dev/nvme0        # для NVMe атрибуты в своём формате
smartctl -t long /dev/sda     # запустить длинный самотест
smartctl -l selftest /dev/sda # журнал самотестов
Настройка демона smartd. Файл /etc/smartd.conf одинаков по смыслу в обоих семействах:

Код: Выделить всё

# опрашивать все диски, слать тест-письмо при старте, мейл на алерт
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -m root@localhost -M exec /usr/share/smartmontools/smartd-runner
Здесь -s задаёт расписание самотестов (короткий каждый день в 02:00, длинный по субботам в 03:00), -n standby не будит спящий диск, -m получатель алерта, -M exec свой обработчик. Запуск:

Код: Выделить всё

systemctl enable --now smartd
systemctl status smartd
NUT в роли локального мастера для USB-UPS. Конфиги в /etc/nut/ (Debian) или /etc/ups/ (часть сборок RHEL):

Код: Выделить всё

# /etc/nut/ups.conf
[myups]
  driver = usbhid-ups
  port = auto
  desc = "APC BackUPS"

# /etc/nut/upsd.users
[monuser]
  password = secret
  upsmon master

# /etc/nut/upsmon.conf
MONITOR myups@localhost 1 monuser secret master
SHUTDOWNCMD "/sbin/shutdown -h +0"

# /etc/nut/nut.conf
MODE=standalone
Запуск стека и проверка:

Код: Выделить всё

systemctl enable --now nut-server nut-monitor
upsc myups@localhost          # дамп всех переменных
upsc myups battery.charge     # заряд в процентах
Альтернатива - apcupsd:

Код: Выделить всё

apt install apcupsd   # или dnf install apcupsd
# /etc/apcupsd/apcupsd.conf
UPSCABLE usb
UPSTYPE usb
DEVICE
BATTERYLEVEL 15      # ниже 15% - выключение
MINUTES 5            # или меньше 5 минут автономии

systemctl enable --now apcupsd
apcaccess status     # состояние, заряд, нагрузка
monit для перезапуска сервиса и контроля ресурсов:

Код: Выделить всё

apt install monit    # или dnf install monit
# /etc/monit/conf.d/nginx (Debian) или /etc/monit.d/nginx (RHEL)
check process nginx with pidfile /run/nginx.pid
  start program = "/usr/bin/systemctl start nginx"
  stop program  = "/usr/bin/systemctl stop nginx"
  if failed host 127.0.0.1 port 80 protocol http
    then restart
  if 5 restarts within 5 cycles then alert

systemctl enable --now monit
monit status         # текущая картина по всем проверкам
Проверка ECC через EDAC:

Код: Выделить всё

dnf install edac-utils    # apt install edac-utils
edac-util -v              # сводка корректируемых/некорректируемых ошибок
grep . /sys/devices/system/edac/mc/mc*/ce_count   # счётчики по контроллерам
dmesg | grep -i edac
Частые грабли
  • Вердикт smartctl -H говорит PASSED, а диск уже сыплется: формальный порог пробивается поздно, ориентируйтесь на рост RAW Reallocated_Sector_Ct, Current_Pending_Sector, Uncorrectable.
  • Для дисков за RAID-контроллером smartctl не видит SMART напрямую - нужен ключ -d, например -d megaraid,0 или -d cciss,0.
  • NVMe и SATA имеют разные наборы атрибутов: для NVMe смотрите Percentage Used и Media Errors, привычные SATA-атрибуты там отсутствуют.
  • UPS подключён по USB, но после перезагрузки драйвер не стартует - частая причина в правах на /dev и в том, что MODE в nut.conf остался netserver вместо standalone.
  • monit и systemd дерутся за один сервис: оба пытаются перезапускать, получается флаппинг. Решайте, кто хозяин процесса, и не дублируйте Restart= с check process.
  • Письма от smartd и monit некуда слать: не настроен локальный MTA или smarthost, алерты молча теряются.
  • ECC-ошибки растут на одной плашке, но это списывают на софт - корректируемые ошибки это предвестник отказа модуля, меняйте планку.
Мини-лаба
  • Установите smartmontools, выполните smartctl -a по своему системному диску и найдите атрибуты Reallocated_Sector_Ct и Current_Pending_Sector, запишите их RAW.
  • Запустите короткий самотест smartctl -t short, через пару минут посмотрите результат через smartctl -l selftest.
  • Настройте /etc/smartd.conf с DEVICESCAN и расписанием самотестов, включите smartd, убедитесь по journalctl -u smartd что он подхватил диски.
  • Если есть UPS - поднимите NUT в режиме standalone и снимите upsc battery.charge; если нет железа, поставьте dummy-ups драйвер и проверьте, что upsc отдаёт переменные.
  • Установите monit, опишите check process для любого демона (например sshd) с проверкой порта, остановите демон вручную и убедитесь, что monit его поднял.
  • Прочитайте edac-util -v и счётчики ce_count, зафиксируйте текущие значения как базовую линию.
Контрольные вопросы
  • Чем отличается нормированное VALUE атрибута SMART от его RAW-значения и почему для прогноза отказа важнее второе?
  • Какие три компонента образуют стек NUT и за что отвечает каждый из них?
  • Как один UPS защищает несколько серверов и какой узел принимает решение о выключении?
  • В каком случае разумно использовать monit, а в каком достаточно systemd с Restart=on-failure?
  • Что детектирует и что исправляет ECC-память, и какой счётчик предсказывает отказ модуля?
  • Почему smartctl -H PASSED не является достаточным основанием считать диск исправным?
👍2 ❤️5 🔥2 😄 🤔
Аватара пользователя
bun23
Сообщения: 1
Зарегистрирован: 02 июн 2026, 18:34

Re: Отказоустойчивость узла: железо и сервисы [364.1]

Сообщение bun23 »

А если diск за аппаратным RAID и smartctl показывает Unknown USB bridge - это всегда про -d или бывает что контроллер реально не пробрасывает SMART?
👍1 ❤️1 🔥 😄 🤔2
Аватара пользователя
alex2025
Сообщения: 1
Зарегистрирован: 29 май 2026, 18:42

Re: Отказоустойчивость узла: железо и сервисы [364.1]

Сообщение alex2025 »

По monit vs systemd так и не понял до конца: у меня nginx уже под systemd с Restart=on-failure, тогда monit вешать только на http-проверку порта чтобы не дрались за рестарт?
👍1 ❤️ 🔥1 😄 🤔
Ответить
← Предыдущая глава
Ceph: использование и эксплуатация [363.2, часть 2]
Следующая глава →
Продвинутый RAID

Все главы курса «LPIC-3 306: высокая доступность и хранилища»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-3 306: высокая доступность и хранилища»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя