Что такое 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»/>
<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/
Добавить комментарий