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
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
@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