Назад | Перейти на главную страницу

как можно настроить uwsgi в императорском режиме с помощью cgi-plugin + heartbeat в сочетании с nginx

После перехода с fcgiwrap на uWSGI (который также дает множество других преимуществ, которые я планирую использовать) в моем списке ToDo в течение некоторого времени мне наконец удалось настроить тестовую систему debian-wheezy с uWSGI v2.0 и nginx v1.4.4.

На первом этапе я хотел бы запустить .cgi-скрипты через cgi-плагин uWSGI надежно и с минимальными накладными расходами (ниже довольно слабое оборудование), имея возможность легко улучшить мою конфигурацию, чтобы также развертывать приложения с помощью таких фреймворков, как bottle / flask / django в качестве второго шага.

Поэтому я решил использовать Императорский режим uWSGI, который в настоящее время настроен для управления только одним вассалом, который настроен для запуска uWSGI-cgi-plugin на 2 рабочих с 2 потоками каждый.

После проверки различных функций настройка более или менее работает нормально с двумя странными поведениями, которые, как мне кажется, почему-то неправильно:

Причина использования параметра heartbeat-option заключается в том, что я хотел бы обеспечить доступность моих cgis / приложений, максимально используя встроенные механизмы uWSGI.

Любые намеки на то, что я могу неправильно понять или сделать неправильно? Я не вижу никакой очевидной причины, по которой нельзя использовать опцию Heartbeat в сочетании с cgi-модулем в моей конфигурации, но был бы благодарен за любые дополнительные сведения! Я предполагаю, что nginx не имеет ничего общего с упомянутыми проблемами, плюс я также дважды проверил файл и каталог-perms ... uWSGI запускается через init.d-скрипт, но поведение такое же при запуске вручную.

Мой конфигурация как следует:

журналы (когда включена опция Heartbeat):

uWSGI doc для вассального варианта heartbeat:

    Argument: number

    (Vassal option) Announce vassal health to the emperor every N seconds.

uWSGI doc для варианта императора emperor-required-heartbeat:

    Argument: number Default: 30

    Set the Emperor tolerance about heartbeats.

    When a vassal asks for ‘heartbeat mode’ the emperor will 
    also expect a ‘heartbeat’ at least every <secs> seconds.

Используйте 2.0.1 из github, у него лучший код сердцебиения. Ваша проблема - небольшая разница во времени между толерантностью к императору (30 секунд) и частотой сердечных сокращений (25). Для ошибки в версии 2.0 таймаут рабочего сбрасывался при каждом запросе. В дополнение к этому пульсу 2.0.1 запускается, как только создается первый рабочий, что приводит к лучшим результатам (сломанные приложения обнаруживаются немедленно). Что касается милосердия к перезагрузке рабочих, правильный вариант - --worker-reload-mercy (--reload-mercy для нерабочих процессов)