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.
timeout connect 5000
timeout check 5000
timeout client 30000
timeout server 30000
klien timeout:
Batas waktu tidak aktif berlaku ketika klien diharapkan untuk mengakui atau mengirim data. Dalam mode HTTP, batas waktu ini sangat penting untuk dipertimbangkan selama fase pertama, ketika klien mengirim permintaan, dan selama respons saat sedang membaca data yang dikirim oleh server.
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:
Batas waktu tidak aktif berlaku ketika server diharapkan untuk mengakui atau mengirim data. Dalam mode HTTP, batas waktu ini sangat penting untuk dipertimbangkan selama fase pertama dari respons server, ketika harus mengirim header, karena secara langsung mewakili waktu pemrosesan server untuk permintaan tersebut. Untuk mengetahui nilai apa yang diletakkan di sana, sering kali baik untuk memulai dengan apa yang dianggap sebagai waktu respons yang tidak dapat diterima, kemudian periksa log untuk mengamati distribusi waktu respons, dan sesuaikan nilainya.
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:
Tetapkan waktu maksimum untuk menunggu upaya koneksi ke server berhasil.
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:
Tetapkan batas waktu pemeriksaan tambahan, tetapi hanya setelah koneksi dibuat.
Tetapkan batas waktu pemeriksaan tambahan, tetapi hanya setelah koneksi telah ditetapkan. Jika diatur, haproxy menggunakan min ("batas waktu koneksi", "antar") sebagai batas waktu koneksi untuk pemeriksaan dan "batas waktu pemeriksaan" sebagai batas waktu baca tambahan. "Min" digunakan sehingga orang yang menjalankan dengan "timeout connect" yang sangat lama (mis. Mereka yang membutuhkan ini karena antrian atau tarpit) tidak memperlambat pemeriksaan mereka. (Harap perhatikan juga bahwa tidak ada alasan yang sah untuk memiliki batas waktu koneksi yang panjang, karena "antrean batas waktu" dan "batas waktu tarpit" selalu dapat digunakan untuk menghindarinya).
Baca : Saat melakukan pemeriksaan kesehatan, server harus timeout connect
menerima koneksi lalu timeout 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 menjawab OK
.
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.