我正试图用HA Proxy对Atlassian Bitbucket集群进行负载平衡,以便在同一服务器上的相应http状态检查失败时,SSH端点被标记下来。
下面的配置过去工作得很好,但是,自从升级到Bitbucket 6.10.5(它有一个新的嵌入式Tomcat服务器),我现在得到了错误 "Server bitbucket_sshbitbucket1 is DOWN, reason: Layer7无效响应,info: "TCPCHK在步骤7注释:'HTTP状态'时得到一个空的响应"。
如果我 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
似乎新的Tomcat服务器需要一个显式的HTTP1.0连接,并多了一个CR-LF。
改为
tcp-check send GET\ /status\r\n
改为
tcp-check send GET\ /status\ HTTP/1.0\r\n
tcp-check send \r\n
得到了它的运行。