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

Симптомы

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


Причины

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

  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:

Проверьте, что NFS хранилище работает корректно на каждом сервере с ПринтМенеджерами:

  1. Создайте файл test.txt таким образом:
cd /opt/printmanager
sudo docker-compose exec app touch /opt/app/public/media/test.txt
  1. Проверьте, что файл появился в NFS хранилище.
  2. Удалите этот файл таким образом
cd /opt/printmanager/
sudo docker-compose exec app rm /opt/app/public/media/test.txt
  1. Убедитесь, что файл test.txt был удален из NFS хранилища.

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

cd /opt/printmanager/
sudo docker-compose logs app --tail=100

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

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

Шаг 4. Проверить printmanager-redis и printmanager-redis-sentinel:

cd /opt/printmanager/
sudo docker-compose logs redis redis-sentinel --tail=50

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

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

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

cd /opt/printmanager/
sudo docker-compose logs ftpd --tail=50

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

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

Решение

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

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

systemctl status stunnel

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

systemctl start stunnel

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

cd /opt/printmanager/
sudo docker-compose down && sudo docker-compose up -d

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

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

cd /opt/printmanager/
sudo docker-compose down && sudo docker-compose up -d

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

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

Норма:

# Sentinel ID is <id>
# +monitor master redis <ip-address> 6379 quorum 2
* +slave slave <ip-address>:6379 <ip-address> 6379 @ redis <ip-address> 6379
* +sentinel sentinel <id> <ip-address> 26379 @ redis <ip-address> 6379

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

cd /opt/printmanager/
sudo docker-compose down && sudo docker-compose up -d

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


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

sudo docker-compose ps

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


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

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


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


Revision #5
Created 2026-05-18 10:00:09 UTC by DD
Updated 2026-05-25 12:56:53 UTC by DD