Quando si utilizza il bilanciamento del carico TCP con HAProxy, tutto il traffico in uscita scorre attraverso l'LB?


19

Sto configurando un'app da ospitare tramite macchine virtuali (probabilmente amazon, ma che non è impostato su pietra) che richiederà sia il bilanciamento del carico HTTP sia il bilanciamento del carico di un numero elevato (circa 50k circa, se possibile) di connessioni TCP persistenti. La quantità di dati non è poi così elevata, ma gli aggiornamenti sono frequenti.

In questo momento sto valutando i bilanciatori del carico e sono un po 'confuso sull'architettura di HAProxy. Se utilizzo HAProxy per bilanciare le connessioni TCP, tutto il traffico risultante dovrà fluire attraverso il bilanciamento del carico? In tal caso, un'altra soluzione (come LVS o anche nginx_tcp_proxy_module) sarebbe più adatta?

Risposte:


33

Gli HAProxy (come molti bilanciatori del carico) mantengono generalmente due conversazioni. Il proxy ha una sessione (in questo caso tcp) con il client e un'altra sessione con il server. Pertanto con i proxy finisci per vedere 2x le connessioni sul bilanciamento del carico. Pertanto, tutto il traffico scorre attraverso il bilanciamento del carico.

Quando si tratta di ridimensionamento su più bilanciatori di carico, non penso che sia necessario. Ma un modo pratico e abbastanza semplice per farlo è usare qualcosa come keepalived con due IP mobili e DNS round robin tra questi due IP. Con keepalived, se uno dei sistemi di bilanciamento del carico si abbassa l'altro, si terranno entrambi gli IP, in questo modo si otterrà un'alta disponibilità in questo modo. Detto questo, penso che starai bene con un'istanza haproxy attiva con il tuo carico.

HAProxy si adatta molto bene. Un esempio, la rete Stack Exchange utilizza socket Web che mantengono connessioni TCP aperte. Mentre sto pubblicando questo, abbiamo 143.000 socket TCP stabiliti su una macchina virtuale VMware senza problemi. L'utilizzo della CPU nella VM è di circa il 7%.

Con questo tipo di installazione con HAProxy assicurati di impostare maxconnabbastanza in alto. Ecco alcuni esempi di configurazione HAProxy per iniziare:

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

che 143.000 - sta ancora parlando dei socket del web? o sono anche altre cose?
Marc Gravell

@MarcGravell: praticamente tutti i socket web. Tieni presente che questo è 2x però, come ho detto nella mia introduzione, quindi i server di socket web vedrebbero un totale di ~ 70k
Kyle Brandt,

@Kyle - Qualche motivo per cui hai bisogno di socket web e connessioni TCP persistenti? Questo sito Web non sembra avere funzionalità in tempo reale che lo richiederebbero.
Continuazione

@Continuazione: ci sono molte funzionalità in tempo reale, tra cui notifiche, voti, modifiche, nuovi commenti / risposte / domande. Non sono sicuro se sono abilitati solo per gli utenti con un certo limite di reputazione fuori mano, se non li vedi puoi informarti su meta.stackoverflow.com
Kyle Brandt

1
@KyleBrandt funziona anche in modalità TCP?
elslooo,

2

Sì, tutto il traffico dovrebbe normalmente passare attraverso il bilanciamento del carico. Le richieste vengono ricevute dal servizio di bilanciamento del carico e le risposte vengono inviate al servizio di bilanciamento del carico che le rimanda ai client.

Per aver scelto lo strumento giusto, non ho molta esperienza sulle altre opzioni. Sto usando haproxy ed è davvero buono e stabile e può gestire una grande quantità di traffico. Inoltre, le sue funzionalità ACL sono eccezionali.


2

Esiste la possibilità di utilizzare e configurare DSR (Direct Server Return) ma ciò non ha nulla a che fare con Loadbalancer ma è configurato nello stack tcp (tabelle di routing). Lo abbiamo usato per un grande portale di video streaaming. Sebbene funzioni, ti darà una notevole quantità di mal di testa per quanto riguarda la complessità del routing necessario.

Pertanto, non consiglierei di usare questa tecnica senza considerare molto attentamente l'uso e gli svantaggi.

Forse ci sono alcuni suggerimenti per iniziare lì:

Divertiti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.