我有一个运行 HAProxy 的负载均衡器,其中两个后端服务器均在 Unicorn 上运行 Nginx。
如果 nginx 在其中一个框上出现故障,HAProxy 会将其从集合中移除,并且服务继续运行。
如果 unicorn 出现故障,nginx 就会开始提供 502 错误,并且 HAProxy 会愉快地将它们转发给客户端。
我认为有两种可能的解决方案:
- 如果无法连接到 unicorn,则配置 nginx 根本不响应。HAProxy 会认为它已关闭并且不再向其发送请求。
- 配置 haproxy 将 502 视为服务器关闭并且不再向其发送任何请求。
我不知道该怎么做
答案1
从 Unicorn,您将看到一个“ping”页面,如果应用程序正常运行,该页面将响应“OK”。然后使用 http-check-expect 将该页面用作 haproxy 中的健康检查。
答案2
感谢@florin-asavoaie 为我指明了写作方向。以下是完整的写作:
我已经在 /status 上有一个 json 页面,返回 {"status":"up"}
所以我补充道
option httpchk GET /status
http-check expect string up
进入 haproxy.cfg 中的后端并重新启动 haproxy