HAProxy ile TCP yük dengeleme kullanırken, tüm giden trafik LB'den akıyor mu?


19

Hem HTTP yük dengeleme hem de yük dengelemeyi kalıcı TCP bağlantılarının çok sayıda (mümkünse 50k veya daha fazla) gerektirecek VM'leri (muhtemelen amazon, ancak taş olarak ayarlanmamış) kullanarak barındırılacak bir uygulama kuruyorum. Veri miktarı o kadar yüksek değildir, ancak güncellemeler sıktır.

Şu anda yük dengeleyicileri değerlendiriyorum ve HAProxy mimarisi hakkında biraz kafam karıştı. TCP bağlantılarını dengelemek için HAProxy kullanırsam, ortaya çıkan tüm trafiğin yük dengeleyiciden akması gerekir mi? Eğer öyleyse, başka bir çözüm (LVS veya hatta nginx_tcp_proxy_module gibi) daha uygun olur mu?

Yanıtlar:


33

HAProxy (birçok yük dengeleyici gibi) genellikle iki görüşmeyi sürdürür. Proxy'nin istemciyle bir oturumu (bu durumda tcp) ve sunucuyla başka bir oturumu vardır. Bu nedenle vekillerle yük dengeleyicideki bağlantıları 2 kat görürsünüz. Bu nedenle tüm trafik yük dengeleyiciden akar.

Birden fazla yük dengeleyicisinde ölçeklendirme söz konusu olduğunda, ihtiyacınız olduğunu düşünmüyorum. Ancak bunu yapmanın pratik ve oldukça kolay bir yolu, iki değişken IP ile keepalived ve bu iki IP arasında yuvarlak robin DNS gibi bir şey kullanmaktır . Keepalived ile, yük dengeleyicilerinden biri düşerse diğeri her iki IP'yi de tutacaktır, böylece bu şekilde yüksek kullanılabilirlik elde edersiniz. Bununla birlikte, yükünüzle birlikte bir aktif haproksi örneği ile iyi olacaksınız.

HAProxy çok iyi ölçeklenir. Bir örnek olarak, Stack Exchange ağı açık TCP bağlantılarını koruyan web soketleri kullanır. Bunu gönderirken bir VMware sanal makinesinde 143.000 kurulu TCP soketi var. VM'deki CPU kullanımı yaklaşık% 7'dir.

HAProxy ile bu tür bir kurulumla, maxconnyeterince yüksek ayarladığınızdan emin olun . Başlamanız için bazı örnek HAProxy yapılandırması:

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

143,000 - bu hala web soketlerinden mi bahsediyor? Yoksa başka şeyler de mi?
Marc Gravell

@MarcGravell: Neredeyse tüm web yuvaları. Girişimde söylediğim gibi bunun 2x olduğunu unutmayın, bu yüzden web soket sunucuları toplamda ~ 70k görecek
Kyle Brandt 30:12

Web soketleri ve kalıcı TCP bağlantılarına neden ihtiyacınız var mı? Bu web sitesinde, bunu gerektiren herhangi bir gerçek zamanlı özellik bulunmuyor.
Devam

@Devam: Gelen Kutusu bildirimleri, oylar, düzenlemeler, yeni yorumlar / cevaplar / sorular dahil olmak üzere çok sayıda gerçek zamanlı özellik vardır. Yalnızca belirli bir rep sınırı olan kullanıcılar için etkin olup olmadıklarından emin değilim, görmüyorsanız meta.stackoverflow.com adresinden sorgulayabilirsiniz
Kyle Brandt

1
@KyleBrandt TCP modunda da çalışıyor mu?
elslooo

2

Evet, tüm trafik normal olarak yük dengeleyiciden geçmelidir. Talepler yük dengeleyici tarafından alınır ve yanıtlar yük dengeleyicisine geri gönderilir ve bu da istemcilere geri gönderilir.

Doğru aracı seçmek için, diğer seçenekler hakkında fazla deneyimim yok. Ben haproxy kullanıyorum ve gerçekten iyi ve kararlı ve büyük miktarda trafik işleyebilir. Ayrıca, ACL'lerinin yetenekleri de harika.


2

DSR'yi (Doğrudan Sunucu Dönüşü) kullanma ve yapılandırma olasılığı vardır, ancak bunun Loadbalancer ile ilgisi yoktur, ancak tcp yığınında (yönlendirme tabloları) yapılandırılır. Bunu büyük bir video akış portalı için kullanıyoruz. Çalışmasına rağmen, gerekli yönlendirmenin karmaşıklığı konusunda size önemli miktarda baş ağrısı verecektir.

Bu nedenle, bu tekniği kullanımı ve dezavantajları çok iyi düşünmeden kullanmanızı tavsiye etmem.

Belki oraya başlamak için bazı ipuçları vardır:

İyi eğlenceler!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.