Arka Uçlar (Backends) ve Health Probes

Şimdiye kadar ele aldığımız tüm VCL, Varnish’in davranışını değiştirmemize izin veren rutinler ile ilgiliydi. Ancak, Varnish'in asıl amacı arka uç yanıtlarını önbelleğe almak olduğunu unutmayın. Bu yüzden arka uçların VCL yönünü ele almamızın zamanı geldi. Genel olarak aşağıdaki gibi gözükür.

backend name {
  .attribute = "value";
}

Varnish, önce tanımlanmış olan arka uca otomatik olarak bağlanır. Diğer arka uçlar sadece req.backend_hint değişkenine değer atayarak kullanılabilir.

Desteklenen arka uç nitelik listesi:

Nitelik

Görevi

hostname

Arka ucun alan adını veya IP'sini temsil eden zorunlu bir nitelik.

port

Kullanılacak olan arka uç bağlantı noktası. Varsayılan bağlantı noktası 80'dir.

connect_timeout

Varnish, arka uç ile bağlantı için beklediği süredir. Varsayılan değer 3,5 saniyedir.

first_byte_timeout

Varnish'in ilk bağlantıdan sonra arka uçtan geri döndürülecek ilk bayt için beklediği süre. Varsayılan değer 60 saniyedir.

between_bytes_timeout

Varnish'in eşit miktarda veri akışı sağlamak için her bayt arasında beklediği süre miktarı. Varsayılan değer 60 saniyedir.

max_connections

Arka uçla eşzamanlı bağlantıların toplam sayısı. Sınıra ulaşıldığında, yeni bağlantılar kesilir. Arka ucunuzun bu miktarda bağlantıyı kaldırabileceğinden emin olun.

prob

Arka ucun sağlığını kontrol etmek için kullanılır.

backend default {
  .host = "127.0.0.1";
  .port = "8080";
  .connect_timeout = 2s;
  .first_byte_timeout = 5s;
  .between_bytes_timeout = 1s;
  .max_connections = 150;
}

Yukarıdaki örnekte, 8080 numaralı bağlantı noktasında yerel makineyle bağlantı kurulur. İlk bağlantı için en fazla iki saniye bekleyecek. Bağlantı kurulduktan sonra, ilk baytı almak için beş saniye kadar bekleyecek. Bundan sonra düzenli bir frekans ile bayt almak istiyoruz. Her bayt arasında en fazla bir saniye bekleyecek. Arka uçla aynı anda 150 bağlantıya izin verecek.

Arka uçtan daha fazla istek max_connections ayarında izin verilenden daha fazla olursa, başarısız olurlar.

Kriterlerden herhangi biri karşılanmazsa, arka uç hatası atılır ve HTTP 503 durum koduyla vcl_backend_error'a iletilir.

Bir arka uç probu kullanılmadan, sağlıksız bir arka uç ancak bağlantı koptuğunda tespit edilebilir. Sözde bir arka uç probu, arka uçları düzenli olarak sorgulayacak ve belirli koşullara dayanarak sağlığını kontrol edecektir. problar arka uçlara benzer şekilde tanımlanabilir.

probe name {
  .attribute = "value";
}

Nitelik

Görevi

url

prob tarafından istek yapılacak url. Bu varsayılan olarak / olarak ayarlanmıştır.

request

Arka uçlara gönderilecek HTTP isteği.

expected_response

Arka uç tarafından döndürülmesi beklenen HTTP durum kodu. Bu, varsayılan değer 200'dür.

timeout

probun bir arka uç yanıtı için beklediği süre. Varsayılan değer 2 saniyedir.

interval

probun ne sıklıkla çalıştırılacağı. Varsayılan değer 5 saniyedir.

window

Arka uç sağlığını belirlemek için yapılan yoklama sayısı. Varsayılan değer 8'dir.

threshold

window'da arka ucun sağlıklı olması için başarılı olunması gereken yoklama sayısı. Bu, varsayılan değer 3'tür.

initial

Varnish bir arka uç sağlığı kontrol edilmeye başlamadan ilk kontrol de gerekli başarı sayısı. Varsayılan eşik değeri - 1.

Örnek bir kod aşağıda:

backend default {
  .host = "127.0.0.1";
  .port = "8080";
  .probe = {
    .url = "/";
    .expected_response = 200;
    .timeout = 1s;
    .interval = 1s;
    .window = 5;
    .threshold = 3;
    .initial = 2;
  }
}

Yukarıdaki örnekte: arka uç 8080 numaralı bağlantı noktasındaki yerel ana bilgisayara bağlanmaya çalışır. Arka uç sağlığını belirleyen bir arka uç probu vardır. prob, kök URL'deki 8080 numaralı bağlantı noktasında arka uça yoklama yapar. Bir yoklamanın başarılı olması için 200 durum kodlu bir HTTP yanıtı bekleniyor ve bu yanıt bir saniye içinde verilmeli.

Her saniye, prob arka ucu yoklayacak ve beş yoklama sonucu sağlığı belirlemek için kullanılıyor. Bu beş yoklamadan en az üçünün, arka uç sağlıklı olduğunu düşünmesi için başarılı olması gerekir. Başlangıçta, bu iki yoklama olmalıdır.

Ayrıca bir probu açıkça tanımlayabilir, adlandırabilir ve bu probu çoklu arka uçlar için yeniden kullanabiliriz. İşte bunu yapan bir kod örneği:

probe myprobe {
    .url = "/";
    .expected_response = 200;
    .timeout = 1s;
    .interval = 1s;
    .window = 5;
    .threshold = 3;
    .initial = 2;
}

backend default {
    .host = "my.primary.backend.com";
    .probe = myprobe;
}

backend backup {
   .host = "my.backup.backend.com";
   .probe = myprobe;
}

Last updated