GearmanManager: wygodne zarządzanie workerami

Niedawno zainteresowałem się usługą Gearman i jedynej rzeczy której mi brakowało to jakiegoś łatwego mechanizmu zarządzającego workerami. Ale jak zwykle okazało się że inni mieli już ten problem i odpowiednie narzędzie istnieje – mowa o GearmanManagerze.

Instalacja GearmanManagera

Aby zainstalować GeramanManagera na serwerze gdzie już mamy Gearmana trzeba wykonać kilka kroków (wcześniej powinniśmy też zainstalować moduł gearmana do php’a):

apt-get install git -y
git clone https://github.com/brianlmoon/GearmanManager.git
cd GearmanManager/install
chmod +x install.sh 
./install.sh

Sam proces instalacji nie jest zbyt skomplikowany:

Detecting linux distro as redhat- or debian-compatible
Where is your php executable? (usually /usr/bin)
/usr/bin
Which PHP library to use, pecl/gearman or PEAR::Net_Gearman?
1) pecl
2) pear
#? 1   
Installing to /usr/local/share/gearman-manager
Installing executable to /usr/local/bin/gearman-manager
Installing configs to /etc/gearman-manager
Installing init script to /etc/init.d/gearman-manager

Install ok!  Run /etc/init.d/gearman-manager to start and stop
Worker scripts can be installed in /etc/gearman-manager/workers, configuration can be edited in /etc/gearman-manager/config.ini

Mamy działającego GearmanManagera. Zalecam przyglądnięcie się plikowi config-advanced.ini bo jest tam kilka opcji, które warto dodatkowo ustawić.

Sprawdzenie działania Geramana i GearmanManagera

Przykład workera można znaleźć tutaj http://brian.moonspot.net/GearmanManager. Po pobraniu go i zapisaniu w pliku /etc/gearman-manager/workers/fetch_url.php możemy ręcznie zakolejkować zadanie dla Geramana:

gearman -f fetch_url -- http://google.pl/robots.txt

Źródło:
https://github.com/brianlmoon/GearmanManager
http://brian.moonspot.net/GearmanManager

Instalacja gearman-job-server 1.0.6 na Debianie Wheezy

Ostatnio trafiłem na ciekawą usługę, która pozwala oddelegować długo trwające zadania z usługi webowej. Mowa o Gearman’ie. Usługa jest o tyle ciekawa że nie narzuca ani języka dla klienta (większość popularnych ma gotowe biblioteki), ani język dla skryptów w tej usłudze nie jest narzucany. Można tę usługę wykorzystać jako most pomiędzy PHP a np. Javą/Pythonem lub do zlecenia zadań z serwera na Linux’ie do wykonania na serwerze Windowsowym (bo np. narzędzia dostępne są tylko dla Windowsa). O innych zaletach można poczytać na stronce więc nie będę przynudzać.
Standardowo zainstalowałem paczkę z repo Debiania i rozbiłem się przy kompilacji modułu z PECL’a – w repo była jakaś prehistoryczna wersja. Postanowiłem uruchomić aktualną wersje 1.0.6 z gałęzi testowej przekompilowując ją na Wheezym (by uniknąć zależności z wersji testowej).

Instalacja gearman’a

Dorzucamy źródła z testing – dzięki temu nie aktualizujemy systemu ale będziemy mogli pobrać świeże paczki źródłowe:

echo "deb-src http://ftp.pl.debian.org/debian jessie main non-free contrib" >> /etc/apt/sources.list
apt-get update

Przygotowujemy katalog roboczy, pobieramy paczki i kompilujemy:

mkdir gearman
cd gearman

apt-get build-dep gearman-job-server -y
apt-get install bzr
apt-get source gearman-job-server
cd gearmand-1.0.6
./debian/rules clean
./debian/rules binary
cd ..
dpkg -i gearman-job-server_1.0.6-2_i386.deb gearman-tools_1.0.6-2_i386.deb libgearman-dev_1.0.6-2_i386.deb libgearman7_1.0.6-2_i386.deb
apt-get install -f -y

Musiałem ręcznie doinstalować bazar (paczka bzr), bo w czasie kompilacji pojawiały się błędy z tym poleceniem – nie jestem pewien na ile jest potrzebne ale oczywiście możemy to posprzątać po skompilowaniu paczek.
P.S. Jestem przekonany że zamiast “rules clean/binary” jest jakieś polecenie, którego powinno się użyć ale nie mogłem sobie go przypomnieć…

Instalacja modułu dla PHP’a

Ponieważ wcześniej zainstalowaliśmy aktualne biblioteki libgearman-dev to instalacja modułu dla PHP powinna być bardzo prosta:

pecl install gearman
echo "extension=gearman.so" > /etc/php5/conf.d/gearman.ini

P.S. W paczkach PHP 5.3 z dotdeb’a można znaleźć już skompilowany moduł dla gearman’a.

Na razie tyle – muszę teraz poszukać jak w wygodny, zautomatyzowany sposób zarządzać skryptami zleconymi do gearman’a.