Saat mengonfigurasi HA Proxy, bagaimana Anda memutuskan nilai apa yang akan ditetapkan untuk timeout? Saya telah membaca setengah lusin sampel di berbagai blog, dan semua orang menggunakan batas waktu berbeda dan tidak ada yang membahas mengapa.
HAProxy secara khusus khawatir tentang klien, koneksi, dan server, yang HAPRoxy berikan peringatan jika Anda benar-benar tidak disetel:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
The dokumentasi tidak membantu dalam hal ini: itu menunjukkan "kelipatan sedikit di atas dari 3 detik" tapi tidak mengapa Anda akan memilih beberapa dari 1 vs 100 atau 42.
RPM yang saya gunakan (repositori Amazon Linux) menetapkan default ini:
timeout connect 10s
timeout client 1m
timeout server 1m
Dua di antaranya adalah kelipatan tepat 3 detik, melanggar satu-satunya saran resmi yang pernah saya lihat.
Jika Anda tidak memiliki saran penyetelan tertentu, mungkin pertanyaan yang lebih mudah adalah: apa yang harus saya perkirakan salah dengan timeout yang sangat pendek atau sangat lama?
Kata pengantar
Saya telah menyetel HAProxy sebentar dan melakukan banyak pengujian kinerja di atasnya. Dari 100 permintaan HTTP hingga 50.000 permintaan HTTP.
Saran pertama adalah mengaktifkan halaman statistik di HAProxy . Anda MEMBUTUHKAN pemantauan, tidak terkecuali. Anda juga akan membutuhkan penyetelan yang bagus jika Anda bermaksud melampaui 10.000 permintaan.
Timeout adalah binatang yang membingungkan karena mereka memiliki sejumlah besar nilai yang mungkin, kebanyakan dari mereka tidak memiliki perbedaan yang dapat diamati. Saya belum melihat sesuatu yang gagal karena angka 5% lebih rendah atau 5% lebih tinggi. 10000 vs 11000 milidetik, siapa yang peduli? Mungkin bukan sistem Anda.
Konfigurasi
Dalam hati nurani yang baik, saya tidak bisa memberikan beberapa angka sebagai 'batas waktu terbaik untuk semua orang'.
Yang bisa saya katakan adalah timeout paling agresif yang selalu dapat diterima untuk penyeimbangan beban HTTP (S). Jika Anda menemukan lebih rendah dari ini, saatnya untuk mengkonfigurasi ulang penyeimbang beban Anda.
klien timeout:
Baca : Ini adalah waktu maksimum untuk menerima tajuk permintaan HTTP dari klien.
3G / 4G / 56k / satelit terkadang lambat. Namun, mereka harus dapat mengirim tajuk HTTP dalam beberapa detik, BUKAN 30.
Jika seseorang memiliki koneksi yang sangat buruk sehingga perlu lebih dari 30-an untuk meminta halaman (kemudian lebih dari 10 * 30-an untuk meminta 10 gambar yang disematkan / CSS / JS), saya yakin dapat diterima untuk menolaknya.
server batas waktu:
Baca : Ini adalah waktu maksimum untuk menerima header respons HTTP dari server (setelah menerima permintaan klien lengkap). Pada dasarnya, ini adalah waktu pemrosesan dari server Anda, sebelum mulai mengirim respons.
Jika server Anda sangat lambat sehingga membutuhkan lebih dari 30-an untuk mulai memberikan jawaban, maka saya percaya itu dapat diterima untuk menganggapnya mati.
Kasus Khusus : Beberapa layanan RARE yang melakukan pemrosesan sangat berat mungkin membutuhkan satu menit penuh atau lebih untuk memberikan jawaban. Waktu tunggu ini mungkin perlu ditingkatkan banyak untuk penggunaan khusus ini. (Catatan: Ini mungkin merupakan kasus desain yang buruk, menggunakan komunikasi gaya async atau tidak menggunakan HTTP sama sekali.)
batas waktu koneksi:
Baca : Waktu maksimum server harus menerima koneksi TCP.
Server berada di LAN yang sama dengan HAProxy sehingga harus cepat. Berikan setidaknya 5 detik karena itulah berapa lama waktu yang dibutuhkan ketika sesuatu yang tidak terduga terjadi (paket TCP yang hilang untuk mentransmisikan kembali, server yang meminta proses baru untuk menerima permintaan baru, lonjakan lalu lintas).
Kasus Khusus : Ketika server berada dalam LAN yang berbeda atau melalui tautan yang tidak dapat diandalkan. Waktu tunggu ini mungkin perlu ditingkatkan banyak. (Catatan: Ini kemungkinan merupakan kasus arsitektur yang buruk.)
pemeriksaan batas waktu:
Baca : Saat melakukan pemeriksaan kesehatan, server harus
timeout connect
menerima koneksi lalutimeout check
memberikan respons.Semua server HARUS memiliki pemeriksaan kesehatan HTTP (S) yang dikonfigurasi. Itulah satu-satunya cara penyeimbang beban untuk mengetahui apakah server tersedia. Pemeriksaan kesehatan adalah
/isalive
halaman sederhana yang selalu menjawabOK
.Berikan batas waktu ini setidaknya 5 detik karena itu berapa lama waktu yang diperlukan ketika sesuatu yang tidak terduga terjadi (paket TCP yang hilang untuk mengirim ulang, server yang meminta proses baru untuk menerima permintaan baru, lonjakan lalu lintas).
Kisah Perang : Banyak orang salah percaya bahwa server selalu dapat menjawab halaman sederhana ini dalam 3 ms. Mereka menetapkan batas waktu agresif (<2000 ms) dengan failover agresif (2 pemeriksaan gagal = server mati). Saya telah melihat seluruh situs web turun karena itu. Biasanya ada sedikit lonjakan lalu lintas, server backend menjadi lebih lambat, pemeriksaan kesehatan tertunda ... sampai tiba-tiba mereka semua timeout bersama, HAProxy berpikir SEMUA server mati sekaligus dan seluruh situs mati.
sumber