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:
- Semua permintaan dialihkan ke server node_back (B), bahkan jika node1 (A) sudah habis.
- 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.