我使用以下配置为两个 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