我正在考虑在HAProxy和Apache之间放置清漆。 这是工作,但与HAProxy之间的光油监控光油。 如果Apache停机,它将不会故障转移到另一个Apache。
HAProxy中有没有configuration可以解决这个问题?
如果Varnish介于HAproxy和Apache之间,您可以让Varnish进行负载平衡 ,尽pipe它不如HAproxy提供的选项强大。
更好的办法是让HAproxy将静态内容发送给Varnish,其余部分直接发送到后端服务器。
Haproxy.com有一个关于如何在这里做一个非常好的文章。
如果您确实希望HAproxy同时检查Varnish 和 Apache的状态(位于同一主机上),您有两种select:
在HAProxy中设置虚拟后端/服务器,它检查Apache并使匹配的Varnish服务器跟踪虚拟机:
frontend HTTP-IN mode http default_backend Varnishes # All traffic goes here backend Varnishes mode http balance roundrobin server Varnish-1 1.1.1.1:80 track Apache-1/Apache-1 server Varnish-2 2.2.2.2:80 track Apache-2/Apache-2 # No traffic ever goes here # Just used for taking servers out of rotation in 'backend Varnishes' backend Apache-1 server Apache-1 1.1.1.1:8080 check backend Apache-2 server Apache-2 2.2.2.2:8080 check
让Varnish返回一个与Apache状态相匹配的健康检查结果(如果Apache启动,则返回OK,否则返回FAILED)。
varnish.vcl
backend default { .host = "127.0.0.1"; .port = "8080"; } # Health Check if (req.url == "/varnishcheck") { if (req.backend.healthy) { return(synth(751, "OK!")); } else { return(synth(752, "FAILED!")); } } sub vcl_synth { # Health Checks if (resp.status == 751) { set resp.status = 200; return (deliver); } if (resp.status == 752) { set resp.status = 503; return (deliver); } }
haproxy.cfg
frontend HTTP-IN mode http default_backend Varnishes backend Varnishes mode http balance roundrobin option httpchk HEAD /varnishcheck http-check expect status 200 server Varnish-1 1.1.1.1:80 check server Varnish-2 2.2.2.2:80 check