viernes, 11 de marzo de 2011

Configurando ATS (Apache Traffic Server)

Muchas veces en networking necesitamos trabajar con servidores proxy/cache, proxy inverso, de balanceo de carga, etc, etc. Y si somos afines con el mundo del SL casi siempre optamos por trabajar con squid o varnish, pero que sucede cuando necesitamos considerar la escalabilidad, el alto rendimiento o la posibilidad de hacer cache inversa de forma efectiva?.

Quiero hablarles del proyecto Traffic Server, un proxy con el  cual he trabajado hace un tiempo y se ha comportado bastante bien, este servidor nos permite hacer lo mismo que hacen otros servidores proxy/cache pero quizás por su diseño nos pueda dar mas rendimiento en funciones claves como  el balanceo de carga o la cache inversa. De forma adicional nos presenta otras características como la posibilidad de personalizar plugines o generar  reportes detallados de los hits (esto lo incorpora el mismo software y no es necesario agregar un complemento). Otras características se pueden encontrar en el sitio oficial del proyecto.

Pero como no todo es perfecto, el problema actual es que no existe mucha documentación ni ejemplos prácticos disponibles, tenemos como fuente principal la documentación oficial pero puede llegar a no ser suficiente si es la primera vez que nos encontramos con este servidor. A continuación voy a dar un procedimiento básico para ponerlo en marcha. La parte avanzada queda como ejercicio :P

PASOS PARA INSTALAR TRAFFIC SERVER:
1. Lo primero que debemos hacer es descargar la última versión estable disponible del sitio oficial:

2. Luego lo descomprimimos y desempaquetamos, continuando con el procedimiento normal para compilar software desde las fuentes:

anonymous#bunzip2 trafficserver-2.0.1.tar.bz2
anonymous#tar xfv trafficserver-2.0.1.tar

trafficserver-2.0.1/
trafficserver-2.0.1/m4/
trafficserver-2.0.1/m4/apr_network.m4
trafficserver-2.0.1/m4/ltversion.m4
trafficserver-2.0.1/m4/lt~obsolete.m4
trafficserver-2.0.1/m4/ltoptions.m4
trafficserver-2.0.1/m4/libtool.m4
trafficserver-2.0.1/m4/apr_common.m4
...

anonymous#cd trafficserver-2.0.1
anonymous#./configure

En este punto es posible recibir errores relacionados con librerías, en un sistema debian por ejemplo, es necesario instalar las librerías tcl,expat, sqlite, pcre :

apt-get install tcl-dev
apt-get install libexpat1-dev
apt-get install libsqlite3-dev
apt-get install libpcre3-dev

También es importante que tengamos los componentes para construir software:

apt-get install build-essential

3. Intentamos compilarlo

anonymous#make

En este punto es posible recibir un error porque el grupo llamado "nobody" no existe, una solución rápida para esto es crear un grupo en el sistema  llamado "nobody".

anonymous#groupadd nobody
anonymous#grep nobody /etc/group  
nobody:x:1001:
anonymous#

4. Finalmente lo instalamos en el sistema.

anonymous#pwd
/traffic/trafficserver-2.0.1
anonymous#make install

Muy bien !, nuestro sistema queda instalado en la ruta /usr/local/etc/trafficserver/. Ahora que?

Todos los archivos de configuración:


Binarios relacionados con el servicio:

Como dijimos al principio es posible configurar el servidor Traffic Server para funcionar de diferentes formas, así que intentaremos hacerlo funcionar como un proxy común y corriente, para esto debemos editar variables en el archivo de configuración principal. Si hacemos una prueba rápida  con la configuración por omisión nos encontramos con un error.


 
El servidor Traffic Server por omisión bloquea la salida de peticiones, esto lo hacen sus desarrolladores para evitar que los proxies mal configurados queden abiertos posibilitando ataques y todas esas otras amenazas que trae consigo exponer un servidor de esta forma.

Después de buscar, buscar y buscar en foros y demás encontré que la forma como se estructura el servicio es muy clara y debemos tener bien definido el rol o los roles (es posible hacer varias funciones al tiempo, por ejemplo reverse y transparente) que queremos tener.

**TRAFFIC SERVER EN MODO TRANSPARENTE**

En el archivo de configuración records.config (el archivo principal) debemos editar la línea:

CONFIG proxy.config.url_remap.remap_required INT 1

Y dejarla así:

CONFIG proxy.config.url_remap.remap_required INT 0

Tengan mucho cuidado en no cambiar la estructura del archivo de configuración, como se puede observar el software es bastante antiguo y los parsers para estos archivos son bastante "exigentes".

Una vez hecho el cambio podemos reiniciar el servicio:

anonymous#trafficserver restart
Restarting start/stop Traffic Server: trafficserver.
anonymous#
Y eso es todo, ya podemos usar nuestro proxy como siempre lo hemos usado:

A. Configurandolo en los browsers de los clientes
 
B. Haciendo un redireccionamiento en el firewall para que todo el tráfico web apunte al puerto 80  donde estará el proxy  (modo transparente), para esto se debe modificar la siguiente variable:

CONFIG proxy.config.http.server_port INT 8080

Por defecto el proxy escucha en el puerto 8080, así que debemos modificar esta línea, quedando así:

CONFIG proxy.config.http.server_port INT 80

**TRAFFIC SERVER EN MODO CACHE INVERSO**

En este escenario aceleramos las consultas a nuestros sitios web, haciendo una cache inversa, para esto necesitamos dejar la variable como estaba inicialmente.

CONFIG proxy.config.url_remap.remap_required INT 1

Y luego debemos editar el archivo de configuración remap.config, algo de información se puede encontrar en el manual.

En el archivo remap.config podemos agregar todos los "mapeos" línea por línea dependiendo de lo que queramos hacer, por ejemplo este mapeo uno a uno cambiando la IP y el puerto:

map http://[IP EXTERNA]:[PUERTO EXTERNO]  http://[IP INTERNA]:[PUERTO INTERNO]

Con esta sencilla sintaxis vamos a lograr que nuestro servidor proxy haga cache de las peticiones externas y las redirija al servidor interno (que puede ser el mismo con un servidor web escuchando en otro puerto). Una vez modificado el archivo reiniciamos el servicio y esta listo nuestro proxy inverso.

Para terminar podemos observar una salida del sistema de estadísticas que trae incorporado el software:

 

Aún queda mucho por explorar, este software cada vez esta tomando mas fuerza dentro de la comunidad de Software Libre, recuerden que ahora es un hijo de la fundación apache y seguramente seguirá mejorando como cada uno de sus productos.

Les dejo algunos enlaces donde se hacen benchmarks logrando que una maquina promedio pueda soportar hasta 100 mil peticiones por segundo (100.000 r/s)


Otros enlaces donde pueden obtener mas información:
Wiki:

Guia de administración:

Teoría:

Foros:

Entradas populares