我托管一个网站,其中包含一个使用 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
谢谢。可以提供更多详细信息(如果需要)。
答案1
根据游戏服务器的工作方式,您可能需要与您的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