Контейнеры 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:
Контейнеры 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 хранилище работает корректно на каждом сервере с ПринтМенеджерами:
dfcd -h | grep /opt/printmanager
mountsudo |docker-compose grepexec nfsapp touch /opt/app/public/media/test.txt
Норма:
connectioncdrefused/opt/printmanager/ sudo docker-compose exec app rm /opt/app/public/media/test.txt.
Шаг 3. Проверить логи printmanager-app:
cd /opt/printmanager/
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:printmanager-redis и printmanager-redis-sentinel:
cd /opt/printmanager/
sudo docker-compose logs printmanager-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 printmanager-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
Если 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,ПринтМенеджера, версии М и ПринтМенеджер.