Elastic Load Balancer pour plusieurs applications Web

13

J'ai des Nwebapps. Chaque application Web est desservie par un nom d'hôte différent dans mon domaine et déployée sur 2 instances exécutées dans AWS. En d'autres termes, j'ai des 2Ninstances, divisées en paires qui exécutent Ndes webapps distinctes.

Je souhaite configurer un seul AWS Elastic Load Balancer qui procurera une requête à l'une des deux instances qui la servent en fonction de l'en- Hosttête. Est-ce possible en utilisant un seul ELB ou je Ndevrai déployer des ELB, un pour chaque paire d'instances?

thesamet
la source

Réponses:

19

Un seul ELB achemine le trafic vers exactement un ensemble d'instances et distribue le trafic entrant à toutes les instances "derrière". Il n'achemine pas le trafic de manière sélective sur la base d'une analyse de la couche 7 du trafic, telle que l'en- Host:tête.

Vous avez besoin d' un ELB pour chaque ensemble d'instances. Comme vous le décrivez, c'est un ELB pour chaque webapp.

Si votre objectif principal pour exécuter ELB est de décharger le SSL à l'aide d'un certificat générique (j'ai un système conçu comme celui-ci, avec des dizaines d'applications vivant sur many-different-domains.my-wildcard-cert-domain.com), alors les instances "derrière" l'ELB pourrait exécuter un proxy inverse tel que HAProxy (ou plusieurs autres alternatives, comme Varnish) qui peut prendre des décisions de routage de couche 7, puis transférer le trafic vers le sous-ensemble approprié de machines derrière eux, ce qui permet également des opérations plus sophistiquées. l'équilibrage de charge et a l'avantage de vous fournir des statistiques et des compteurs de trafic, agrégés et séparés.

       /-- HAProxy \  /----- instances hosting app #1  
ELB ---|            >> ----- instances hosting app #2 
       \-- HAProxy /  \----- instances hosting app #n 

Les instances intermédiaires ^^^^ peuvent évaluer les en- Host:têtes (entre autres) et même capturer la valeur du cookie de session dans leurs journaux pour analyse.

Cette configuration me permet également d'exécuter plusieurs applications sur des sous-ensembles d'instances qui se chevauchent, le cas échéant, et de faire beaucoup d'autres choses que ELB en soi ne prend pas directement en charge. Il renvoie également une page "503" personnalisée dans le cas où une application est surchargée ou devient indisponible, ce que ELB ne fait pas de lui-même. J'ai représenté 2 serveurs proxy ici, sans autre raison que votre mention du numéro 2 dans la question. Ma configuration a en fait 3, un pour chaque zone de disponibilité dans la région où cela est déployé.

Michael - sqlbot
la source
3
En août 2016, Amazon a lancé AWS Application Load Balancer qui permet le routage vers différents groupes cibles en fonction des en-têtes HTTP.
Jens Bannmann
2
@JensBannmann c'est vrai. Quand ils l'ont publié, les seules règles de routage qu'il supportait étaient basées sur le chemin. En 2017, ils ont ajouté la possibilité de router en fonction de l'en- Host:tête. Cette réponse était correcte lorsque je l'ai écrite en 2014, mais il semble qu'il soit temps pour une mise à jour. Merci de l'avoir porté à mon attention.
Michael - sqlbot
3

Depuis août 2016, Amazon ELB propose deux types d'équilibreurs de charge différents:

  • Classic Load Balancer achemine tout le trafic vers un ensemble d'instances sans tenir compte du contenu du protocole d'application. Auparavant, c'était le seul type ELB disponible.
  • Application Load Balancer peut acheminer le trafic vers différents groupes cibles selon des règles configurables basées sur des chemins URL. Le billet de blog New - AWS Application Load Balancer mentionne les applications comprenant plusieurs microservices comme cas d'utilisation principal et donne des instructions de configuration détaillées.

Pour votre cas d'utilisation, Application Load Balancer semble idéal. Il est limité à 10 règles, cependant, il ne fonctionnera donc facilement que si votre Ntaille n'est pas supérieure à 10.

Jens Bannmann
la source
0

Sur votre liste d'instances ec2, vous voyez deux instances, non? Mais sur chaque instance, avez-vous de nombreuses applications Web? Vous utilisez un hôte virtuel pour déployer chacun?

Vous avez besoin d'un seul ELB pour partager la charge sur vos hôtes. Exemple:

External request > ELB (based on CNAME pointer)  > EC2 Instance. 

Je pense que c'est mieux que vous me donniez plus de votre scénario et peut-être que je peux vous aider.

Cordialement.

MISE À JOUR

Si vous disposez de différentes applications Web sur les instances EC2, vous devez disposer de deux Elastic Load Balancers (ELB). Chacun pour une paire d'instances. Au total, quatre instances

Junior Rocha
la source
Sur ma liste d'instances, je vois des 2Napplications. Il existe N webapps, deux instances pour chacune. Je vais modifier la question pour clarifier cela.
thesamet
Réponse mise à jour.
Junior Rocha