2017-08-08 27 views
6

Düğüm uygulamam için bir VM ölçek kümesi kullanıyorum. Uygulamamın www.mydomain.com/api/healthcheck aracılığıyla herkese açık bir eylemi var ve yalnızca bazı jsonları yazdırıyor. TCP protokolünü kullanmak için sağlık probu yapılandırdığımda, her şey iyi çalışıyor ve benim api bana beklenen jsonu (ve durum 200) döndürüyor. Ancak, şimdi HTTP ve path = /api/healthcheck kullanmak için sağlık soruşturmamı değiştirdiğimde, web sitem artık erişilebilir değil (ERR_CONNECTION_TIMED_OUT ... Sanırım yükleyici herhangi bir sağlıksız olduğunu söyler çünkü sağlık soruşturma her örneği alır sanırım)Sağlık probu örnekleri sağlıksız olarak işaretler ancak

Düğüm uygulamamın önünde nginx kullanıyorum, ancak LoadBalancer'ı 80 numaralı bağlantı noktası 8080'e yönlendirmek için de (test için) denedim (burada benim düğüm uygulamam her makinede çalışıyor, bu yüzden nginx proxy'den kaçınabiliyorum)). Ama aynı davranışı alıyorum.

Özel sağlık kontrolümün neden çalışmadığı konusunda fikrim yok. Umarım yardım edebilirsin.


Düzenleme: Test için yaptım şu:

  • vadede her VM, sadece baskılar "merhaba dünya" konulu port 3000 tarihinde başka nodejs uygulaması
  • (olmadan nginx vekil!)
  • port 3000 için LB kural oluşturmak ve ayrıca izin benim Nsg yapılandırın: başında tüm
  • için 3000, sağlığım sonda tcp
  • resu kullanacak şekilde yapılandırılır lt: mydoamin.com:3000/hello mevcut (baskılar merhaba ve 200 döner) 'dir
  • şimdi benim sağlık prob http -Protokolü, liman 3000 ve konumu /hello kullanmak üzere yapılandırın.
  • sonucu: benim bütün web uygulaması artık
+0

HTTP sağlık denetimi 80 numaralı bağlantı noktasını kullanarak da başarısız oluyor mu? Veya sadece 8080 portunu kullanırken mi? Ayrıca, sitenizin http uç noktasından eşdeğer https son noktaya yönlendirmesi mümkün mü? –

+0

Ayrıca 80 numaralı bağlantı noktasında da başarısız oluyor. Evet, https için bir yönlendirme oldu, ancak bu kuralı sınama durumları için sildim ama yine aynı davranışı alıyorum. – Munchkin

cevap

2

ben anlamaya böylece zor sunucunuzun kodunu göremiyorum kullanılamaz. Bazı kodları paylaştıysanız daha kolay olurdu.

Yani durumu analiz deneyelim:

İlk Kontrolü örneklerine

Bağlantı

terminali sizin makinelerinden aşağıdaki komutu gerçekleştirmek için

deneyin zaman aşımına uğradı

curl –I private-IP-address-of-the-instance:port/health-check-target-page 

şimdi buna bağlı olarak 200 dışı tepki

  • Hedef yok sayfası örneğinde yapılandırılır:

    İlk Kontrol Sonucu ... farklı farklı nedenden tucome.

  • Yanıttaki Content-Length başlığının değeri ayarlanmamış.
  • Uygulama, yükleyiciden gelen istekleri alacak veya 200 yanıt kodunu döndürecek şekilde yapılandırılmamış.

Başlangıç ​​Kontrol Sonucu: örnek yapılandırılmış tepki zaman aşımı süresi içinde yanıt vermemenin olan örneğine

  • doğrudan bağlanabiliyor.
  • Örnek, önemli bir yük altında ve yanıt vermek üzere yapılandırılmış yanıt zaman aşımı süresinden daha uzun sürüyor.
  • HTTP veya HTTPS bağlantısı kullanıyorsanız ve numaralı sağlık denetimi ping yolu alanında belirtilen bir hedef sayfada gerçekleştiriliyorsa (örneğin, HTTP: 80/index.html), hedef sayfa Yapılandırılmış zaman aşımınızdan daha uzun süre yanıt vermek için almak.

Diğer: Örnek yük dengeleyici gelen

Problem trafik elde değildir: örneğin güvenlik grubu yük dengeleyici trafik engelliyor.

Sorunu doğrulamak için örnekte bir paket yakalama yapın. Aşağıdaki komutu kullanın:

tcpdump port health-check-port 
+0

Teşekkür ederiz! Bu adımları takip edip çalışıp çalışmayacağını (muhtemelen yarın) bildireceğim – Munchkin

+1

Şimdi çalışıyor! curl –örneğin özel IP-adresi: port/sağlık-kontrol-hedef-sayfası ”nginx'in sunucu adını tanımlayamadığını söyledi - çünkü tüm sunucumda {} -blocks Bu satır var: 'server_name * .mydomain.com;'. Şimdi bunu nginx config'ma ekledim: 'server {listen 81; location =/my/healthcheck {...}} ', port 81 için bir NSG kurdu ve sağlık probumu '81' portunu kullanacak şekilde yapılandırdı ve yolum/healthcheck ' – Munchkin

+0

İyi! Yönetmene sevindim:] – EMX