【发布时间】:2019-01-02 15:46:09
【问题描述】:
我正在尝试使用 HAProxy 1.5.8 版在我的后端服务器上构建 TCP 检查。
行为应该如下:
- 向服务器发送二进制数据
- 接收 ACK 作为第一个数据包
- 在第二个数据包中接收确认数据
所以我需要检查在发送二进制数据后我收到了 ACK,然后在第二个数据包中连续收到其他二进制数据。
是否可以使用 HAProxy 来做到这一点。
我试图在文档中找到它并尝试创建不同的配置,但未成功:
option tcp-check
tcp-check connect
tcp-check send-binary 303030303030
tcp-check expect binary 303030303030
每次我收到来自服务器的 ACK 时,HAProxy 都会终止连接,结果后端服务器已关闭。
编辑:
我将收到以下信息:
发送数据后的第一个数据包
0000 a0 66 10 09 2e 46 9c af ca bb aa 47 08 00 45 00 f...F.¯Ê»ªG..E.
0010 00 28 40 58 40 00 3e 06 d7 04 0a 1e 0b 34 0a 02 .(@X@.>.×....4..
0020 06 20 25 1c d5 80 91 0a f8 87 db 03 25 8f 50 10 . %.Õ...ø.Û.%.P.
0030 01 c9 03 d6 00 00 00 00 00 00 00 00 .É.Ö........
紧接在上面的第二个数据包
0000 a0 66 10 09 2e 46 9c af ca bb aa 47 08 00 45 00 f...F.¯Ê»ªG..E.
0010 00 39 40 59 40 00 3e 06 d6 f2 0a 1e 0b 34 0a 02 .9@Y@.>.Öò...4..
0020 06 20 25 1c d5 80 91 0a f8 87 db 03 25 8f 50 18 . %.Õ...ø.Û.%.P.
0030 01 c9 2d 2e 00 00 00 0f 30 30 30 30 30 30 42 33 .É-.....000000B3
0040 30 30 43 48 45 43 4b 00CHECK
第一个没有任何数据,我需要检查第二个是否包含 000000。
EDIT2:
提供 PCAP:
通信直接从客户端到服务器时的正常行为,没有 HAProxy: Normal behavior - client to server
使用HAProxy作为负载均衡器,连接到同一个服务器,用同样的命令检查,检查失败: failing check - HAProxy to server
后端配置:
backend nodes
mode tcp
balance roundrobin
default-server inter 10s fall 3 rise 2
option tcp-check
tcp-check connect
tcp-check send-binary 303030303030423230303035434845434b
tcp-check expect binary 000f30303030303042333030434845434b
server server1 10.30.11.52:9500 check
server server2 10.30.11.52:9501 check
server server3 10.30.11.52:9502 check
【问题讨论】:
标签: tcp binary haproxy health-monitoring