Introducción
Varnish es un Proxy Cache o Web Content Accelerator y Balanceador para servidores Web. Se diferencia de Squid al estar diseñado con un mejor manejo de recursos al dejar que el Kernel de Linux se encargue del manejo de Memoria.
Instalación
Existe un versión compilada para CentOS/Red Hat 5 x86_64 y el RPM fuente en nuestros servidores.
Inicio / Detención
La instalación crea los siguientes scripts de servicio:
- varnish, servidor de balanceo
- varnishlog, almacena logs en formato binario varnish
- varnishncsa, almacena logs en formato Apache HTTPD
Logs
Hay que tener cuidado con los logs, ya que estos ocupan bastante espacio. Revisar el archivo de rotación /etc/logrotate.d/varnish y habilitar la compresión.
Configuración
Parámetros de Kernel
Se deben agregar las siguientes configuraciones al archivo /etc/sysctl.conf:
net.ipv4.ip_local_port_range = 1024 65536 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 net.ipv4.tcp_fin_timeout = 3 net.ipv4.tcp_tw_recycle = 1 net.core.netdev_max_backlog = 30000 net.ipv4.tcp_no_metrics_save=1 net.core.somaxconn = 262144 net.ipv4.tcp_syncookies = 0 net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 fs.file-max = 131072 vm.swappiness = 0 # Keep Alive net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 5
Configuración de Límites
Se debe agregar la siguiente configuración al archivo /etc/security/limits.conf:
@varnish soft nofile 131072 @varnish hard nofile 131072 @varnish soft memlock 400000 @varnish hard memlock 400000
Archivo de Cache
Se recomienda crear una partición especial para el archivo de caché y montar esta partición con las opciones noatime y nodiratime.
Configuración Global
El archivo que contiene la configuración base de Varnish es /etc/sysconfig/varnish.
# /etc/sysconfig/varnish
NFILES=131072 # Cantidad de Archivos - Valores recomendados 64bits
MEMLOCK=328000 # Memoria Compartida en Kb - Valores recomendados 64bits
DAEMON_OPTS="-a 10.100.23.4:80 \ # Direccion en que escucha
-T 10.100.23.4:6082 \ # Direccion de Administracion
-f /etc/varnish/default.vcl \ # Archivo de Reglas
-u varnish -g varnish \ # Usuario y Grupo de ejecución
-w 50,500,120 \
-p listen_depth=4096 \
-p lru_interval=3600 \
-h classic,500009 \
-p thread_pool_max=4000 \
-p thread_pools=4 \
-p send_timeout=30 \
-p default_ttl=30 \
-p thread_pool_timeout=60 \
-p sess_timeout=2 \
-p pipe_timeout=30 \
-s file,/var/lib/varnish/varnish_storage.bin,16G" # Archivo de Cache
El tamaño del archivo de cache puede ser a gusto del consumidor.
Reglas de Balanceo y Cache
El archivo en que se define como va a funcionar Varnish es /etc/varnish/default.vcl, según la Configuración Global.
Este archivo contiene instrucciones que se programan usando el lenguaje VCL, lenguaje creado específicamente para Varnish. En este enlace se encuentra un documento que enseña a utilizar el lenguaje VCL, también sirve man 7 vcl.
Entonces a continuación un ejemplo sencillo con balanceo de carga.
# /etc/varnish/default.vcl
director www_director round-robin {
{ .backend = { .host = "intweb1"; .port = "http"; } }
{ .backend = { .host = "intweb2"; .port = "http"; } }
}
sub vcl_recv {
set req.backend = www_director;
# Se mantiene la IP original
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
}
También hay disponible un ejemplo de Configuración de VirtualHosts en: http://wiki.itlinux.cl/doku.php?id=varnish:vhost_example
