Saat menggunakan penyeimbangan beban TCP dengan HAProxy, apakah semua lalu lintas keluar mengalir melalui LB?

19

Saya sedang menyiapkan aplikasi yang akan di-host menggunakan VM (mungkin amazon, tapi itu tidak diatur dalam batu) yang akan membutuhkan kedua load balancing HTTP dan load balancing sejumlah besar (50k atau lebih jika mungkin) koneksi TCP yang persisten. Jumlah data tidak terlalu tinggi, tetapi pembaruan sering dilakukan.

Saat ini saya sedang mengevaluasi penyeimbang beban dan saya agak bingung tentang arsitektur HAProxy. Jika saya menggunakan HAProxy untuk menyeimbangkan koneksi TCP, apakah semua lalu lintas yang dihasilkan harus mengalir melalui load balancer? Jika demikian, apakah solusi lain (seperti LVS atau bahkan nginx_tcp_proxy_module) akan lebih cocok?

pengguna122875
sumber

Jawaban:

33

HAProxy (seperti banyak penyeimbang beban) umumnya mempertahankan dua percakapan. Proxy memiliki sesi (tcp dalam hal ini) dengan klien, dan sesi lain dengan server. Karena itu dengan proxy Anda akhirnya melihat 2x koneksi pada load balancer. Karenanya semua lalu lintas mengalir melalui penyeimbang beban.

Ketika berbicara tentang penskalaan di beberapa penyeimbang beban, saya pikir Anda tidak perlu melakukannya. Tetapi cara praktis dan cukup mudah untuk melakukan ini adalah menggunakan sesuatu seperti tetap hidup dengan dua IP mengambang dan DNS round robin antara kedua IP tersebut. Dengan keepalived, jika salah satu penyeimbang beban turun yang lain akan menampung kedua IP, sehingga Anda mendapatkan ketersediaan tinggi dengan cara ini. Yang sedang berkata, saya pikir Anda akan baik-baik saja dengan satu contoh haproxy aktif dengan beban Anda.

Timbangan HAProxy sangat baik. Sebagai contoh, jaringan Stack Exchange menggunakan soket web yang mempertahankan koneksi TCP terbuka. Sementara saya memposting ini kami memiliki 143.000 soket TCP yang mapan di mesin virtual VMware tanpa masalah. Penggunaan CPU pada VM adalah sekitar 7%.

Dengan pengaturan semacam ini dengan HAProxy pastikan Anda mengatur maxconncukup tinggi. Berikut ini beberapa contoh konfigurasi HAProxy untuk membantu Anda memulai:

frontend fe_websockets
        bind 123.123.123.123:80
        mode tcp
        log global
        option tcplog
        timeout client 3600s
        backlog 4096
        maxconn 50000
        default_backend be_nywebsockets

backend be_nywebsockets
        mode  tcp
        option log-health-checks
        option redispatch
        option tcplog
        balance roundrobin
        server web1 10.0.0.1:1234
        server web2 10.0.0.2:1234
        timeout connect 1s
        timeout queue 5s
        timeout server 3600s
Kyle Brandt
sumber
143.000 itu - apakah itu masih berbicara tentang soket web? atau apakah itu hal lain juga?
Marc Gravell
@MarcGravell: Hampir semua soket web. Perlu diingat bahwa ini 2x meskipun seperti yang saya katakan di pengantar saya, sehingga server soket web akan melihat total ~ 70k
Kyle Brandt
@Kyle - Ada alasan mengapa Anda memerlukan soket web dan koneksi TCP yang gigih? Situs web ini tampaknya tidak memiliki fitur waktu nyata yang memerlukannya.
Lanjutan
@Kesinambungan: Ada sejumlah besar fitur waktu nyata termasuk pemberitahuan Kotak Masuk, suara, pengeditan, komentar / jawaban / pertanyaan baru. Tidak yakin apakah mereka hanya diaktifkan untuk pengguna dengan batasan perwakilan tertentu, jika Anda tidak melihat mereka, Anda dapat menanyakannya di meta.stackoverflow.com
Kyle Brandt
1
@KyleBrandt apakah itu berfungsi dalam mode TCP juga?
elslooo
2

Ya, semua lalu lintas biasanya harus melewati penyeimbang beban. Permintaan diterima oleh penyeimbang beban dan respons dikirim kembali ke penyeimbang beban yang mengirimkannya kembali ke klien.

Untuk memilih alat yang tepat, saya tidak punya banyak pengalaman tentang opsi lain. Saya menggunakan haproxy dan itu sangat bagus dan stabil dan dapat menangani sejumlah besar lalu lintas. Juga, kemampuan ACL-nya sangat bagus.

Khaled
sumber
2

Ada kemungkinan untuk menggunakan dan mengkonfigurasi DSR (Direct Server Return) tetapi ini tidak ada hubungannya dengan Loadbalancer tetapi dikonfigurasi dalam tcp-stack (tabel routing). Kami telah menggunakan ini untuk portal streaaming video besar. Meskipun berfungsi, ini akan memberi Anda banyak sakit kepala terkait kompleksitas perutean yang diperlukan.

Jadi saya tidak akan merekomendasikan untuk menggunakan teknik ini tanpa mempertimbangkan penggunaan dan kelemahannya dengan sangat menyeluruh.

Mungkin ada beberapa petunjuk untuk memulai di sana:

Selamat bersenang-senang!

Andreas Balg
sumber