
Я думаю о том, чтобы поставить Varnish между HAProxy и Apache. Это работает, однако с Varnish между HAProxy следит за Varnish. Если Apache выйдет из строя, он не переключится на другой Apache.
Есть ли конфигурация в HAProxy, которая позволит решить эту проблему?
решение1
Если Varnish находится между HAproxy и Apache, вы можете просто заставить Varnish выполнитьБалансировка нагрузки, хотя он и не так надежен, как варианты, предоставляемые HAproxy.
Возможно, было бы лучше, если бы HAproxy отправлял статический контент в Varnish, а остальное — напрямую на внутренние серверы.
На Haproxy.com есть очень хорошая статья о том, как это сделать.здесь.
Если вы действительно хотите, чтобы HAproxy проверял статус VarnishиApache одновременно (которые находятся на одном хосте), у вас есть два варианта:
Настройте фиктивные бэкэнды/серверы в 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 (OK, если Apache работает, в противном случае FAILED).
лак.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