Контейнеры Unhealthy после обновления в конфигурации с балансировщиком
Симптомы
После обновления ПринтМенеджер в схеме с балансировщиком:
printmanager-app запускаются со статусом unhealthy.
Нода недоступна через HAProxy (статус DOWN в панели HAProxy).
Печать работает частично или не работает совсем.
Причины
Три наиболее частые:
printmanager_media недоступен, контейнер не может запуститься.
Redis потерял master — после одновременного перезапуска нод Redis sentinel не успел выбрать нового мастера.
Ошибка прав в printmanager-ftpd — контейнер завершился с ошибкой при записи PID-файла.
Диагностика
Шаг 1. Проверить статус всех контейнеров на проблемной ноде:
cd /opt/printmanager
sudo docker-compose ps
Зафиксировать какие контейнеры в статусе unhealthy или Exit.
Шаг 2. Проверить монтирование NFS:
Проверьте, что NFS хранилище работает корректно на каждом сервере с ПринтМенеджерами:
cd /opt/printmanager
sudo docker-compose exec app touch /opt/app/public/media/test.txt
cd /opt/printmanager/
sudo docker-compose exec app rm /opt/app/public/media/test.txt
Шаг 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 со всех нод, логи всех нод ПринтМенеджера, версии М и ПринтМенеджер.