jueves, 2 de enero de 2014

Python, Celery y colas....sobre todo colas --Part1--



Empezamos a tocar un poco de Python, Celery y Rabbit, lo primero de todo, contexto:

Día 2 de Enero de 2014, frio, en el curro no curra ni el tato, pues bien hoy toca mirar documentación y sobretodo con tranquilidad.

Esto ha surgido por la siguiente razón, el otro día estaba pegandome con Django y llegue al punto de necesitar un event pool  o un gestor de colas para después con Fabric atacar a varios nodos a la vez, que no se pisen y organizar la información un poco. En vez de el pool de eventos me decante por esta opción por la sencilla razón que soy Sysadmin y esta en mi naturaleza, ademas de que es un tema pendiente que llevo posponiendo varios meses.

Empezamos, el SO, vamos a trabajar sobre una RedHat/CentOS 5.5...direis..why?, por que es el SO que suelo usar en el curro para todo, podría usar una 6 pero me interesa especialmente la 5.5 por que la mayoría de ellos tienen dicha version.

Version de Python a utilizar 2.6, si tenéis el repo epel, instalad "python26" así es como se llama el RPM, instaladlo con el setuptools para el tema de pip y demás.

Después pip-python install celery (aseguraos que pip tira de python 2.6 y no de la 2.4 que es la que esta por defecto en el SO), sino os quereis liar, easy_install-2.6 celery y ya.

Vale, con esto ya tenemos Python2.6 y Celery instalado, ahora necesitamos un broker, vamos con RabbitMQ, aquí tuve alguna historia sobre todo por desconocimiento, nunca había instalado una Rabbit y claro.. para que la instalación no este muy anticuada yo he metido la version 2.8.5-1. Para ellos haced lo siguiente, encontrar el RPM es trivial así que no me lio con eso:

 yum install rabbitmq-server


Bueno, Rabbit tiene unos plugins bastante chulos, entre ellos una interfaz web bastante aceptable y sin boton de deslogueo (eso me toco bastante el bajo vientre xD), pero en esta version de Redhat y en el repo Epel solo tenemos la version 2.2 de RabbitMQ y la version 12B de Erlang, una de las dependencias necesarias para que estas cosas chulas funcionen, vale pues llego el momento de saltarnos el procedimiento, buscamos el rpm de la version 2.8.5-1, como he dicho eso es bastante simple, en rpmfind o sitios similares los tenéis.

Ahora instalamos el repo de Erlang, por que necesitamos minimo la version 13B para levantar la web de administration:

 wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
 yum clean all
 yum install erlang

nos instalará 800 millones de rpms (61 a mi xD) y demás, vosotros dadle a si (a no ser que necesitéis alguna version concreta para algún elemento concreto en desarrollo, pero ahi ya no entro). Tras un cafe podemos empezar a trabajar.

Activamos el plugin de administracion:

 rabbitmq-plugins enable rabbitmq_management

E iniciamos el servidor de RabbitMQ:

 /sbin/service rabbitmq-server start 

ahora nos vamos con el navegador a la IP de vuestro servidor y concretamente al puerto 55672, es el mismo que el de Rabbit pero con otro 5 delante, y ale ya tenemos la base para poder trabajar.

Podeis acceder como guest/guest y a partir de ahi gestionar los usuarios como queráis.

Mirad que no tengais IPTABLES levantadas o SELinux por ahi rondando.

En los siguientes post iré entrando mas en código para gestionar los workers de Celery desde python.
Espero que os haya sido util.

Sources:
 - How to install erlang: http://pubs.vmware.com/vfabric51/index.jsp?topic=/com.vmware.vfabric.vas.1.0/vas/erlang-install.html
 - Management plugin RabbitMQ: http://www.rabbitmq.com/management.html