Укращение Демонов или инфраструктура для Gearman

от автора

image

Что такое Gearman можно почитать: Здесь или Здесь. Этот инструмет по истине находка для решения целого ряда задач. Но при его эксплуатации на боевых серверах существует целый ряд проблем:
— Как автоматически запускать демонов и следить за их здоровьем?
— Куда демоны будут писать сообщения, предназначенные для вывода на экран?
— А где следить, чтобы демоны не отвлекались на грудастых гаргулий, а работали. словом следить за нагрузкой.
Для этого есть довольно удобные инструменты:


Итак, что имеем в анамнезе:
У нас имеется запущенный и настроенный Gearman-сервер, воркеры и клиенты, которые переодически что-то хотят от воркеров.

Supervisor

Мы запустили Gearman сервер, теперь же надо запустить n-ое количество различных воркеров.
— Запускать вручную и отвязывать от консоли?
— а как узнать что кто-то упал? и идет ли работа?
— ах, не отвязывать от консоли. Нет, попахивает мазохизмом.

Для решения этих проблем можно использовать Supervisor.

Как говорится в рководстве: Supervisor — клиент-серверная система, которая помогает пользователям мониторить и управлять количеством процессов в Unix-like операционной системе.
С его помощью мы можем демонизировать всех воркеров в нужном количестве.
Необходимо для каждого воркера написать отдельный конфиг-файл и поместить его в /etc/supervisor/conf.d/
Конфиг-файл имеет довольно простую структуру:

[program:<worker_name>] command=<execution_file> process_name=%(process_num)s                           stdout_logfile=/var/log/<worker_name>.log stderr_logfile=/var/log/<worker_name>.log redirect_stderr=true autostart=true                                          autorestart=true                                        startsecs=5                                             numprocs=1    

[program:<worker_name>] — заголовок секции. Нижеследующие параметры будут относится только к этому воркеру(демону)
command — команда на запуск файла. чаще всего путь к испольняемому файлу.
process_name — имя каждого инстанса воркера. Здесь есть тонкость — В мануале указано, что этот параметр не обязательный. Но у меня были проблемы с запуском нескольких инстансов воркера, если его не указывать. Дело в том, что имена процессов должны отличаться. Здесь помимо названия воркера указываем его порядковый номер.
stdout_logfile — говорит само за себя. куда перенаправляем стандартую консаоль вывода.
stderr_logfile — то же самое, только для ошибок. Рекомендую указывать эти 2 параметра. Всегда приятней разбираться в логах, когда что-то упадет, чем тыкать вслепую.
autostart — как и следовало ожидать. запускаем воркеров при запуске супервизорда. Как правило при старте системы.
autorestart — уже за один этот параметр стоит использовать супервизор. Рестартует вашего воркера, если тот при выполнении одного из заданий упал с Exception’ом.
startsecs — сколько времени нужно ждать воркера, чтобы он запустился (не обязательный параметр)
numprocs — это второй параметр, за который можно любить супервизора — количество инстансов воркеров.

Логирование stdout

Контроль и управление демонами

Есть 2 возможности контролировать демоны, запущенные супервизором это консольная утилита supervisorCtl и веб интерфейс.
SupervisorCtl при запуске отобажает информацию о статусе демонов:

Gearman_AddressCodeFinder:0      RUNNING    pid 2060, uptime 10:15:01 Gearman_MessageSender:0          RUNNING    pid 2064, uptime 10:15:01 Gearman_MessageSender:1          RUNNING    pid 2063, uptime 10:15:01 Gearman_ReportCreator:0          RUNNING    pid 2055, uptime 10:15:01 Gearman_WorkplanNotifier:0       RUNNING    pid 2061, uptime 10:15:01 Universal:0                      RUNNING    pid 2059, uptime 10:15:01 Universal:1                      RUNNING    pid 2058, uptime 10:15:01 

Здесь все понятно и без объяснений. Можно понять кто работает, кто упал.
С помощью этой утилиты из консоли можно останавливать\запускать демонов, переконфигурировать супервизорд. Довольно интересна команда fg, позволяющая подключится к процессу в фоновом режиме (Он становится привязан к вашей консоли). Довольно удобная вещь для отладки на боевой системе 🙂

Управление демонами из веб-интерфейса

Помимо консольного интерфейса Супервизор имеет веб-интерфейс:
<img src="" alt=«image»/>

Попасть в него как правио можно по Url: 127.0.0.1:9211/ В вашем случае порт может отличаться. настройки можно найти в секции

[inet_http_server] port = 127.0.0.1:9211  <h2>Gearman tools</h2> Мониторинг демонов это хорошо. Но как узнать сколько задач на сервере очередей, а сколько и каких исполняются в данный момент. Есть как минимум 2 способа: 1) Подключение по telnet к серверу очередей и запрос состояния: <source> telnet localhost 4730 status //запрашиваем информацию о состоянии очередей address:find    0       0       1 workplan:sendnotify     0       0       1 report:createreport     0       0       1 message:send    0       0       2 universal:universal     0       0       2 

Но ифнормация довольно скудна. и вспомните ли вы через 2 месяца что за цифра в 3ей колонке? Я — точно нет.
2) Есть более красивое решение — утилита gearman_top
Она показывает ту же информацию, но в более удобном виде, и обновление данных происходит в реальном времени.
Устанавивается довольно просто:

apt-get install gearman_tools 

Запускается командой:

gearman_top 

Выводит информацию:

Queue Name           | Woker Available | Jobs Waiting | Jobs Running ----------------------------------------------------------------------  address:find        |               1  |           0  |           0  message:send        |               2  |           0  |           0  report:createreport |               1  |           0  |           0  universal:universal |               2  |           0  |           0  workplan:sendnotify |               1  |           0  |           0 ---------------------------------------------------------------------- 

Текст вывода на экран говорит сам за себя: Какие очереди присутствуют на сервере, сколько воркеров доступно в данный момент, сколько задач выполняется и сколько ждет выполнения.

ссылка на оригинал статьи http://habrahabr.ru/post/162039/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *