HaProxy 给出 - 503 服务不可用

HaProxy 给出 - 503 服务不可用

我使用以下配置为两个 Tomcat 服务器执行负载平衡。并且我配置了 HAProxy 来执行 SSL/TLS 桥接/重新加密。

#---------------------------------------------------------------------
# 可能的 Web 应用程序的示例配置。请参阅
# 完整配置选项在线。
#
#http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# 全局设置
#---------------------------------------------------------------------
全球的
    # 要让这些消息最终出现在 /var/log/haproxy.log 中,你需要
    # 需要:
    #
    # 1) 配置 syslog 以接受网络日志事件。这已完成
    # 通过在 SYSLOGD_OPTIONS 中添加“-r”选项
    # /etc/sysconfig/syslog
    #
    # 2)配置 local2 事件到 /var/log/haproxy.log
    # 文件。可以将如下行添加到
    # /etc/sysconfig/syslog
    #
    #本地2。* /var/log/haproxy.log
    #
    日志 127.0.0.1 local2 调试

    chroot /var/lib/haproxy
    pid文件/var/run/haproxy.pid
    最大连接数 4000
    用户 haproxy
    组 haproxy
    守护进程

    # 打开统计 unix 套接字
    统计套接字 /var/lib/haproxy/stats
    ssl 服务器验证 none

#---------------------------------------------------------------------
# 所有“listen”和“backend”部分的通用默认值
# 如果未在其块中指定则使用
#---------------------------------------------------------------------
默认值
    模式 http
    记录全局
    选项 httplog
    选项 dontlognull
    选项 http 服务器关闭
    除 127.0.0.0/8 之外的选项转发
    选项重新分派
    重试 3
    http请求超时10秒
    超时队列 1m
    连接超时10秒
    客户端超时 1m
    服务器超时 1m
    超时 http-keep-alive 10s
    超时检查10s
    最大连接数 3000

#---------------------------------------------------------------------
# 代理后端的主前端
#---------------------------------------------------------------------
前端 ft_main
默认后端 bk_main
绑定 192.168.192.175:443 ssl crt /home/testuser/Software/apache-tomcat-7.0.32/keystore/haproxy-cert.pem no-sslv3
模式 http

#---------------------------------------------------------------------
# 各个后端之间的循环平衡
#---------------------------------------------------------------------
后端 bk_main
    平衡循环赛
    重试 3
服务器 srv01 192.168.192.173:8443 权重 1 maxconn 100 检查 no-sslv3 ssl 验证无
服务器 srv01 192.168.192.174:8443 权重 1 maxconn 100 检查 no-sslv3 ssl 验证无

当我启动服务时出现以下错误

来自 syslogd@localhost 的消息,发送于 8 月 17 日 17:06:12 ...
 haproxy[2593]: 后端 bk_main 没有可用的服务器!

我正在观察 /var/log/haproxy.log 中的以下日志

8月17日 16:52:07 localhost haproxy[2495]: 后端 bk_main 没有可用的服务器!
8月17日 16:52:25 localhost haproxy[2496]: 120.117.50.250:52088 [17/Aug/2015:16:52:25.084] ft_main~ bk_main/ 556/-1/-1/-1/556 503 212 - - SC-- 1/1/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8 月 17 日 16:52:26 localhost haproxy[2496]: 120.117.50.250:52089 [17/Aug/2015:16:52:25.336] ft_main~ bk_main/ 1044/-1/-1/-1/1044 503 212 - - SC-- 0/0/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8月17日 16:52:27 localhost haproxy[2496]: 120.117.50.250:52090 [17/Aug/2015:16:52:27.371] ft_main~ bk_main/ 268/-1/-1/-1/268 503 212 - - SC-- 1/1/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8 月 17 日 16:52:28 localhost haproxy[2496]: 120.117.50.250:52091 [17/Aug/2015:16:52:27.623] ft_main~ bk_main/ 671/-1/-1/-1/671 503 212 - - SC-- 0/0/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8月17日 16:52:29 localhost haproxy[2496]: 120.117.50.250:52092 [17/Aug/2015:16:52:29.395] ft_main~ bk_main/ 273/-1/-1/-1/273 503 212 - - SC-- 1/1/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8 月 17 日 16:52:30 localhost haproxy[2496]: 120.117.50.250:52093 [17/Aug/2015:16:52:29.646] ft_main~ bk_main/ 701/-1/-1/-1/701 503 212 - - SC-- 0/0/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8月17日 16:52:51 localhost haproxy[2496]: 120.117.50.250:52094 [17/Aug/2015:16:52:51.268] ft_main~ bk_main/ 274/-1/-1/-1/274 503 212 - - SC-- 1/1/0/0/0 0/0 “GET /test/healcheck.jsp HTTP/1.1”
8月17日 16:57:15 localhost haproxy[2496]: 192.168.192.168:54329 [17/Aug/2015:16:57:15.560] ft_main/1: SSL握手失败
8 月 17 日 17:00:34 localhost haproxy[2538]: 代理 ft_main 已启动。
8 月 17 日 17:00:34 localhost haproxy[2538]: 代理 bk_main 已启动。
8 月 17 日 17:00:34 localhost haproxy[2538]: 服务器 bk_main/srv01 已关闭,原因:Layer6 无效响应,信息:“SSL 握手失败”,检查时长:30 毫秒。剩余 0 个活动服务器和 0 个备份服务器。0 个会话处于活动状态,0 个重新排队,0 个剩余在队列中。
8月17日 17:00:34 localhost haproxy[2538]: 后端 bk_main 没有可用的服务器!
8 月 17 日 17:06:12 localhost haproxy[2593]: 代理 ft_main 已启动。
8 月 17 日 17:06:12 localhost haproxy[2593]: 代理 bk_main 已启动。
8 月 17 日 17:06:12 localhost haproxy[2593]: 服务器 bk_main/srv01 已关闭,原因:Layer6 无效响应,信息:“SSL 握手失败”,检查时长:25 毫秒。剩余 0 个活动服务器和 0 个备份服务器。0 个会话处于活动状态,0 个重新排队,0 个剩余在队列中。
8月17日 17:06:12 localhost haproxy[2593]: 后端 bk_main 没有可用的服务器!

根据上述标志中的“SC”标志,我的理解是它无法建立服务器连接。那么这是握手问题吗?我使用的是自签名证书。在服务器指令中我提到了“不验证”,那么问题可能是什么?

答案1

当然,您可以自己尝试连接后端:

openssl s_client -connect 192.168.192.173:8443

这样你就可以消除大多数可能的原因。

如果 s_client 可以工作,但 haproxy 不工作怎么办?在 SELinux 强制执行时(例如采用默认设置的 CentOS 7),就会发生这种情况,您需要明确允许 haproxy 连接到任何后端端口:

setsebool -P haproxy_connect_any 1

答案2

检查 /etc/hosts 文件,确保实例名称与代理名称不同。通常,它会将服务器的主机名设置为 127.0.0.1

相关内容