Equilibrio de carga: Nginx, Varnish y sesiones HTTP

Tengo que configurar un sistema de equilibrio de carga. Por el momento tengo dos máquinas que ejecutan Nginx 0.8.52, PHP-FPM (en socket unix) y una aplicación basada en PHP Symfony 1.4.11.

En una tercera máquina, tengo que elegir un equilibrador que instalar.

Ya he utilizado verniz para el almacenamiento de files estáticos, pero no sé si el equilibrio de carga de barniz puede manejar las sesiones de Symfony PHP. Otra opción sería balanceo de carga de Nginx con ip_hash.

¿Cuál es el mejor?

Gracias por adelantado

¿Por qué no los dos? Ponga NginX en la parte delantera para manejar la compression gzip y SSL y Barniz detrás de ella para manejar el almacenamiento en caching y el equilibrio de carga. La aplicación de backend necesitará compartir algunas sesiones en DB o Memcache como sugiere Kristaps y Varnish no almacenará en caching ningún contenido dynamic que se sirva con Cookies o authentication, pero todo lo demás estará bien.

La configuration recomendada sería para usted crear un nombre de host estático separado (como static.example.com y servir todo el contenido estático de allí, sin cookies (Varnish lo saveá en caching, ya que no hay cookies), y otro para el contenido dynamic que puede ser equilibrado de carga por NginX o Barniz, utilizando una cookie para el event handling session y todos los backends que comparten la información de session como se indicó anteriormente.

No soy un experto en framework symfony, pero para propósitos de equilibrio de carga se recomienda mover las sesiones del almacenamiento basado en files pnetworkingeterminado al manejador de sesiones memcache , para permitir que la parte de session de la aplicación sobrepase la aplicación única.

Puede archivar sesiones pegajosas en el barniz mediante magia de VCL (algunas operaciones aritméticas simples en la representación decimal de la dirección IP de los clientes, como module).

Barniz por layout es el caching del server, no balanceador de carga.También barniz no es compatible con SSL, lo que significa que el terminador SSL separado (más comúnmente – nginx con el module ssl) es necesario.

Le sugiero que utilice el equilibrador de carga que está diseñado no para el almacenamiento en caching, pero para la parte de la aplicación web totalmente dynamic, como haproxy o nginx, que soporta sesiones pegajosas.

Creo que es mejor encontrar una manera de compartir los datos de session para los futuros nodos, por ejemplo, almacenamiento NAS o hacer que el equilibrador de carga comparta las sesiones de php. Otra opción es reescribir su aplicación para que pueda utilizar la database mysql para sus sesiones y compartir de nuevo los datos sobre los nodos.