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

Varnish 4.1: это правильный код VCL для использования локального хоста по умолчанию, если он не является нездоровым, а затем вернуться к директору?

Я просто хотел убедиться, что это самый идеальный способ добиться этого.

Вот схема: в основном у нас есть 3 сервера, «сбалансированных» циклическим перебором DNS. Varnish настраивается на каждом сервере со стандартным стеком ламп за ним.

Обычно, когда приходит запрос, мы проверяем, исправен ли бэкэнд по умолчанию, если нет, мы возвращаемся к нашему директору, который выполняет циклический перебор двух других серверов, пока бэкэнд по умолчанию снова не станет здоровым. Поэтому мы просто хотим, чтобы Varnish всегда использовал localhost, если наш бэкэнд не работает. Вот мой код:

probe healthcheck {
   .url = "/info.php";
        .timeout = 1s;
        .interval = 4s;
        .window = 5;
        .threshold = 3;
        .expected_response = 200;
}

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .probe = healthcheck;
}

#Cluster nodes
backend lamp02 {
  .host  = "192.168.0.102";
  .port = "8080";
  .probe = healthcheck;
}
backend lamp03 {
  .host  = "192.168.0.103";
  .port = "8080";
  .probe = healthcheck;
}

sub vcl_init {
    new server_pool  = directors.round_robin();
    server_pool.add_backend(lamp02);
    server_pool.add_backend(lamp03);
}

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don't need,
    # rewriting the request, etc.

    if (!std.healthy(req.backend_hint)) {
      set req.backend_hint = server_pool.backend();
    } else {
      set req.backend_hint = default;
    }
}

Это самый эффективный способ сделать это?

Спасибо!

Да. Вы можете сделать это положительно, а не отрицательно, что может быть лучше, если ваш VCL станет сложным, но ваш метод хорош.

if (std.healthy(req.backend_hint)) {
  set req.backend_hint = default;
} else {
   set req.backend_hint = server_pool.backend();
}