Подтвердить что ты не робот

В чем преимущество использования супервизора над монином

У нас есть настраиваемая настройка, в которой работает несколько демонов (веб-приложений + фоновые задачи). Я рассматриваю использование службы, которая помогает нам контролировать эти демоны и перезапускать их, если их потребление ресурсов превышает уровень.

Я по достоинству оценю, когда лучше друг друга. Поскольку я понимаю, что monit закручивает новый процесс, а supervisord запускает подпроцесс. Каковы плюсы и минусы этого подхода?

Я также буду использовать выскочку для мониторинга monit или supervisord. Развертывание webapp будет выполнено с использованием capistrano.

Спасибо

4b9b3361

Ответ 1

Если вы хотите дополнительно контролировать ресурсы, вы должны согласиться на monit. Помимо проверки того, работает ли процесс (доступность), monit также может выполнять некоторые проверки использования ресурсов (производительность, использование емкости), уровни нагрузки и даже основные проверки безопасности (md5sum файла bianry, файл конфигурации и т.д.). Он имеет конфигурацию на основе правил, которую довольно легко понять. Также есть много готовых к использованию конфигураций: http://mmonit.com/wiki/Monit/ConfigurationExamples

Monit требует процессов для создания PID файлов, что может быть недостатком, потому что, если процесс не создает файл pid, вам нужно создать некоторые обертки. См. http://mmonit.com/wiki/Monit/FAQ#pidfile

Supervisord, с другой стороны, более связан с процессом, он порождает его сам по себе. Он не может делать какие-либо проверки на основе ресурсов как monit. Он имеет приятный CLI servicectl и веб-интерфейс.

Ответ 2

Я не использовал monit, но есть некоторые существенные недостатки с supervisord.

  • Программы должны работать на переднем плане

Это означает, что вы не можете просто запустить /etc/init.d/apache2 start. В большинстве случаев вы можете просто написать один вкладыш, например. "source/etc/apache2/envvars && exec/usr/sbin/apache2 -DFOREGROUND", но иногда вам нужна ваша собственная оболочка script. Проблема с сценариями оболочки заключается в том, что вы получаете два процесса - родительский и дочерний. См. Следующий недостаток...

  1. supervisord не управляет дочерними процессами

Если ваша программа запускает дочерний процесс, супервизор не обнаружит этого. Если родительский процесс умирает (или перезапускается с помощью supervisorctl), дочерние процессы продолжают работать, но будут "приняты" процессом init и будут работать. Это может помешать будущим вызовам вашей программы работать или потреблять дополнительные ресурсы. Последние параметры конфигурации stopasgroup и killasgroup должны исправлять это, но не работали для меня.

  1. supervisord не имеет управления зависимостями - см. # 122

Недавно я настроил squid с qlproxy. qlproxyd нужно начинать сначала, иначе кальмар может потерпеть неудачу. Несмотря на то, что обе программы управлялись с помощью супервизора, не было никакого способа обеспечить это. Мне нужно было написать стартовый script для кальмара, который заставил его ждать процесса qlproxyd. Добавление начала script привело к проблеме осиротевшего процесса, описанной в ошибке 2

  1. supervisord не позволяет вам контролировать задержку между startretries

Иногда, когда процесс не запускается (или выходит из строя), он не может получить доступ к другому ресурсу, возможно, из-за сетевого колебания. Супервизор может быть установлен для перезапуска процесса несколько раз. Между перезапусками процесс переходит в состояние "BACKOFF", но нет документации или контроля продолжительности отсрочки.

В своем оборонном руководителе действительно удовлетворяют наши потребности в 80% случаев. Конфигурация имеет смысл и документация очень хорошая.