Pemeriksaan kesehatan HAProxy: menggunakan httpchk dan amati?

10

Saya menggunakan HAProxy 1.4.18 dengan konfigurasi backend berikut

backend staging
  option httpchk HEAD /check.txt HTTP/1.0
  http-check disable-on-404
  default-server error-limit 1 on-error mark-down
  server staging01 x.x.x.x:80 check observe layer7
  server staging02 x.x.x.x:80 check observe layer7

Server menjalankan beberapa aplikasi pada apache / penumpang.

Kombinasi httpchk dan disable-on-404 memungkinkan shutdown yang anggun dan menghapus server dari lb cukup mudah sementara masih dapat mengakses langsung (yaitu untuk pengujian).

Saya mencoba untuk mengatur pengamatan untuk menonaktifkan server ketika aplikasi tidak berfungsi. Saya telah merusak konfigurasi aplikasi pada staging02 sehingga selalu mengembalikan 500. Ini ditandai dengan benar BAWAH setelah 500 pertama tetapi kemudian ditandai ATAS di httpchk berikutnya.

Ini file lognya:

Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.

Apakah ada cara untuk menggabungkan kedua cek itu?

ouranos
sumber
Hanya untuk memastikan bahwa HAProxy pasti masalahnya, dapatkah Anda menemukan tiga baris log yang cocok dari server Apache backend Anda dan menambahkannya ke pertanyaan Anda?
Ladadadada
Salah satu server apache sengaja dikonfigurasikan sehingga semua aplikasi yang ada di dalamnya mengembalikan kode kesalahan 500. Namun /check.txt selalu berfungsi kecuali saya menghapus file. Saya ingin server apache dinonaktifkan jika mengembalikan 500 kesalahan bahkan jika file check.txt masih ada.
ouranos

Jawaban:

4

Perbedaan yang saya pahami sekarang adalah /check.txt benar - benar mengembalikan 200 tanggapan tetapi semua permintaan ke aplikasi mengembalikan 500. HAProxy melihat 500-an kembali dari permintaan yang diproksi dan mengeluarkan server dari kolam tetapi kemudian memulai sendiri periksa, terima 200 dan pasang kembali server.

Solusinya adalah dengan melakukan salah satu dari:

  1. Konfigurasikan Apache, daripada aplikasi, sehingga setiap permintaan mengembalikan respons 500, bahkan file statis /check.txt.
  2. Ubah /check.txtmenjadi aplikasi Ruby yang berisi cukup banyak logika untuk memilih antara tanggapan 200 dan 500 bila perlu.
  3. Tetapkan internilainya menjadi sesuatu yang konyol seperti 3600. Ini akan memberi Anda waktu satu jam untuk melakukan pengujian Anda atau (jika server turun sendiri) mencari tahu masalahnya dan membawanya kembali.
  4. Tetapkan internilai ke sesuatu yang lebih kecil seperti 60 tetapi tetapkan risenilai ke sesuatu yang lebih tinggi seperti 60. Ini juga akan memberi Anda satu jam sebelum server ditambahkan kembali ke kolam. (Catatan, keduanya terdaftar terakhir karena mereka mungkin ide yang sangat buruk.)
Ladadadada
sumber
Ya itulah yang terjadi. Saya pikir saya harus menyingkirkan /check.txtdan mengarahkan httpchk ke satu aplikasi. The check.txtFile berguna untuk cepat dan anggun menghapus server dari semua HAProxy (3 dari mereka di setup HA, hanya satu yang aktif). Tampaknya juga disable servertidak ada di antara reload.
ouranos