HAProxy passa al backup su 500 errori e / o server inattivo


8

Sto configurando un HAProxy di fronte a solo 2 server back-end, con una configurazione particolare: qualsiasi richiesta dovrebbe andare al server A; ma, se il server A restituisce un codice di errore 5xx, tutte le richieste devono essere inviate a un server di backup B. Quando A restituisce "attivo", tutte le richieste devono essere indirizzate ad A.

Sto provando questa configurazione:

backend example_cluster
        balance roundrobin
        option httpclose
        option forwardfor

        option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
        http-check disable-on-404
        default-server error-limit 1 on-error mark-down

        redirect scheme https if !{ ssl_fc }
        server node1 1.2.3.4:80 check observe layer7
        server node_back 5.6.7.8:443 backup ssl verify none

Ma non funziona per due motivi:

  1. Tutte le richieste vengono instradate al server node_back (B), anche se node1 (A) è attivo.
  2. Sembra che nessun controllo http venga eseguito sul server A; o meglio, in syslog non vedo alcun errore riguardo al server A inattivo.

Se rimuovo la riga "opzione httpchk" e le due righe appena sotto di essa; e rimuovo anche "osservare layer7" nel server A; HAProxy funziona indirizzando tutte le richieste al nodo A. Ma, ovviamente, quando il server A restituisce un 500, HAProxy non passa a B. Quindi, presumo che il problema potrebbe essere nell'opzione configurazione httpchk.


1
È perfettamente fattibile con nginx. In effetti, sto evitando il haproxy sul bilanciamento del web, perché nginx è più flessibile e semplice, dal momento che è un web server. Ma, dal momento che la domanda iniziale riguardava il haproxy, non ho il diritto di fornire una risposta su nginx. Ma se lo vuoi, posso. Dopo tutto, è passato quasi un anno, penso che tu abbia trovato una soluzione comunque.
drookie

Risposte:


1

Dalla documentazione ufficiale: Bilanciamento del carico passivo attivo con HAProxy

defaults
  mode http
  option http-server-close
  timeout client 20s
  timeout server 20s
  timeout connect 4s

frontend ft_app
  bind 10.0.0.100:80 name app
  default_backend bk_app

backend bk_app
  server s1 10.0.0.1:80 check
  server s2 10.0.0.2:80 check backup

0

A proposito, ho trovato la configurazione pre-nginx per il mio haproxy e penso che dovresti provarlo:

frontend foo
    bind 192.168.0.1:9080
    option httpchk
    default_backend bar-web

backend bar-web
    mode http
    balance roundrobin
    server bar1 192.168.1.2:9080 check observe layer4 weight 50
    server bar2 192.168.1.3:9080 check observe layer4 weight 50
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.