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 related_errors: "connection refused"

    Контейнеры 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:

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

      Создайте файл test.txt таким образом:
      dfcd -h | grep /opt/printmanager
      mountsudo |docker-compose grepexec nfsapp touch /opt/app/public/media/test.txt
      

      Норма:

      NFS-томПроверьте, смонтированчто ифайл отображаетсяпоявился в выводе.NFS Ошибка:хранилище. томУдалите отсутствуетэтот илифайл таким образом
      connectioncd refused/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 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,ПринтМенеджера, версии М и ПринтМенеджер.


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