HaProxy para servidores de jogos, o que há de errado com minha configuração?

4

Eu hospedo um site com um cliente de jogo que usa TCP para conexões. No momento, estou procurando uma maneira de proxy minhas conexões de um servidor para o meu servidor de origem. Eu testei o encaminhamento de Iptables e descobri que, enquanto ele funciona, o HaProxy parece ter um desempenho melhor. O problema que estou enfrentando é que o HaProxy desconecta usuários aleatoriamente após um tempo aleatório de sua conexão ser aberta. Geralmente é menos de 2 minutos. Sou muito novo no Linux e, claro, sou novato no haProxy.

Aqui minha configuração, o endereço IP de origem foi removido por razões óbvias:

global
daemon
maxconn 1000

defaults
    mode tcp
    timeout connect 5000ms
    timeout client 5000ms
    timeout server 5000ms

frontend proxy-in
    mode tcp
    bind *:1233
    default_backend proxy-out

backend proxy-out
    mode tcp
    server s1 127.0.0.1:1232

listen admin
    bind *:7772
    stats enable

Obrigado. Mais detalhes podem ser fornecidos (se necessário).

    
por Matthew 16.06.2013 / 19:10

1 resposta

1

Dependendo de como o seu servidor de jogos funciona, você provavelmente precisará trabalhar com seu timeout client e seu timeout server . Estes estão atualmente definidos para 5 segundos em sua configuração.

Essas configurações estão relacionadas à sua sessão de tcp. Se você quiser equilibrar as coisas um pouco melhor com seus servidores, convém também consultar os perfis de persistência para equilibrar determinadas conexões com os mesmos servidores. Novamente, isso realmente depende da sua configuração.

Veja também a opção balance para pesquisar nos documentos.

Algoritmo de exemplo no haproxy docs: ( link )

leastconn   The server with the lowest number of connections receives the
            connection. Round-robin is performed within groups of servers
            of the same load to ensure that all servers will be used. Use
            of this algorithm is recommended where very long sessions are
            expected, such as LDAP, SQL, TSE, etc... but is not very well
            suited for protocols using short sessions such as HTTP. This
            algorithm is dynamic, which means that server weights may be
            adjusted on the fly for slow starts for instance.

Também pode precisar da configuração tcp keep alive: ( link )

Você também pode visualizar ativamente suas sessões com uma ótima ferramenta chamada haproxyctl, que pode ser encontrada no github ou instalar com gem install haproxyctl .

> haproxyctl show sess

0x1eb23c0: proto=tcpv4 src=172.12.0.149:57749 fe=https be=<NONE> srv=<none> ts=08 age=1m36s calls=40 rq[f=400000h,i=0,an=1ch,rx=1m23s,wx=,ax=] rp[f=008000h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=2,ex=] s1=[0,0h,fd=-1,ex=] exp=1m23s
0x1e3b170: proto=tcpv4 src=172.12.0.149:57750 fe=https be=<NONE> srv=<none> ts=08 age=1m36s calls=31 rq[f=400000h,i=0,an=1ch,rx=1m23s,wx=,ax=] rp[f=008000h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=3,ex=] s1=[0,0h,fd=-1,ex=] exp=1m23s
0x1e35da0: proto=tcpv4 src=172.12.0.149:57751 fe=https be=<NONE> srv=<none> ts=08 age=1m36s calls=35 rq[f=400000h,i=0,an=1ch,rx=1m23s,wx=,ax=] rp[f=008000h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=8,ex=] s1=[0,0h,fd=-1,ex=] exp=1m23s
0x1e4fa50: proto=tcpv4 src=172.12.0.149:57754 fe=https be=<NONE> srv=<none> ts=08 age=1m36s calls=15 rq[f=400000h,i=0,an=1ch,rx=1m23s,wx=,ax=] rp[f=008000h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=9,ex=] s1=[0,0h,fd=-1,ex=] exp=1m23s
    
por 06.11.2013 / 01:00