A load balancer takes requests from clients and distributes them across targets in a target group.
Types of Elastic Load Balancers:
ELB supports three types of load balancers. We can select the appropriate load balancer based on our application needs.Application Load Balancer (ALB):
Application Load Balancer is used for conditions or rule-based load balancing. ALB only supports HTTP/HTTPS protocols. It can only be used on AWS instance. The ALB distributes incoming application traffic across multiple targets, such as EC2 instances, in multiple Availability Zones. This increases the availability of your application. You add one or more listeners to your load balancer. We must have Target Group to create ALB or NLB (Network Load Balancer).
Fig: Application Load Balancer |
https://aws.amazon.com/elasticloadbalancing/features/#Details_for_Elastic_Load_Balancing_Products
ALB Practical:
In this practical, we are going to maintain load balancing between multiple instances on condition/rule basis. Let's take an example of a website which contains photos and videos also. So, on one instance we will keep details of the main node. In the second instance, we can keep images and in the third instance, we can keep videos.
For a better architect, we should have at least two instances for main page. So that in case if there is an issue with one instance, we can get access from another one. Similarly, we must have multiple instances for images and videos also.
But here, we will create three instances: one instance for the main page, one for images folder and another for videos folder and then we will use ALB to provide conditions.
Steps we need to follow:
1. Make sure your VPC has at least three subnets2. Create an instance for the Web Server
3. Create one instance for images and another for videos
4. Create Target Groups and register instances in it
5. Create Application Load Balancer
6. Add images and videos as listeners
7. Verify Web Server
Step 1: Make sure your VPC has at least three subnets:
AWS ➔ Services ➔ VPC ➔ Subnets.Verify if you have three subnets otherwise create them by following the link:
https://redhatpanacia.blogspot.com/2019/05/vpc.html
Step 2: Create an instance for the Web Server:
AWS ➔ Services ➔ EC2 ➔ Instances ➔ Launch Instance ➔ [*] Free Tier Only ➔ Select any Linux AMI ➔ Select ➔ Instance Type: 't2.micro' ➔ Configure Instance: Number of Instances: 1 ➔ Select VPC ➔ Select Public Subnet (I'm selecting us-east-1a) ➔ Auto-assign Public IP: Enable ➔ Advanced Details ➔ User Data: As text ➔ provide a script:
#!/bin/bash
yum install -y httpd
echo "*** This is the main page of Webshack.com ***" >> /var/www/html/index.html
service httpd restart
systemctl enable httpd
Next: Storage ➔ Next Tags: 'Click to add a Name Tag' ➔ Key: Name & Value: main_node_1 ➔ Next: Security Group ➔ Assign a security group: (*) Create a new security group OR ( ) Select an existing security group (but port for SSH (22) and HTTP (80) should be enabled ➔ Review and Launch ➔ Launch ➔ Create or provide an existing key-pair➔ Launch Instances.
Now, if we use public IP of this instance in the browser, we will get the output:
*** This is the main page of Webshack.com ***
Step 3: Create one instance for images and another for videos:
Use the same way to create both instances but do change in both instances' script.For images use Script:
#!/bin/bash
yum install -y httpd
mkdir /var/www/html/images
echo "*** This is Webshack Images page ***" >> /var/www/html/images/index.html
service httpd restart
systemctl enable httpd
For Videos instance use script:
#!/bin/bash
yum install -y httpd
mkdir /var/www/html/videos
echo "*** This is Webshack Videos page ***" >> /var/www/html/videos/index.html
service httpd restart
systemctl enable httpd
Step 4: Create Target Groups and register instances in it:
For the main page instance:AWS ➔ Services ➔ EC2 ➔ Target Groups ➔ Create Target Group ➔ Target group name: main ➔ Target type: instance ➔ protocol: HTTP ➔ Port: 80 ➔ VPC: webshack-vpc (select your VPC) ➔ Health Check Settings (leave default) ➔ Create ➔ Close.
Register Instance in it:
Select target group ➔ Edit ➔ click on 'main_node_1' ➔ Add to registered ➔ Save.
Similarly, do the same for images instance:
AWS ➔ Services ➔ EC2 ➔ Target Groups ➔ Create Target Group ➔ Target group name: images ➔ Target type: instance ➔ protocol: HTTP ➔ Port: 80 ➔ VPC: webshack-vpc (select your VPC) ➔ Health Check Settings (leave default) ➔ Create ➔ Close.
Register Instance in it:
Select target group ➔ Edit ➔ click on 'images_node_1' ➔ Add to registered ➔ Save.
AWS ➔ Services ➔ EC2 ➔ Target Groups ➔ Create Target Group ➔ Target group name: videos ➔ Target type: instance ➔ protocol: HTTP ➔ Port: 80 ➔ VPC: webshack-vpc (select your VPC) ➔ Health Check Settings (leave default) ➔ Create ➔ Close.
Register Instance in it:
Select target group ➔ Edit ➔ click on 'videos_node_1' ➔ Add to registered ➔ Save.
Note: We can see, all of these are still in 'unused' status.
Step 5: Create Application Load Balancer:
AWS ➔ Services ➔ EC2 ➔ Load Balancers ➔ Create Load Balancer ➔ Application Load Balancer: Create ➔ Name: webshack-alb-1 ➔ Scheme: internet-facing ➔ Listeners: HTTP/80 ➔ Availability Zones: (select all public AZ) ➔ Next ➔ Configure Security Groups (create or select any existing SG but port number 22 (SSH) and 80 (HTTP) should be enable) ➔ Next: Create Routing ➔ Target Group: Existing Target Group ➔ Name: main ➔ target Type: Instance ➔ Protocol: HTTP ➔ Port: 80 ➔ Next ➔ Review ➔ Create ➔ Close.
As a result, this will get a URL to access the site but it takes some time to get resolve the name.
Fig: DNS URL |
C:\> nslookup <provided URL>
Fig: Found IP using 'nslookup' |
Step 6: Add images and videos as listeners:
AWS ➔ Services ➔ EC2 ➔ Load Balancers ➔ Select your created Load Balancer ➔ Listeners ➔ View/edit rules ➔ Click on (+) icon besides Rules…
Fig: Add Listener |
…Click on (+) Insert Rule ➔ Add Condition ➔ Path ➔ Value: *images* ➔ click on blue tick icon ➔ Forward to: images ➔ click on blue tick icon ➔ Save.
Fig: Insert Rule |
Now add Videos as listeners:
AWS ➔ Services ➔ EC2 ➔ Load Balancers ➔ Select your created Load Balancer ➔ Listeners ➔ View/edit rules ➔ Click on (+) icon besides Rules ➔ Click on (+) Insert Rule ➔ Add Condition ➔ Path ➔ Value: *videos* ➔ click on blue tick icon ➔ Forward to: videos ➔ click on blue tick icon ➔ Save.
Step 7: Verify Server using URL:
On Browser, provide URL and hit enter. This will provide output as:*** This is the main page of Webshack.com ***
On Browser, provide <URL>/images and hit enter. This will provide output as:
*** This is Webshack Images page ***
On Browser, provide <URL>/videos and hit enter. This will provide output as:
*** This is Webshack Videos page ***
Enjoy!
No comments:
Post a Comment