我使用haproxy 1.6.4作为TCP(非HTTP)代理 . 我的客户正在发出TCP请求 . 他们不等待任何响应,他们只是发送数据并关闭连接 .
当所有后端节点都关闭时,haproxy的行为如何?我看到(从客户的角度来看)haproxy正在接受进入联系 .
Haproxy的统计数据显示,前端的状态为OPEN,他正在接受连接 .
前端的会话数和字节数增加,但不是后端(他是DOWN) .
是haproxy缓冲传入的TCP请求,并且一旦后端启动就会将它们传递给后端吗?如果是,可以配置此缓冲区大小?数据缓冲的地方(在内存中,磁盘?)
当所有后端节点都处于DOWN状态时,是否可以关闭前端(不接受传入的TCP连接)?
编辑:当后端开始时,我看到后端以字节为单位,会话等于前端会话数但我的唯一后端节点有发烧字节数,发烧会话并有错误 .
因此,似乎在默认配置中没有tcp缓冲 . 即使所有后端节点都关闭,haproxy也会接受数据,但此数据会丢失 . 当没有后端服务器时,我宁愿关闭tcp前端 - 因此客户端连接将被拒绝 . 那可能吗?
编辑:haproxy日志是
7月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:代理正在等待在服务器上 Build CONNECTION . 服务器最多可能已经注意到连接尝试 .
1 回答
我不认为你在寻找什么是可能的 . HAproxy分别处理连接的两侧(前端,后端) . 首先 Build 传入的TCP连接,然后HAproxy为其查找匹配的目标 .