首页 > 解决方案 > HA 代理使用 tcp-check 进行 HTTP 连接

问题描述

我正在尝试使用 HA 代理对 Atlassian Bitbucket 集群进行负载平衡,以便在同一服务器上相应的 http 状态检查失败时标记 SSH 端点。

下面的配置过去可以正常工作,但是自从升级到 Bitbucket 6.10.5(具有新的嵌入式 Tomcat 服务器)后,我现在收到错误“服务器 bitbucket_ssh/bitbucket1 已关闭,原因:Layer7 无效响应,信息:” TCPCHK 在第 7 步评论中得到一个空响应:“HTTP 状态””。

如果 I curl http://bitbucket1.mydomain:8200/status,响应回来了{"state":"RUNNING"},和升级前一样。

什么可能导致空响应?

backend bitbucket_ssh
  mode tcp
  balance roundrobin
  option tcp-check
  tcp-check comment "SSH Check"
  tcp-check connect port 8203
  tcp-check expect rstring ^SSH.*$
  tcp-check comment "HTTP Status"
  tcp-check connect port 8200
  tcp-check send GET\ /status\r\n
  tcp-check expect string RUNNING
  server bitbucket1 bitbucket1.mydomain:8203 check
  server bitbucket2 bitbucket2.mydomain:8203 check
  server bitbucket3 bitbucket3.mydomain:8203 check

标签: httptcpbitbuckethaproxy

解决方案


似乎较新的 Tomcat 服务器需要一个带有额外 CR-LF 的显式 HTTP/1.0 连接。

改变:

tcp-check send GET\ /status\r\n

tcp-check send GET\ /status\ HTTP/1.0\r\n
tcp-check send \r\n

让它运行。


推荐阅读