Назад | Перейти на главную страницу

Varnish 3.0.5 round robin Director не балансирует

У меня есть архитектура с двумя серверами лакировки, расположенными перед 5 веб-головками. Каждый сервер varnish настроен с помощью бэкэнд-директора циклического перебора, но временами от умеренной до высокой нагрузки varnish, кажется, сильно отдает предпочтение первому определенному бэкэнду в списке.

Версия лака - 3.0.5.

Если первый бэкэнд отмечен как неисправный, второй бэкэнд в списке пользуется большим преимуществом и так далее.

varnish> backend.list
200
Backend name                   Refs   Admin      Probe
web1(************,,8080)       102    probe      Healthy 8/8
web2(************,,8080)       17     probe      Healthy 8/8
web3(************,,8080)       9      probe      Healthy 8/8
web4(************,,8080)       17     probe      Healthy 8/8
web5(************,,8080)       12     probe      Healthy 8/8

Некоторые части VCL, которые могут быть уместны:

probe healthcheck {
   .request =
         "GET /LICENSE.txt HTTP/1.1"
         "Host: **********.co.uk"
         "Connection: close";
   .interval = 120s;
   .timeout = 90s; # High values due to expected slow responses
   .window = 8;
   .threshold = 3;
   .initial = 3;
   #.expected_response = 200; # Still want the Magento maintenance page to display so no response code check
}

backend web1 {
    .host = "************";
    .port = "8080";
    .connect_timeout = 240s; # High values due to expected slow responses
    .first_byte_timeout = 240s; # High values due to expected slow responses
    .between_bytes_timeout = 240s; # High values due to expected slow responses
    .probe = healthcheck;
}
backend web2 {
    .host = "************";
    .port = "8080";
    .connect_timeout = 240s; # High values due to expected slow responses
    .first_byte_timeout = 240s; # High values due to expected slow responses
    .between_bytes_timeout = 240s; # High values due to expected slow responses
    .probe = healthcheck;
}
backend web3 {
    .host = "************";
    .port = "8080";
    .connect_timeout = 240s; # High values due to expected slow responses
    .first_byte_timeout = 240s; # High values due to expected slow responses
    .between_bytes_timeout = 240s; # High values due to expected slow responses
    .probe = healthcheck;
}
backend web4 {
    .host = "************";
    .port = "8080";
    .connect_timeout = 240s; # High values due to expected slow responses
    .first_byte_timeout = 240s; # High values due to expected slow responses
    .between_bytes_timeout = 240s; # High values due to expected slow responses
    .probe = healthcheck;
}
backend web5 {
    .host = "************";
    .port = "8080";
    .connect_timeout = 240s; # High values due to expected slow responses
    .first_byte_timeout = 240s; # High values due to expected slow responses
    .between_bytes_timeout = 240s; # High values due to expected slow responses
    .probe = healthcheck;
}

director backend_director round-robin {
    { .backend = web1; }
    { .backend = web2; }
    { .backend = web3; }
    { .backend = web4; }
    { .backend = web5; }
}

sub vcl_recv {
    set req.backend = backend_director;

    # loads more stuff
}

Может ли кто-нибудь пролить свет на то, почему циклический директор так сильно отдает предпочтение первому заданному бэкэнду или что может привести к полному обходу директора? Я уже убедился, что return(pipe) не используется в vcl_recv.