Distribuindo a carga da sessão php em uma matriz memcache

2

Até recentemente, nossa configuração consistia em 4 sessões de compartilhamento de servidores da Web em um único servidor que executa o memcache. Estamos hospedados na nuvem da Amazon e sofremos uma falha no pico de carga em dois dias consecutivos. O problema é que o serviço memcache falhou (a carga para o nosso site tem aumentado constantemente).

Então, tomamos as seguintes medidas:

1) Adicionado mais 2 servidores para armazenar sessões

2) Defina as seguintes variáveis no arquivo php ini em todos os servidores web

session.save_handler = memcache

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

memcache.hash_strategy = consistent

memcache.allow_failover = 1

As coisas estão correndo em ordem agora. Para garantir a disponibilidade, tentamos testar matando aleatoriamente um dos nossos servidores de sessão, e o site continua em execução (alguns usuários foram desconectados, o que é aceitável para os negócios no momento).

Mas há um grande problema. Eu esperava que a carga nos servidores memcache fosse distribuída mais ou menos igualmente. Mas não é isso!

Se eu olhar para o "Max Network Out (Bytes)" no CloudWatch, então eu posso ver que a carga é aproximadamente na proporção de 10: 5: 1. Em outras palavras, dentro e fora da largura de banda da rede, o primeiro servidor é 10 vezes mais carregado que o terceiro. E o segundo servidor é 5 vezes mais carregado que o terceiro.

Alguma idéia?

    
por Kundra 15.07.2011 / 07:51

1 resposta

0

A alteração da ordem dos IPs do memcache para os parâmetros session.save_path pode alterar a taxa de distribuição da sessão nos servidores memcache. Por exemplo, no primeiro servidor da web:

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

no segundo servidor da web:

session.save_path = tcp://ip2.port, tcp://ip3.port, tcp://ip1:port

no terceiro servidor da web:

session.save_path = tcp://ip3.port, tcp://ip1.port, tcp://ip2:port

no 4º servidor da web:

session.save_path = tcp://ip1.port, tcp://ip3.port, tcp://ip2:port
    
por 11.01.2012 / 15:56