Balanceamento de carga: sessões Nginx, Varnish e HTTP

3

Eu tenho que configurar um sistema de balanceamento de carga. No momento eu tenho duas máquinas rodando Nginx 0.8.52, PHP-FPM (no unix socket) e uma aplicação baseada no PHP Symfony 1.4.11.

Em uma terceira máquina, eu tenho que escolher qual balanceador instalar.

Eu já usei o Varnish para caching de arquivos estáticos, mas não sei se o balanceamento de carga do Varnish pode lidar com sessões PHP do Symfony. Outra opção seria balanceamento de carga Nginx com ip_hash.

Qual é o melhor?

Obrigado antecipadamente

    
por Michele Pangrazzi 19.04.2011 / 12:21

3 respostas

2

Por que não os dois? Coloque o NginX na frente para manipular a compactação gzip e SSL e Varnish para lidar com o armazenamento em cache e o balanceamento de carga. O aplicativo back-end precisará de algum compartilhamento de sessão no banco de dados ou no Memcache, conforme sugerido por Kristaps e o Varnish não armazenará em cache nenhum conteúdo dinâmico que seja servido com cookies ou autenticação, mas todo o resto será ok.

A configuração recomendada é que você crie um nome de host estático separado (como static.example.com e veicule todo o conteúdo estático de lá, sem cookies (o Varnish armazenará em cache muito bem, já que não há cookies), e outro para o conteúdo dinâmico que pode ser balanceado pelo NginX ou Varnish, usando um cookie para manipulação de sessão, e todos os back-ends que compartilham as informações da sessão, conforme indicado acima.

    
por 19.04.2011 / 13:31
1

Não sou especialista em framework symfony, mas para fins de balanceamento de carga é recomendado mover as sessões do armazenamento baseado em arquivos padrão para manipulador de sessão do memcache , para permitir que a parte da sessão da escala de aplicativos acima de um único aplicativo.

Você pode arquivar sessões em verniz por magia VCL (algumas operações aritméticas simples na representação decimal do endereço IP do cliente, como módulo).

O Varnish por design é um servidor de armazenamento em cache, não um balanceador de carga. Também o verniz não suporta SSL, o que significa que o terminador SSL separado (mais comumente - nginx com módulo ssl) é necessário.

Sugiro que você use o balanceador de carga, que não é projetado para armazenamento em cache, mas para partes de aplicativos da Web totalmente dinâmicas, como haproxy ou nginx, que suportam sessões fixas.

    
por 19.04.2011 / 13:15
0

Acho melhor encontrar uma maneira de compartilhar os dados da sessão para os nós futuros. Armazenamento NAS ou fazer o balanceador de carga compartilhar as sessões de php. Outra opção é reescrever seu aplicativo para que ele possa usar o banco de dados mysql para suas sessões e compartilhar novamente esses dados sobre os nós.

    
por 19.04.2011 / 13:12