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

Flujo de Ejecución de VCL

La siguiente imagen presenta el flujo de ejecución del archivo vcl que lee Varnish:



 
/var/www/html/wiki/data/pages/varnish/mini_howto.txt · Última modificación: 2008/11/17 11:44 por pbruna     Ir hasta arriba