HAProxy beralih ke cadangan pada 500 kesalahan dan / atau server down

8

Saya sedang menyiapkan HAProxy di depan hanya 2 server backend, dengan konfigurasi tertentu: setiap permintaan harus masuk ke server A; tetapi, jika server A mengembalikan kode kesalahan 5xx, semua permintaan harus pergi ke server cadangan B. Ketika A mengembalikan "naik", semua permintaan harus pergi ke A.

Saya mencoba konfigurasi ini:

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

Tetapi itu tidak berhasil karena dua alasan:

  1. Semua permintaan dialihkan ke server node_back (B), bahkan jika node1 (A) sudah habis.
  2. Tampaknya tidak ada httpcheck yang dilakukan terhadap server A; atau lebih baik, di syslog saya tidak melihat kesalahan tentang server A turun.

Jika saya menghapus baris "opsi httpchk", dan dua baris tepat di bawahnya; dan saya menghapus juga "mengamati layer7" di server A; HAProxy bekerja dengan merutekan semua permintaan ke simpul A. Tapi, jelas, ketika server A mengembalikan 500, HAProxy tidak beralih ke B. Jadi, saya mengasumsikan bahwa masalahnya mungkin ada di opsi konfigurasi httpchk.

Carmine Giangregorio
sumber
1
Ini bisa dilakukan dengan nginx. Sebenarnya, saya menghindari haproxy di web-balancing, karena nginx lebih fleksibel dan sederhana, karena ini adalah web-server. Tapi, karena pertanyaan awal adalah tentang haproxy, saya tidak merasa berhak untuk memberikan jawaban tentang nginx. Tetapi jika Anda menginginkannya, saya bisa. Lagi pula, hampir satu tahun telah berlalu, saya pikir Anda telah menemukan solusinya.
drookie

Jawaban:

1

Dari dokumentasi resmi: Penyeimbangan Beban Pasif Aktif Dengan 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
pengguna5994461
sumber
0

Omong-omong, saya sudah menemukan konfigurasi pra-nginx untuk haproxy saya, dan saya pikir Anda harus mencobanya:

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
drookie
sumber