2015-08-02 30 views
5

Używam Haproxy 1.5.14 w maszynie wirtualnej VirtualBox (Boot2docker), w której ładowane przez nią zasoby sporadycznie pojawiają się w wersji 503 bez prawdziwego rymu lub przyczyny, jest to szczególnie prawdziwe przy uruchamianiu klastra.Haproxy i sporadyczne problemy z 503

Klaster wygląda tak: 1 interfejs z portem 80 i 443 na 2 systemy zaplecza obsługujące odpowiednio zasoby statyczne i pliki sieci Web.

HAProxy

  • FE (front-end dla zasobów statycznych)
  • BE (back-end dla połączeń websocket)

Na przykład statyczne atutem podawane przez przedni koniec może być

https://local.dev.myproject.com/assets/images/back.png

Pomimo powrotem Nt serwer końcowy jest w górze, a nic się nie zmieniło, uderzając w odświeżenie i patrząc na chrome debuggera, zobaczę wiele statusów 503 lub OK 200 304, ale to nie jest deterministyczne. Można przejść od 503 do OK, aby z powrotem do 503, na dowolnym aktywem. Po bezpośrednim połączeniu z serwerem internetowym aktywa zwracają się dobrze, więc wydaje się, że jest to coś z haproxy.

Najlepsze co mogę zrobić, to to, że kontrola stanu nie działa poprawnie i serwer FE/BE jest tymczasowo usuwany z wewnętrznego zbioru haproxy, ale to nie ma sensu, że sprawdza co pół sekundy i widzę wywołania haproxy są zwracane przez okno terminala FE/BE ok, co pół sekundy zgodnie z oczekiwaniami.

Jeśli spojrzę na raport statystyczny haproxy, widzę serwery okresowo przychodzące i wychodzące, migoczące, mimo że w oknie terminala haproxy wciąż wywołuje testy zdrowotne bez przerw i serwery zwracają je zgodnie z oczekiwaniami.

Dołączona jest aktualna konfiguracja haproxy, której używam, każda pomoc jest doceniana.

#--------------------------------------------------------------------- 
# Example configuration for a possible web application. See the 
# full configuration options online. 
# 
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt 
# 
#--------------------------------------------------------------------- 

#--------------------------------------------------------------------- 
# Global settings 
#--------------------------------------------------------------------- 
global 
    # to have these messages end up in /var/log/haproxy.log you will 
    # need to: 
    # 
    # 1) configure syslog to accept network log events. This is done 
    # by adding the '-r' option to the SYSLOGD_OPTIONS in 
    # /etc/sysconfig/syslog 
    # 
    # 2) configure local2 events to go to the /var/log/haproxy.log 
    # file. A line like the following can be added to 
    # /etc/sysconfig/syslog 
    # 
    # local2.*      /var/log/haproxy.log 
    # 
    #log   127.0.0.1 local2 
    # log /lnl_zoom_shared/log local0 
    # log /lnl_zoom_shared/log local1 notice 

    chroot  /var/lib/haproxy 
    pidfile  /var/run/haproxy.pid 
    maxconn  4000 
    user  haproxy 
    group  haproxy 
    daemon 
    # SSL 
    #ca-base /etc/ssl 
    #crt-base /etc/ssl 
    ca-base /myproject_shared/SECURITY/local.dev.myproject.com/ 
    crt-base /myproject_shared/SECURITY/local.dev.myproject.com/ 
    tune.ssl.default-dh-param 1024 

    # turn on stats unix socket 
    #stats socket /var/lib/haproxy/stats 

    # Exposes the stat socket so we can manage the proxy through node.js 
    stats socket /tmp/haproxy.sock level admin 

#--------------------------------------------------------------------- 
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block 
#--------------------------------------------------------------------- 
defaults 
    mode     http 
    log      global 
    option     httplog 
    option     http-server-close 
    option     http-pretend-keepalive 
    option     dontlognull 
    option     redispatch 
    option     contstats 
    option forwardfor  except 127.0.0.0/8 


    retries     3 
    backlog     10000 
    timeout client   25s 
    timeout connect   10s 
    timeout server   25s 
    #long timeoutfor websocket connections 
    timeout tunnel   3600s 
    timeout http-keep-alive 1s 
    timeout http-request 15s 
    timeout queue   30s 
    timeout tarpit   60s 
    default-server inter 3s rise 2 fall 3 
    #timeout check   10s 

    maxconn     256 

#--------------------------------------------------------------------- 
# Haproxy's internal stats on the servers below: password protected 
#--------------------------------------------------------------------- 
stats enable 
    stats auth admin:myadminpassword 
    stats uri /haproxy 
    stats refresh 5s 


#--------------------------------------------------------------------- 
# 
#--------------------------------------------------------------------- 
frontend public 
    # HTTP 
    bind *:80 

    # Redirect all HTTP traffic to HTTPS 
     redirect scheme https if !{ ssl_fc } 

     # HTTPS 
     # Example with CA certificate bundle 
     # bind :443 ssl crt cert.pem ca-file bundle.crt 
     # Example without CA certification bunch 
     bind *:443 ssl crt /myproject_shared/SECURITY/local.dev.myproject.com/local.dev.myproject.com.pem 


     acl url_static_BE path_beg -i /BE /primus 
     use_backend BE   if url_static_BE 

     # FRONT END (aka FE) STATIC ASSETS SERVER 
     # if path is a static asset, assume the front end server to handle it 
     acl url_static path_beg -i /static /images /javascript /stylesheets 
     acl url_static path_end -i .jpg .gif .png .css .js .html .ico 
     use_backend FE   if url_static 



     # GIT HOOKS for UPDATE on the git repo changes 
     acl url_githook  path_beg  -i /gitupdate 
     use_backend HACNTL   if url_githook 

     #BACK END (aka BE) 



    default_backend BE 




#--------------------------------------------------------------------- 
# controller for haproxy 
#--------------------------------------------------------------------- 
backend HACNTL 
    # Tell the backend that this is a secure connection, 
    # even though it's getting plain HTTP. 
    option forwardfor 
    http-request add-header X-Forwarded-Proto https if { ssl_fc } 

    server  SELF 127.0.0.1:3300 

#--------------------------------------------------------------------- 
# static backend for serving up images, stylesheets and such 
#--------------------------------------------------------------------- 
backend FE 
    # Tell the backend that this is a secure connection, 
    # even though it's getting plain HTTP. 
    option forwardfor 
    http-request add-header X-Forwarded-Proto https if { ssl_fc } 
    option httpchk GET /haproxy/getstatus 
    option httpchk HEAD/
    balance  roundrobin 

    #server  FE1 11.22.33.44:8000 maxconn 256 
    server FE_172.17.0.2 172.17.0.2:8000 maxconn 256 check inter 500ms 

#--------------------------------------------------------------------- 
# round robin balancing between the various backends 
#--------------------------------------------------------------------- 
backend BE 
    # Tell the backend that this is a secure connection, 
    # even though it's getting plain HTTP. 
    option forwardfor 
    http-request add-header X-Forwarded-Proto https if { ssl_fc } 
    #http-request set-header X-Custom-Header %[url] 
    #http-request set-header Connection upgrade 
    #http-request set-header Upgrade websocket 
    option httpchk GET /haproxy/getstatus 
    cookie SRVNAME insert nocache 
    balance  roundrobin 


    server BE_172.17.0.3 172.17.0.3:8888 maxconn 256 cookie  BE_172.17.0.3 check inter 500ms 

Odpowiedz

0

Chociaż nie jest to absolutna poprawka, pozwalając każdemu serwerowi na uruchomienie po jednym na raz, poprawiono problem na teraz. zasadniczo dodawanie snu między poleceniem do dokowania

+0

Mam taką samą sytuację, haproxy-> docker nginx z aplikacją uwsgi i bardzo często mam 503 kiedy strona jest odświeżana. Czy mógłbyś rozwinąć swoje rozwiązanie, co masz na myśli "pozwalając każdemu serwerowi uruchamiać po jednym na raz"? – ksopyla

+0

@ksirg istnieje kilka różnych 503 problemów, ten sam błąd, który pochodzi z różnych źródeł. Moja aplikacja ma kilka kontenerów dokowania dla usługi sieciowej (na przykład 1), 2) serwery frontonu 3) haproxy do loadbalance), że gdy uruchomię je wszystkie naraz, spowoduje to natychmiastowe błędy 503 przy uruchomieniu. Uruchamianie ich pojedynczo z kilkuminutowym opóźnieniem między nimi zmniejszyło 503 przy starcie, ale po odświeżeniu, innym razem wciąż pojawiają się z przyczyn, których nie rozumiem. Ale myślę, że jest związana z siecią. – TroyWorks

Powiązane problemy