Amazon Elastic Load Balancing Developer Guide

ngnix and ELB

NGINX-an-ELB.jpg
compare the solutions https://www.nginx.com/blog/aws-alb-vs-nginx-plus/

Non è inteso come developer nel vero senso della parola.

Questa è una guida di base per comprendere meglio gli scenari.
http://aws.amazon.com/documentation/elasticloadbalancing/

Connection Draining, a new feature

from an email of 21st of March , quando deregistri una istanza lui fa completare prima le richieste in corso e quando un'istanza diventa irragiungibile lui inoltra le richieste gia' in corso alla stessa e solo le nuove a un'altra.
When you enable Connection Draining on a load balancer, any back-end instances that you deregister will complete requests that are in progress before deregistration. Likewise, if a back-end instance fails health checks, the load balancer will not send any new requests to the unhealthy instance but will allow existing requests to complete.

This means that you can perform maintenance such as deploying software upgrades or replacing back-end instances without impacting your customers' experience.

Connection Draining is also integrated with Auto Scaling, making it even easier to manage the capacity behind your load balancer. When Connection Draining is enabled, Auto Scaling will wait for outstanding requests to complete before terminating instances.

Elastic Load Balancing product information

Permette di dirottare il traffico dalle istanze malfunzionanti a quelle sane finchè le prime non sono state ripristinate.
Si può abilitare tra una singola avalibility zone o tra multiple zone. Si può usare anche su VPC .

Features of Elastic Load Balancing

  • scala su single o multiple zones
  • su vpc si usa per test non si ha accesso pubblico
  • quando trova una istanza che non è sana distribuisce il carico tra quelle sane
  • supporta la stick user session per istanze ec2
  • supporta terminazioni ssl tra il balancer incluso offloading SSL decryption from application instances (probabilmente vuol dire che dato che ssl lo gestisce lui le applicazioni sono più leggere), gestione centralizzata tra certificati ssl, encryption alle istanze di backend con chiave pubblica opzione.
  • supporto crittografico flessibile per controllare i protocolli crittografici , o almeno sembra da Flexible cipher support allows you to control the ciphers and protocols that are accepted by Elastic Load Balancing in the SSL negotiation for client connections.
  • ipv4 o ipv6
  • metrica con numero di richieste e con latenza by Amazon CloudWatch

Using Elastic Load Balancing

Ecco i passi presi dalla guida:

  • Launch the AWS Management Console
  • Select Load Balancers from the left column of the management console.
  • In the upper right pane, select “Create Load Balancer”
  • Create a unique name for the Load Balancer.
  • Select the protocol(s) to manage via the Load Balancer (HTTP, HTTPS, TCP, SSL, or Custom)
  • Configure health checks for the Load Balancer.
  • Select the instances that you wish to place behind the Load Balancer.
  • Traffic to the DNS name provided by the Elastic Load Balancer is automatically distributed across your load balanced, healthy Amazon EC2 instances.

sono disponibili anche tramite le api

Common Uses for Elastic Load Balancing

Aumentare la fault tollerance

Mettendo le istanze in più avalibilty zone si aumenta la fault tollerance. Se tutte le istanze in una zona sono malfunzionanti e si ha settato una istanze ec2 in zone multiple il balancer ruota il traffico alle istanze sane nelle altre zone. Ritornerà il traffico alle zone e istanze originarie quando vengono ripristinate.

Auto Scaling with Elastic Load Balancing

Poniamo la condizione che il numero di istanze sane dietro il balancer non deve essere sotto due. Per ottenere questo risultato possiamo settare queste condizioni con Auto Scaling. Quando viene rilevata la condizione auto scaling aggiunge il richiesto numero di istanze al gruppo auto scaling.
Oppure se vuoi che una istanza ec2 venga aggiunta quando la latenza di una qualsiasi delle istanze eccede i 4 secondi per un periodo di 15 minuti.

Projecting Costs

Il balancer si paga a consumo c'è l'esempio di un sito medio con 10 istanze ec2 in virginia 100 GB in 30 giorni il costo è di 18 dollari per il balancer e 0,8 dollari per i dati

Where Do I Start?

In questa sezione ci sono dei link ad articoli interessanti.
Suggerisce prima di tutto di leggere le parti di what is e get started , poi vi sono le best practice e le altre customizzazioni. Ma le vedrò dopo cominciamo con le basi.

What Is Elastic Load Balancing?

Un po' di concetti ripetuti prima, i dns devono puntare al balancer che è l'unica macchina esposta su internet.

How Elastic Load Balancing Works

L'Elastic Load Balancer è composto da due componenti:

  1. load balancer: fa il monitor del traffico e manipola le richieste che giungono da internet
  2. controller service: monitora il load balancer, aggiungendo o rimuovendo istanze e verificando che il load balancer funzioni correttamente.

Un load balancer deve avere un nome dns e lo ottiene alla creazione. Bisogna registrare le istanze di cui vuoi fare il balance, la registrazione avviene tramite ip. Quando l'istanza viene stoppata e restartata l'indirizzo ip associato viene cambiato. Questo previene al balancer di ruotare traffico a istanze restarted. Si ha l'opzione che permette di deregistrare le tue istanze dal balancer dopo che le hai stoppate e registrare dopo l'avvio.
Per verificare se una istanza è in salute o meno il balancer usa la configurazione che gli è stata fornita.
Quando si usa il balancer su più avalability zones convine tenere approssimativamente la stessa capacità per ogni zona.

Overview of Elastic Load Balancing - Elastic Load Balancing Concepts

Load Balancer: è rappresentato da un nome dns e da un insieme di porte. Il balancer si può dividere tra multiple avalibility zones ma non tra regioni multiple. Si usa un service endpoint della regione. Se nessun endpoint viene specificato viene usato quello di default US East (Northern Virginia). Conviene associare con un cname a al dns generato automaticamente a quello del balancer. Ovviamente loro consigliano di usare il loro servizio di dns.

Sticky Sessions: per default il balancer ruota all'istanza meno carica, si può usare l'opzione sticky session detta anche session affinity per collegare una users session a una specifica istanza dell'applicazione. La chiave è la durata del session cookie, se l'applicativo ha il suo session cookie l'elastic load balancer deve ssere settato in modo che il suo session cookie segua la durata specifica di quello dell'applicazione. Se l'applicazione non ha il suo session cookie si può specificare una personale durate dello stickiness. La durata dello stickiness vale solo per load balancer listener http/s . Una istanza di applicazione deve sempre ricevere e mandare due cookies. Uno che definisce la durata dello stickiness e uno speciale chiamato Elastic Load Balancing cookie named AWSELB che mappa l'applicazione con l'istanza.

HTTPS Support : il balancer può essere un endpoin ssl si possono uploadere chiavi usare HTTPS (Secure HTTP) or SSL (Secure TCT) c'è una parte specifica per fare upload dei certificati. Via interfaccia web o tramite l'iam di amazon.

X-Forwarded-For Support: X-Forwarded-For nell'header aiutano ad identificare l'ip addres di un client. Dato che i load balancer intercetta l'ip tra client e server il server avrà nei suoi log solo l'ip address del load balancer. Per vedere l'ip address del client usa la richiesta dell'header X-Forwarded-For. Il balancer passa al server una riga di questo tipo per permettere l'identificazione del client

X-Forwarded-For: clientIPAddress
X-Forwarded-For: 203.0.113.7
X-Forwarded-For: 2001:DB8::/32:21f:5bff:febf:ce22

Se si ha il backend in più zones nel parametro X-Forwarded-For ci possono essere più indirizzi ip , perchè l'Elastic Load Balancing usa differenti load balancer per ogni zona. Una richiesta di un client può essere passata da un balancer a un altro prima ri raggiungere l'applicazione di backend. Per esempio se si ha una applicazione US-east-1a and US-east-1b una richiesta di un client viene prima manipolata da un balancer in US-east-1a, se questo determina che la richiesta deve essere prima mandata su backend nella zona US-east-1b ruota la richiesta al load balancer US-east-1b. Questo routing può avvenire se non ci sono istanze sane nella US-east-1a oppure se ci sono sticky session per il backend in US-east-1b. Ogni load balancer aggiunge il suo ip address al campo X-Forwarded-For in questo modo
X-Forwarded-For: clientIPAddress, previousLoadBalancerIPAddress
X-Forwarded-For: 203.0.113.7, 10.12.33.44, 10.73.23.88

X-Forwarded-Proto Support: identifica il protocollo che il client ha usato per connettersi. Dato che il server vede solo quello del load balancer per esempio

X-Forwarded-Proto: HTTPS

Choosing Listeners for Your Load Balancer

Il balancer supporta questi protocolli HTTP, HTTPS , TCP, and Secure Sockets Layer (SSL). Si possono specificare in maniera indipendente protocolli per il frontend (cioè tra il client e il load balancer) e il backend (cioè tra il load balancer e il server). Le porte accettate sono 25, 80, 443, and 1024-65535 . Il listener sta in ascolto e gira le richieste da un lato all'altro.

Using TCP/SSL (Layer 4) with Elastic Load Balancing

Con questo metodo il load balancer non inserisce i campi X-Forwarded- negli headers e nemmeno i cookie per usare session stickniess . Se si usa ssl lato frontend bisogna installare i certificati ssl sul balancer. Il balancer prima di mandare le rischieste decripta i dati.

Using HTTP/HTTPS (Layer 7) with Elastic Load Balancing

In questa modalità le connessioni vengono terminate e gli header vengono modificati prima di essere mandati ai server di backend. Quando si usa https bisogna installare il certificato sul balancer, dato che le connessioni vengono terminate e rifatte gli header e i cookie vengono inseriti senza problemi. Non tutte le estensioni http sono supportate in alcuni casi bisognerà usare listener tcp implementazioni non standard di http 1.0 / 1.1 non sono supportate e quindi le connessioni possono non essere terminate correttamente.

Advantages of Using HTTPS/SSL with Elastic Load Balancing

Ci sono dei vantaggi ad usare i protocolli protetti con il balancer:

  • i certificati sono amministrati centralmente
  • il lavoro di decript e encript è scaricato sul balancer
  • il balancer può assicurare affinity or "sticky sessions" grazie al fatto che lui termina le connessioni quindi decripta il traffico e ci guarda dentro.

Nel caso di usi ssl lato server si può usare il balancer con le modalità tcp e far gestire i certificati ai server.
Per abilitare supporto https usare AWS Identity and Access Management (IAM) per uploadare certificati ssl e chiavi. Maggiori dettagli nella guida http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/US_SettingUpLoadBalancerHTTPS.html oppure http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/US_UpdatingLoadBalancerSSL.html

Using SSL Cipher Settings with Elastic Load Balancing

C'è la modalità di cifratura standard e poi vi sono quelle particolari che si possono configurare PCI, SOX, etc.

Elastic Load Balancing Listener Configurations Quick Reference

Elenco delle modalità di configurazione http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/using-elb-listenerconfig-quickref.html

Using Elastic Load Balancing

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License