Perché Elastic Load Balancing indirizza in modo non equo il traffico del mio sistema di bilanciamento del carico?

7 minuti di lettura
0

Ho configurato il mio sistema di bilanciamento del carico per indirizzare il traffico in modo equo tra le istanze o tra le zone di disponibilità. Tuttavia, Elastic Load Balancing (ELB) indirizza più traffico verso un'istanza o una zona di disponibilità rispetto alle altre. Perché sta succedendo e come posso risolvere il problema?

Breve descrizione

L'ELB potrebbe indirizzare il traffico verso i tuoi obiettivi in modo non equo se:

  • I client indirizzano le richieste a un indirizzo IP errato di un nodo di load balancer con un record DNS con un TTL scaduto.
  • Le sessioni permanenti (affinità di sessione) sono abilitate per il load balancer. Le sessioni Sticky utilizzano i cookie per aiutare il client a mantenere una connessione alla stessa istanza per tutta la durata di un cookie, il che può causare squilibri nel tempo.
  • Le istanze integre disponibili non sono distribuite uniformemente tra le zone di disponibilità.
  • Le istanze di un tipo di capacità specifico non sono distribuite equamente tra le zone di disponibilità.
  • Esistono connessioni TCP di lunga durata tra client e istanze.
  • La connessione utilizza un WebSocket.

Risoluzione

Conferma lo squilibrio del traffico

Analizza i registri di accesso ELB, se disponibili, per confermare lo squilibrio del traffico. Usa gli strumenti della riga di comando per trovare il numero di richieste che vengono indirizzate dal load balancer verso applicazioni specifiche.

Per i sistemi di bilanciamento del carico delle applicazioni:

awk '{print $5}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

Per i sistemi di bilanciamento del carico Classic:

awk '{print $4}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

ELB aggiunge singoli file per ogni nodo ELB al bucket. È possibile confrontare il numero di righe nei file di registro degli accessi in un periodo di tempo specifico.

Svuota la cache DNS

Il routing basato su voci DNS non aggiornate determina uno schema RequestCount squilibrato tra diverse zone di disponibilità. Per ulteriori informazioni, vedere Metriche Application Load Balancer o Metriche Classic Load Balancer. Svuota la cache DNS del tuo cliente per assicurarti che utilizzi i record DNS correnti per i nodi di bilanciamento del carico.

Nota: Quando il bilanciamento del carico tra zone è abilitato, il load balancer può ancora bilanciare uniformemente le richieste a livello di istanza.

Per i client Linux che utilizzano nscd per la memorizzazione nella cache DNS, esegui uno dei seguenti comandi:

sudo /etc/init.d/nscd restart
# service nscd restart
# service nscd reload

Per i client Linux che utilizzano dnsmasq per la memorizzazione nella cache DNS, esegui uno dei seguenti comandi:

$ sudo /etc/init.d/dnsmasq restart
# service dnsmasq restart

Per i client Linux che utilizzano BIND per la memorizzazione nella cache DNS, esegui uno dei seguenti comandi:

# /etc/init.d/named restart
# rndc restart
# rndc exec

Per i client Windows, esegui il comando seguente:

ipconfig /flushdns

Nota: Se hai cancellato la cache DNS del tuo client ma continui a riscontrare problemi di memorizzazione nella cache, assicurati che l'applicazione client non stia memorizzando nella cache i record DNS.

Controlla la configurazione delle sessioni permanenti

Se utilizzi la permanenza della sessione basata sulla durata, configura un tempo di scadenza dei cookie appropriato per il tuo caso d'uso specifico. Per ulteriori informazioni, consulta:

Se imposti la permanenza della sessione da singole applicazioni, utilizza i cookie di sessione anziché i cookie persistenti, ove possibile. Per ulteriori informazioni, vedere Periodo di sessione controllato dall'applicazione (Classic Load Balancers).

Verifica la corretta distribuzione delle istanze tra le zone di disponibilità

Se c'è un numero disuguale di istanze integre disponibili nelle zone di disponibilità e il bilanciamento del carico tra zone è disabilitato, ELB deve bilanciare le richieste tra un minor numero di istanze nelle zone di disponibilità interessate. Le istanze integre rimanenti elaborano un numero maggiore di richieste di compensazione, il che può influire negativamente sulle prestazioni.

Nota: Uno squilibrio del carico di traffico tra istanze o zone di disponibilità non significa necessariamente che anche l'utilizzo delle risorse sia squilibrato. Ad esempio, uno squilibrio può verificarsi quando una o più istanze alla base di un processo di bilanciamento del carico richiedono più velocemente delle altre.

Mantieni un numero uguale di istanze in ogni zona di disponibilità abilitata. Per aggiungere altre istanze come obiettivi di bilanciamento del carico, vedere:

Per i sistemi Classic Load Balancer e Network Load Balancer, valuta la possibilità di abilitare il bilanciamento del carico tra zone per distribuire le richieste a livello di istanza anziché a livello di zona di disponibilità. Per ulteriori informazioni, consulta Bilanciamento del carico tra zone (Network Load Balancers) o Configurazione del bilanciamento del carico tra zone per il tuo Classic Load Balancer. Il bilanciamento del carico tra zone è sempre abilitato per gli Application Load Balancer.

Controlla la distribuzione dei tipi di istanza

Un Load Balancer classico con listener HTTP o HTTPS può indirizzare più traffico verso tipi di istanze con capacità superiore. Questa distribuzione mira a evitare che i tipi di istanze a capacità inferiore abbiano troppe richieste in sospeso. Per ulteriori informazioni, consulta Tipi di istanza. È consigliabile utilizzare tipi e configurazioni di istanze simili per ridurre la probabilità di lacune di capacità e squilibri di traffico.

Potrebbe verificarsi uno squilibrio del traffico anche se hai istanze con capacità simili in esecuzione su Amazon Machine Images (AMI) diverse. In questo scenario, è auspicabile lo squilibrio del traffico a favore di tipi di istanze di maggiore capacità.

Verifica la presenza di connessioni TCP di lunga durata

Elastic Load Balancing indirizza il traffico TCP utilizzando un algoritmo round-robin. Le connessioni TCP di lunga durata tra client e istanze causano una distribuzione non uniforme del carico di traffico fin dalla progettazione. Di conseguenza, le nuove istanze impiegano più tempo per raggiungere l'equilibrio della connessione. Assicurati di controllare le tue metriche per le connessioni TCP di lunga durata che potrebbero causare problemi. Si noti inoltre che con i listener TCP, il load balancer distribuisce il traffico solo a livello di connessione. Ciò significa, ad esempio, che i client che riutilizzano frequentemente le connessioni per inviare e ricevere più richieste HTTP potrebbero produrre traffico sbilanciato a livello di istanza. Valuta la possibilità di passare a un sistema di bilanciamento del carico di livello 7 se l'applicazione supporta protocolli di rete di livello superiore come HTTP, HTTPS, WebSocket o HTTP2.

Controlla i modelli RequestCount del tuo sistema di bilanciamento del carico e altre metriche pertinenti. Per ulteriori informazioni, consulta:

Verifica le connessioni WebSocket

I client che utilizzano sistemi di bilanciamento del carico con connessioni WebSocket utilizzano una connessione 1:1 tra client e destinazione. Questa connessione rimane bloccata sulla destinazione durante la durata della connessione WebSocket, causando una distribuzione del traffico ineguale. Gli Application Load Balancer forniscono supporto nativo per WebSocket. Solo le nuove richieste HTTP aggiornate a WebSocket vanno ai nuovi obiettivi. I WebSocket funzionano anche con Classic Load Balancer e Network Load Balancer con listener di livello 4.

Per ulteriori informazioni, vedere Configurazione del listener.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa