我使用haproxy 1.6.4作为TCP(非HTTP)代理。 我的客户正在发出TCP请求。他们不等待任何响应,他们只是发送数据并关闭连接。
当所有后端节点都关闭时,haproxy的行为如何? 我看到(从客户的角度来看)haproxy正在接受进入联系。
Haproxy统计显示前端的状态为OPEN,他正在接受连接。
前端的会话数和字节数增加,但不是后端(他是DOWN)。
haproxy缓冲传入的TCP请求,并在后端启动后将它们传递给后端吗? 如果是,可以配置此缓冲区大小?数据是缓冲的(在内存中,磁盘?)
当所有后端节点都关闭时,是否可以关闭前端(不接受传入的TCP连接)?
编辑: 当后端开始时,我看到了 *后端以字节为单位,会话等于前端会话数 *但是我的唯一一个后端节点有发烧的字节数,发烧会话并且有错误。
因此,似乎在默认配置中没有tcp缓冲。 即使所有后端节点都关闭,haproxy也会接受数据,但此数据会丢失。 当没有后端服务器时,我宁愿关闭tcp前端 - 因此客户端连接将被拒绝。这可能吗?
编辑: haproxy日志是
Jul 15 10:02:32 172.17.0.2 haproxy [1]:185.130.180.3:11319 [15 / Jul / 2016:10:02:32.335] tcp-in app / -1 / -1 / 0 0 SC \ 0/0/0/0/0 0/0 908
我的日志格式是
%ci:%cp \ [%t] \%ft \%b /%s \%Tw /%Tc /%Tt \%B \%ts \ \%ac /%fc /%bc /%sc /%rc \%sq /%bq \%U
我从日志中了解到:
终止状态SC转换为
S:TCP会话被服务器意外中止,或者 服务器明确拒绝了它。 C:代理正在等待CONNECTION建立 服务器。服务器最多可能已经注意到连接尝试。
答案 0 :(得分:1)
我不认为你在寻找什么是可能的。 HAproxy分别处理连接的两侧(前端,后端)。首先建立传入的TCP连接,然后HAproxy为其查找匹配的目标。