Skip to main content

Контейнеры Unhealthy после обновления в конфигурации с балансировщиком


title: Контейнеры Unhealthy после обновления в конфигурации с балансировщиком slug: ts-konteinery-unhealthy-posle-obnovleniya tags: [обновление, unhealthy, балансировщик, HAProxy, NFS, Redis, docker] domain: Troubleshooting type: Troubleshooting audience: partner-engineer product_versions: "4.x" status: ready related_components: [ПринтМенеджер, Балансировщик, NFS, Redis] related_pages:

  • kak-obnovit-printum
  • kak-rabotaet-otkazoustoychivyy-printmanager
  • kak-rabotaet-filialnaya-arhitektura-printum

Контейнеры Unhealthy после обновления в конфигурации с балансировщиком

Симптомы

После обновления ПМ в схеме с балансировщиком:

  • Один или несколько контейнеров printmanager-app запускаются со статусом unhealthy.
  • Нода недоступна через HAProxy (статус DOWN в панели HAProxy).
  • Печать работает частично или не работает совсем.

Причина

Три наиболее частые:

  1. NFS не смонтирован — volume printmanager_media недоступен, контейнер не может запуститься.
  2. Redis потерял master — после одновременного перезапуска нод Redis sentinel не успел выбрать нового мастера.
  3. Ошибка прав в printmanager-ftpd — контейнер завершился с ошибкой при записи PID-файла.

Диагностика

Шаг 1. Проверить статус всех контейнеров на проблемной ноде:

cd /opt/printmanager
sudo docker-compose ps

Зафиксировать какие контейнеры в статусе unhealthy или Exit.

Шаг 2. Проверить монтирование NFS:

df -h | grep printmanager
mount | grep nfs

Норма: NFS-том смонтирован и отображается в выводе. Ошибка: том отсутствует или connection refused.

Шаг 3. Проверить логи printmanager-app:

sudo docker-compose logs printmanager-app --tail=100

Признак NFS-проблемы:

failed to mount local volume: connection refused, port=2049, addr=127.0.0.1

Шаг 4. Проверить Redis:

sudo docker-compose logs printmanager-redis --tail=50

Признак проблемы Redis:

Connection with master lost
MASTER <-> REPLICA sync started
+sdown master
+tilt mode entered

Шаг 5. Проверить printmanager-ftpd:

sudo docker-compose logs printmanager-ftpd --tail=50

Признак проблемы ftpd:

Permission denied при записи PID

Решение

NFS не смонтирован

Проверить, запущен ли stunnel (если NFS проброшен через stunnel):

systemctl status stunnel

Если stunnel не запущен:

systemctl start stunnel

После этого перезапустить ПМ:

sudo docker-compose down && sudo docker-compose up -d

Если stunnel отсутствует после восстановления из бэкапа — см. restore.sh не восстанавливает stunnel (TODO).

Redis не выбрал мастера

Подождать 1–2 минуты — sentinel должен автоматически выбрать нового мастера. Если не восстановился:

sudo docker-compose restart printmanager-redis printmanager-redis-sentinel

Проверить логи через 1 минуту:

sudo docker-compose logs printmanager-redis-sentinel --tail=30

Норма: +elected-leader, +promoted-slave.

Ошибка прав в printmanager-ftpd

sudo docker-compose restart printmanager-ftpd

Если ошибка повторяется — передать логи в ТП.


Как проверить результат

sudo docker-compose ps

Все контейнеры в статусе Up. В панели HAProxy нода отображается как UP. Тестовое задание успешно печатается.


Когда эскалировать

  • Причина не определяется по логам.
  • NFS недоступен по сетевым причинам (не связано с stunnel).
  • Redis не восстанавливается после перезапуска.
  • Проблема воспроизводится на всех нодах одновременно.

Приложить к заявке: вывод docker-compose ps со всех нод, логи printmanager-app, printmanager-redis, printmanager-ftpd, версии М и ПМ.


Связанные страницы