X

Установка сервера очередей Gearman в Ubuntu

Для одного из проектов мне понадобился сервер очередей. Выбор пал на GEARMAN. О его установке сегодня и расскажу..

Устанавливаем сервер gearmand такой командой

sudo apt-get install gearman-job-server

После установки все готово к использованию, поэтому сразу его и запускаем

sudo gearman -d

Теперь надо установить расширения для PHP, выполняем

sudo apt-get install php-gearman

В моем случае я получил такую ошибку

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php-gearman : Depends: libgearman8 (>= 1.1.13) but it is not installable
E: Unable to correct problems, you have held broken packages.

Решением стало подключение репозитория ondrej/pkg-gearman:

sudo add-apt-repository ppa:ondrej/pkg-gearman
sudo apt-get update

Теперь снова пробуем установить расширение

sudo apt-get install php-gearman

На этот раз все прошло успешно. Теперь перезапускаем apache:

sudo systemctl restart apache2

Теперь можно создать php скрипт и проверить заработал ли Gearman:

<?php

echo 'GEARMAN VER: '.print gearman_version().PHP_EOL;

В моем случае, все прошло успешно и в ответ от скрипта я получил такую строку:

GEARMAN VER: 1.1.17

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

sudo apt-get install gearman-tools

Теперь можно переходить к написанию кода и использовании сервера очередей Gearman, об этом и поговорим в следующей статье..

Параметры сервера gearmand:

GEARMAND HELP

General options

-b [ --backlog ] arg (=32) Number of backlog connections for listen.
--check-args Проверить аргументы командной строки и конфигурационного файла
-d [ --daemon ] Запуск в фоновом режиме
-f [ --file-descriptors ] arg Кол-во файловых дискрипторов для процесса (кол-во соединений будет немного ниже). По-умолчанию: максимум доступный пользователю
-h [ --help ] Помощь
-j [ --job-retries ] arg (=0) Количество попыток выполнить задание перед тем как сервер удалит его. Полезно, чтобы "плохая" задача не "убила" все доступные воркеры. По-умолчанию: нет лимита.
-l [ --log-file ] arg Лог файл для записи ошибок и другой информации. Включение этой опции включает первый уровень логирования.
-L [ --listen ] arg Адрес сервера, на котором он будет работать. По-умолчанию: INADDR_ANY (все ip).
-p [ --port ] arg (=4730) Порт на котором будет работать. По-умолчанию: 4730.
-P [ --pid-file ] arg Путь к PID файлу (файлу содержащему номер процесса сервера).
-r [ --protocol ] arg Протокол сервера.
-R [ --round-robin ] Assign work in round-robin order per worker connection. The default is to assign work in the order of functions added by the worker.
-q [ --queue-type ] arg Тип очереди (например, mysql).
-t [ --threads ] arg (=4) Количество потоков ввода/вывода. По умолчанию: 4.
-u [ --user ] arg Работать от пользователя (переключится на указанного пользователя, после старта).
-v [ --verbose ] arg (=v) Увеличить уровень логирования
-V [ --version ] Показать версию
-w [ --worker-wakeup ] arg (=0) Запускаемое количество воркеров (workers to wakeup) для каждой получаемой задачи. По умолчанию: запускаются все воркеры.

HTTP:

--http-port arg (=8080) Порт на котором будет работать. По-умолчанию: 8080.

Sqlite

--libsqlite3-db arg Файл базы данных.
--libsqlite3-table arg (=gearman_queue) Таблица базы данных.

Memcached(libmemcached)

--libmemcached-servers arg Список Memcached серверов.

Drizzle/MySQL(libdrizzle)

-host arg Хост подключения.
-port arg Порт подключения. (По-умолчанию: порт Drizzle)
-uds arg Сокет подключения (в случае подключения через сокет).
-user arg Имя пользователя для подключения.
-password arg Пароль для подключения.
-db arg Имя базы данных.
-table arg Название таблицы базы данных.
-mysql arg Использовать MySQL протокол.

Postgres

--libpq-conninfo arg PostgreSQL строка подключения.
--libpq-table arg (=queue) Название таблицы базы данных.

Tokyo Cabinet

--libtokyocabinet-file arg Имя файла базы данных. [смотри правила именования тут: man tcadb, tcadbopen()]
--libtokyocabinet-optimize Оптимизировать базу во время открытия. По-умолчанию: true

Хранение очереди в MySQL

Структура базы для хранения очереди в MySQL

CREATE TABLE gearman_queue(
`unique_key` VARCHAR(64) PRIMARY KEY,
`function_name` VARCHAR(255),
`priority` INT,
`data` LONGBLOB
);

Пример запуска Gearman для использования очереди с MySQL, база на том же хосте

gearmand -q libdrizzle --libdrizzle-db=some_db --libdrizzle-table=gearman_queue

база на другом хосте

gearmand -q libdrizzle --libdrizzle-host=10.0.0.1 --libdrizzle-user=gearman \
                       --libdrizzle-password=secret --libdrizzle-db=some_db \
                       --libdrizzle-table=gearman_queue --libdrizzle-mysql

Опции gearadmin

GEARADMIN HELP

--help Помощь.
-h [ --host ] arg (=localhost)i Хост подключения, по-умолчанию: localhost
-p [ --port ] arg (=4730) Порт подключения, по-умолчанию: 4730
--create-function Создать функцию.
--drop-function Удалить функцию с сервера.
--server-version Версия сервера.
--server-verbose Уровень логирования сервера.
--status Статус сервера (кол-во заданий в очереди, кол-во выполняемых заданий, кол-во воркеров).
--workers Воркеры сервера.
--shutdown Завершить работу сервера.

На этом на сегодня - всё, до новых встреч!

Категории: Linux PHP