Sunucu arızalı ama TR7 hâlâ trafik gönderiyor; neden?
Kısa cevap
Başlıca neden, Kurum Servisine health check atanmamış olmasıdır; bu durumda TR7 sunucunun düştüğünü anlamaz ve Health kolonunda koyu gri güç simgesi (Off) görünür. Diğer nedenler: TCP ya da Ping gibi yüzeysel bir denetimin uygulama arızasını yakalamaması, kararın oluşması için birkaç saniye geçmesi, ANY - L3 ya da Port Range açık Network vService'lerde sağlık durumunun dağıtıma yansımaması, sunucuda açık kalan bağlantılar, denetimin Use Different IP for Health Check ile başka bir adrese bakması, Scenario'daki OR mantığı ve açık bırakılmış Expect Negative Result.
Nasıl Çalışır?
TR7 bir sunucuyu yalnızca o sunucunun health check Error olduğunda trafikten çıkarır; denetim yoksa, sağlıklı sonuç veriyorsa ya da vService tipi sağlık durumunu kullanmıyorsa trafik gönderilmeye devam eder.
| Neden | Nasıl anlaşılır | Çözüm |
|---|---|---|
| Health check atanmamış | Health kolonunda koyu gri güç simgesi (Off), Health Check Type kolonunda No Check | Kurum Servisine profil atamak (Health Check ne işe yarar; atamazsam ne olur?) |
| Yüzeysel denetim | Tür TCP ya da Ping; uygulama hata dönerken port açık | HTTP/HTTPS ve içerik kontrolüne geçmek (TCP port kontrolü ile HTTP kontrolü arasındaki fark nedir; hangisini seçmeliyim?) |
| Karar süresi | Arızadan birkaç saniye sonra trafik kesiliyor | Beklenen davranış; süre Required failures, Period ve Timeout'a bağlıdır (Bir sunucu kaç saniyede "down" kabul edilir, bunu nasıl hesaplarım?) |
| Network ANY - L3 / Port Range | vService'te Protocol ANY - L3 ya da Port Range açık | Bu vService'lerde sağlık durumu dağıtıma yansımaz; sağlık durumu gerekiyorsa TCP - L4 / UDP - L4 ve Port Range kapalı kullanılır |
| Açık bağlantılar | WebSocket ya da keep-alive bağlantıları eski sunucuda | Sunucu Error olduğunda yeni bağlantılar başka sunucuya gider; açık bağlantılar kendiliğinden kapanana kadar sürer |
| Denetim başka adrese bakıyor | Use Different IP for Health Check sağlıklı başka bir uca bakıyor | Denetim adresini sunucunun gerçek durumunu yansıtan bir uca yöneltmek (Health Check için sunucunun farklı bir IP'sini/portunu kontrol edebilir miyim (Use Different IP for Health Check)?) |
| Sağlık adresi yanıltıcı | /health 200 dönüyor ama asıl işlev bozuk | Sağlık adresini uygulamanın gerçek durumunu dönecek şekilde tasarlamak (Uygulamamda health check için nasıl bir /health endpoint'i tasarlamalıyım?) |
| Scenario OR | Alt denetimlerden biri başarılıysa sonuç sağlıklı | Gerekli denetimleri AND ile birleştirmek (Bir Kurum Servisine birden fazla health check atayabilir miyim?) |
| Expect Negative Result | Denetim başarısız olduğu hâlde sunucu sağlıklı | Seçeneği kapatmak ("Expect Negative Result" ne işe yarar?) |
| Yedek sunucuda health check yok | Ana sunucular düşünce trafik kapalı yedeğe gidiyor | Backup Service işaretli sunucuya da profil atamak |
Teşhis Adımları
- Backend Services listesi: Load Balancer → Backend Services ekranında Health ve Health Check Type kolonlarından profil atanmamış Kurum Servisleri bulunur; Filter → Health kartı atanmış profilleri listeler.
- HTTP Logs: Hatalı yanıtları hangi Kurum Servisinin verdiği vService'in HTTP Logs ekranındaki Kurum Servisi kolonundan görülür.
- Health Checks sekmesi ve Dashboard: Kurum Servisinin Health Checks sekmesindeki sonuçlar ve Dashboard'daki Health Check State paneli incelenir; arıza sırasında durum OK kaldıysa denetim arızayı görmüyordur.
Sık Karıştırılan Noktalar
- "TR7 kapalı sunucuyu kendiliğinden fark eder." Health check atanmamışsa fark etmez.
- "Port açıksa uygulama çalışıyordur." TCP denetimi uygulama arızasını yakalamaz.
- "Sunucu Error olunca açık bağlantılar da kesilir." Yalnızca yeni bağlantılar başka sunuculara gider; açık bağlantılar sürer.
Dokümantasyonda nasıl yapılır
