Skip to main content

Контейнеры 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 со всех нод, логи всех нод ПринтМенеджера, версии М и ПринтМенеджер.


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

                Как обновить Printum Как работает отказоустойчивый ПринтМенеджер Резервное копирование и восстановление данных