Назад | Перейти на главную страницу

HaProxy для игровых серверов, что не так с моей конфигурацией?

Я размещаю веб-сайт с игровым клиентом, который использует TCP для соединений. В настоящее время я ищу способ проксировать свои соединения с одного сервера на мой исходный сервер. Я протестировал пересылку Iptables и обнаружил, что пока он работает, HaProxy, похоже, работает лучше. Проблема, с которой я столкнулся, заключается в том, что HaProxy случайным образом отключает пользователей после случайного открытия их соединения. Часто это меньше 2 минут. Я новичок в Linux и, конечно же, новичок в haProxy.

Вот моя конфигурация, исходный IP-адрес был удален по очевидным причинам:

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

Спасибо. Более подробная информация может быть предоставлена ​​(при необходимости).

В зависимости от того, как работает ваш игровой сервер, вам, вероятно, потребуется работать с вашим timeout client и ваш timeout server. В настоящее время в вашей конфигурации они установлены на 5 секунд.

Эти настройки относятся к вашему сеансу tcp. Если вы хотите немного улучшить баланс между вашими серверами, вы также можете посмотреть профили постоянства, чтобы сбалансировать определенное соединение с одними и теми же серверами. Опять же, это действительно зависит от вашей конфигурации.

Также посмотрите на balance возможность просматривать документы.

Пример алгоритма в документации haproxy: (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#balance)

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.

Также может потребоваться настройка tcp keep alive: (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#option%20tcpka)

Вы также можете активно просматривать свои сеансы с помощью отличного инструмента вызова haproxyctl, который вы можете найти на github или установить с помощью 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