CentOS 5 – instalar Varnish

¿Qué es Varnish?
Si lo buscamos en google images, seguramente nos saldrá algo relacionado con el barniz. Pero como este es un blog sobre administración de sistemas, probablemente no vayan por ahí los tiros. Por cierto, el barniz según wikipedia: “Barniz es una disolución de una o más sustancias resinosas en un disolvente que se volatiliza o se deseca”.

Varnish es un software que se define como un acelerador web, un proxy caché y balanceador en si mismo. Podemos buscar equivalentes en otros softwares existentes como el mod_proxy de Apache, Squid, o Nginx. Varnish es distribuido en licencia BSD.

Características
Concebido desde el comienzo para sistemas operativos 64 bits
VCL (lenguaje flexible propio de Varnish)
Load balancing
Soporte parcial de ESI
No necesita reinicio en cambios de configuraciones
Soporta escritura y modificación de urls
Completo sistema de estadísticas en tiempo real

Funcionamiento
Varnish guarda los datos pedidos por cada petición en la memoria virtual y es el sistema operativo quien debe decidir que es guardado en memoria y que es paginado al disco. Esto ayuda a evitar la situación que el sistema operativo empiece a cachear información mientras es movida al disco por otra aplicación.

Cada conexión cliente es tratada por un thread independiente. Cuando el límite configurado de threads activos es alcanzado, las siguientes conexiones entrantes son repartidas a una cola, sólo cuando está cola alcanza un valor límite Varnish empezará a descartar conexiones.

Instalación
Supondremos un escenario donde tenemos un servidor web X escuchando por el puerto 80. Instalaremos Varnish de la forma más sencilla, en el mismo servidor.

Instalación de repositorio

-bash-3.2# rpm --nosignature -i http://repo.varnish-cache.org/redhat/el5/noarch/varnish-release-2.1-2.noarch.rpm
-bash-3.2# yum install varnish

La última versión a día de este post, es la 2.1.5-1:

Package varnish-2.1.5-1.x86_64 already installed and latest version

También podemos utilizar svn para descargar la rama estable de Varnish y compilar.

Activamos los servicios para arrancar desde inicio

-bash-3.2# chkconfig varnish on
-bash-3.2# chkconfig varnishlog on

Archivos a editar
-bash-3.2# rpm -qc varnish
/etc/logrotate.d/varnish
/etc/sysconfig/varnish
/etc/varnish/default.vcl

Configuraremos nuestro servidor web para que, a partir de ahora, pase a escuchar por el puerto 8080. Haremos pues, que Varnish escuche a partir de ese momento por el puerto 80.

-bash-3.2# vi /etc/sysconfig/varnish

DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-s ${VARNISH_STORAGE}"

en este archivo configuraremos las opciones como creamos conveniente. Para dejar a Varnish en el puerto 80 hemos de editar el valor VARNISH_LISTEN_PORT. Es muy conveniente detenerse en este punto y leer información relacionada.

El otro archivo importante es /etc/varnish/default.vcl. Aquí definiremos nuestro/os backends, donde enviaremos el tráfico entrante y donde Varnish obtendrá la información que se le pide.

-bash-3.2# vi /etc/varnish/default.vcl
backend default {
.host = “127.0.0.1″;
.port = “8080″;
}

Este sería, como decimos, el escenario más sencillo. No entraremos en complicaciones complejas de VCL. El último paso sería activar los servicios de varnish

-bash-3.2# /etc/init.d/varnish start
Starting varnish HTTP accelerator: [ OK ]
-bash-3.2# /etc/init.d/varnishlog start
Starting varnish logging daemon: [ OK ]

Links
http://www.vivaelpixel.com/2009/12/varnish-reverse-proxy/
http://en.wikipedia.org/wiki/Varnish_%28software%29
http://blyx.com/2009/12/08/mejorando-la-velocidad-de-alfresco-con-varnish/
http://www.varnish-cache.org/installation/redhat
http://wiki.itlinux.cl/doku.php?id=varnish:mini_howto
http://www.varnish-cache.org/docs/2.1/installation/install.html#compiling-varnish-from-source

Leave a Reply

Your email address will not be published. Required fields are marked *