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