HAProxy alterna para backup em 500 erros e / ou servidor inoperante

8

Estou configurando um HAProxy na frente de apenas 2 servidores de back-end, com uma configuração específica: qualquer solicitação deve ir para o servidor A; mas, se o servidor A retornar um código de erro 5xx, todas as solicitações devem ir para um servidor de backup B. Quando A retorna "para cima", todas as solicitações devem ir para A.

Estou tentando esta configuração:

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

Mas isso não funciona por dois motivos:

  1. Todas as solicitações são roteadas para o servidor node_back (B), mesmo que o node1 (A) esteja ativo.
  2. Parece que nenhum httpchecks é executado no servidor A; ou melhor, no syslog não vejo nenhum erro em relação ao servidor A down.

Se eu remover a linha "option httpchk" e as duas linhas logo abaixo dela; e eu removo também o "observe layer7" no servidor A; O HAProxy funciona roteando todas as solicitações para o nó A. Mas, obviamente, quando o servidor A retorna um 500, o HAProxy não alterna para B. Então, estou assumindo que o problema pode estar na opção httpchk configuration.

    
por Carmine Giangregorio 19.02.2015 / 18:05

2 respostas

1

A partir da documentação oficial: Balanceamento ativo de carga passiva com 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
    
por 27.04.2017 / 00:40
0

A propósito, encontrei a configuração pré-nginx para o meu haproxy, e acho que você deveria tentar:

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
    
por 14.02.2016 / 17:02