Come posso bilanciare il traffico web in entrata tra i server N apache?


12

Sto cercando di usare qualcosa come Heartbeat / Squid / Varnish / etc per bilanciare la quantità di traffico in entrata tra le istanze interne di Apache. Questo dovrebbe essere software e non hardware poiché tutto il mio materiale viene eseguito su VPS. Non ho molta esperienza in questo settore, quindi mi dispiace se sto abusando della terminologia e scegliendo i pacchetti sbagliati.

Ho elaborato qualcosa per illustrare ciò che sto cercando. Il lato verde è l'aspetto della configurazione iniziale e il lato blu è quello che potrebbe apparire dopo aver aggiunto più istanze di apache a causa dell'aumento del traffico. Questo potrebbe non essere il modo in cui funzionano queste cose, ma idealmente aggiungerei l'IP del bilanciamento / i al DNS del dominio. Quindi il / i bilanciatore / i vedrebbe quante connessioni ci sono su ciascuna istanza di apache (tramite un elenco di configurazione di IP interni o IP eterni) e distribuisce le connessioni equamente. Nel blu c'è un secondo bilanciatore poiché sono sicuro che ad un certo punto anche il bilanciatore avrebbe bisogno di aiuto.

Forse sto sbagliando qualcosa, ma cerco aiuto su come dovrebbero essere i "bilanciatori / i" e le migliori pratiche su come configurarli.

Qualsiasi aiuto sarebbe grande. testo alternativo


1
scusami ma quale programma hai usato per i tuoi disegni?
Prix

1
@Prix - Sembra visio ( office.microsoft.com/en-us/visio )
malonso

Risposte:


4

Quasi ogni "proxy inverso" farà ciò che chiedi.

Ad esempio Varnish, Pound e HAProxy sono tutti bravi in ​​quello che fanno, ma hanno anche le loro differenze - tuttavia, per quello che stai chiedendo, ognuno di loro lo farà. Personalmente, penso che saresti meglio con HAProxy, ma è solo una supposizione.

Potrebbe essere meglio leggere un articolo sui sistemi di bilanciamento del carico per aiutarti a decidere di quale tipo hai bisogno: http://1wt.eu/articles/2006_lb/

Inoltre, potresti prendere in considerazione l'utilizzo di un servizio predefinito per questo, come eseguire il tuo software su Elastic Compute Cloud di Amazon e utilizzare il loro Elastic Load Balancing.


2

All'inizio, c'è una domanda importante alla quale bisogna rispondere:
hai bisogno che le sessioni utente siano gestite dal / i bilanciamento / i di carico e che siano sempre indirizzate allo stesso server web (se attivo)?

  • sessioni non richieste : in questo caso, è necessario utilizzare l'efficiente programma nginx come bilanciamento del carico. La configurazione è facile da impostare, in cui in pratica devi solo indicare l'elenco dei server Web in upstream upstream_name { server1, ..., serverN }un'istruzione, quindi, per un determinato dominio, hai bisogno di una semplice proxy_pass upstream_namedirettiva.
    Vedi wiki Nginx .

  • sessione richiesta c'è un'impostazione simile per libbra in cui si indica il nome del cookie che ospiterà l'ID sessione ( ID MYCOOKIENAME), quindi un elenco di BACKENDper tutti i server.
    Vedere ad esempio l' esempio di installazione Pound .

Quando si presenta la necessità di più servizi di bilanciamento del carico, è possibile scegliere una heartbeatconfigurazione che garantisca che un solo servizio di bilanciamento monti l'IP virtuale per un determinato dominio (se necessario, oppure montare entrambi e alimentare DNS con due indirizzi IP per esempio). Forse questo dovrebbe essere dettagliato in un'altra domanda nel momento in cui diventa necessario (poiché gli strumenti si evolvono rapidamente).
Vedi anche questo link per esempio.


1

Dovresti avere un'ottima ragione per introdurre ulteriore complessità e un singolo punto di errore nella tua architettura.

Bilanciamento del carico Round-Robin

  • non costa nulla
  • è semplice da implementare e gestire
  • implementa il failover sul client, l'unico posto in cui l'errore può essere rilevato in modo affidabile
  • supporta implicitamente l'affinità del server ma consente comunque il failover senza i problemi di gestione delle sessioni associati alle sessioni permanenti
  • non richiede software / hardware / configurazione aggiuntivi sui nodi del cluster

Mi stupisce la quantità di informazioni errate fornite riguardo al round robin. Se fossi una persona cinica, potrei chiedermi se esiste qualche connessione con i fornitori che producono hardware costoso per il bilanciamento del carico.

L'unico punto che concederò è quello

  1. Gli indirizzi IPV4 stanno diventando scarsi e quindi costosi, ma ancora molto. molto più economico di un Cisco CSS.

  2. Sempre più Internet funziona su servizi Web e non tutti gli sviluppatori implementano il supporto DNS in base alle specifiche . Ma ogni browser che abbia mai usato funziona come dovrebbe


"non richiede software aggiuntivo" - beh, richiede che la webapp abbia uno stato di sessione condiviso (login, cosa c'è nel carrello, ecc.). E DNS RR può avere un bilanciamento del carico irregolare per lunghi periodi di tempo. Sì, DNS RR è un metodo praticabile, ma difficilmente è chiaramente superiore alle alternative ...
Jesper M



0

Nginx è fantastico come proxy upstream, l'ho usato con grande successo in una configurazione che fa 1M + uniques al giorno


0

OK, questo è stato chiesto un po 'di tempo fa e sono in ritardo alla festa. Tuttavia, c'è qualcosa da aggiungere qui.

Jackie, l'hai praticamente inchiodato. La tua illustrazione mostra come viene gestito il bilanciamento del carico sulla maggior parte delle installazioni di piccole e medie dimensioni.

Dovresti leggere l' introduzione di bilanciamento del carico di Willy Tarreau a cui Nakedible era collegato. È ancora valido ed è una buona introduzione.

Devi considerare come si adattano alle tue esigenze:

  • Bilanciatori di carico a livello TCP / IP (Linux Virtual Server et al). Il sovraccarico per connessione più basso, la velocità massima, non possono "vedere" HTTP.
  • Bilanciatori di carico a livello HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR e altro). Un overhead più elevato, può vedere HTTP, può gzip HTTP, può fare SSL, può fare il bilanciamento del carico di sessione appiccicoso.
  • Proxy inversi HTTP (Apache Traffic Server, Varnish, Squid). Può memorizzare oggetti in grado di memorizzare nella cache (alcune pagine Web, CSS, JS, immagini) nella RAM e inoltrarli ai client successivi senza coinvolgere il server Web back-end. Spesso può fare alcune delle stesse cose che fanno i bilanciatori di carico HTTP L7.

c'è un secondo bilanciatore poiché sono sicuro che ad un certo punto anche il bilanciatore avrebbe bisogno di aiuto.

Beh, certo. Ma il bilanciamento del carico è semplice e spesso un singolo bilanciamento del carico può andare veloce . Collego a questo articolo, che ha colpito un nervo nel web, come solo un esempio di quale performance ballpark può fornire un singolo server moderno . Non utilizzare più LB prima che sia necessario. Quando è necessario un approccio comune è il bilanciamento del carico a livello IP nella parte anteriore (o DNS Round Robin), passare ai bilanciatori del carico a livello HTTP, andare ai proxy e ai server webapp.

aiuto su come dovrebbero essere i "bilanciatori / i" e le migliori pratiche su come configurarli.

Il punto problematico è la gestione dello stato della sessione e, in una certa misura, il comportamento dello stato di errore. L'impostazione degli stessi bilanciatori di carico è relativamente semplice.

Se stai usando solo 2-4 server webapp back-end, l'hash statico basato sull'indirizzo IP di origine può essere praticabile. Questo evita la necessità di uno stato di sessione condiviso tra i server webapp. Ogni nodo di webapp vede 1 / N del traffico complessivo e il mapping da cliente a server è statico durante il normale funzionamento. Tuttavia, non è adatto per installazioni più grandi.

I due migliori algoritmi di bilanciamento del carico, nel senso che hanno un comportamento benigno sotto carico elevato e persino distribuzione del carico, sono round robin e vero bilanciamento del carico casuale. Entrambi richiedono che lo stato della sessione globale sia disponibile sui nodi di webapp. Come ciò dipende dallo stack tecnologico di webapp; ma ci sono generalmente soluzioni standard disponibili per questo.

Se né l'hash statico, né lo stato della sessione condivisa sono adatti per te, la scelta è generalmente il bilanciamento del carico ' sessione appiccicosa ' e lo stato della sessione per server. Nella maggior parte dei casi funziona bene ed è una scelta pienamente praticabile.

il / i bilanciatore / i vedrebbe quante connessioni ci sono su ciascuna istanza di apache (tramite un elenco di configurazione di IP interni o IP eterni) e distribuisce le connessioni equamente

Sì, alcuni siti lo usano. Esistono molti nomi per i diversi algoritmi di bilanciamento del carico esistenti. Se puoi scegliere round robin o random (o round robin ponderato, ponderato random), ti consiglio di farlo, per i motivi sopra indicati.

Ultima cosa: non dimenticare che molti fornitori (F5, Cisco e altri su tecnologie di fascia alta, fx Coyote Point e Kemp a prezzi più ragionevoli) offrono apparecchi di bilanciamento del carico maturi .

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.