Kami mencoba merancang arsitektur yang dapat menangani lebih dari 64 ribu soket web.
Kami pertama kali mencoba dengan Amazon ELB, tetapi desainnya tidak memungkinkan lonjakan traffic dan websocket yang tidak terduga. (Mode TCP mati secara tiba-tiba di websockets)
Dengan HAProxy, batasan itu tidak berlaku, tetapi kami akan dibatasi hingga ~ 64k soket web yang dikelola antara HA dan server back-end.
Berbagai solusi yang muncul di benak:
- Beberapa instance HAProxy, memuat keseimbangan dengan DNS (Route53 memiliki opsi berbobot)
- Dua instance HAProxy dengan Keepalived, beberapa alamat IP internal (tidak yakin apakah itu bisa dilakukan)
Apakah ada cara yang lebih baik untuk melakukan ini?
Jawaban:
Jika batas 64k Anda disebabkan oleh porta sumber, Anda dapat melakukan sesuatu seperti yang berikut ini (sedikit peretasan, tapi itu yang saat ini kami lakukan di SE untuk soket web (kami memiliki sekitar 0,5 juta bersamaan dengan HAProxy):
Juga beberapa contoh dapat dilakukan dengan terus hidup. Lakukan saja sesuatu seperti round robin DNS melalui beberapa IP. Pastikan saja bahwa IP selalu dijemput oleh penyeimbang beban aktif karena DNS itu sendiri tidak akan memberi Anda penyeimbangan beban (ada juga lebih banyak opsi di sini, yang ini sederhana).
sumber
source 0.0.0.0 usesrc client
konfigurasi backend haproxy untuk transparansi sumber tproxy. Dengan cara ini srcIP: srcPORT akan menjadi IP / port klien aktual (bukan IP internal mesin haproxy) - rapi untuk logging juga.Anda dapat mengatur beberapa sistem HAproxy yang berbagi IP yang sama menggunakan Anycast dan BGP atau protokol perutean perbatasan lainnya. Dengan cara ini semua sistem HAproxy aktif; jika ada yang turun Anda berhenti mengiklankan rute BGP pada sistem itu dan itu akan dalam ~ 30 detik berhenti menerima lalu lintas; yang akan didistribusikan kembali ke sistem lain yang tersedia yang mengiklankan rentang yang sama.
Misalnya, periksa url ini tentang cara mengatur tata letak tersebut
sumber