Agrupar sessões da web com o HAProxy

4

Eu quero balancear a carga de solicitações da web com o HAProxy. O problema é que quero que determinados grupos de usuários sempre acessem o mesmo servidor. (Este é um sistema multiplayer, e os usuários do mesmo grupo precisam estar no mesmo servidor). Os usuários podem acessar qualquer servidor, desde que os usuários com o mesmo ID de grupo estejam no mesmo servidor. O servidor pode até mudar (por exemplo, se um servidor ficar inativo), mas todos os usuários desse grupo devem mudar para um novo servidor. O servidor de aplicativos identificará o agrupamento do usuário com um cookie.

Como um exemplo específico, suponha que meu aplicativo tenha um cookie GROUP_ID numerado como 1..10000. Pode haver 3 usuários diferentes com GROUP_ID = 1, 3 usuários diferentes com GROUP_ID = 2, etc. E vamos supor que eu configure o balanceamento de carga nos servidores: app1, app2, app3.

O que eu gostaria de ver é algo semelhante a isto:

  • todos GROUP_ID = 1 usuários acessam app1
  • todos GROUP_ID = 2 usuários vão para app2
  • todos GROUP_ID = 3 usuários vão para app3
  • todos os GROUP_ID = 4 usuários vão para o app1
  • todos GROUP_ID = 5 usuários acessam app2

etc.

Se o servidor app1 se tornar sem resposta, quero ver os usuários app1 redistribuídos entre app2 e app3. (Tudo bem se todos os grupos forem embaralhados). Todos os usuários de um grupo específico ainda devem estar em um servidor comum.

Obviamente, a solicitação inicial para o site não terá um cookie, mas, uma vez autenticado, o usuário receberá o cookie.

Este tipo de balanceamento de carga personalizado é suportado pelo HAProxy?

    
por Will Glass 26.02.2013 / 22:39

1 resposta

2

1) Configure um frontend HAPROXY, com:

  • um backend dedicado para sua autenticação (faça o login no jogo). Quando você autentica, você define um cookie chamado 'GROUPID'. (isto é: GROUPID = GID3) para essa conexão http. (nota: você também pode passar esse 'groupid' como um argumento para um URL e / ou definir o tempo de expiração, etc.)

  • um backend dedicado para os servidores do seu jogo, com a seguinte diretiva:

    cookie GROUPID insere nocache indireto

2) configure seus servidores (no backend) como ( nota: seção de verificação pode ser removida ):

server APP01 10.0.0.5:80 cookie GID3 check inter 5000 rise 2 fall 3 maxconn 2048

server APP02 10.0.0.6:80 cookie GID4 check inter 5000 rise 2 fall 3 maxconn 2048

(...)

Para referência futura, a documentação do HAPROXY é bastante explícita ( link )

    
por 05.03.2013 / 00:57