https://www.rajith.me/2018/07/what-is-load-balancing.html
We are going to load balance between two servers so you will need three servers. You can use any cloud provider to spin up these servers, here I will use AWS as the cloud service provider.
https://aws.amazon.com/free/
https://cloud.google.com/free/
Now I need three servers for this example, let's name them as
1) External lb
2) Server-1
3) Server-2
Diagram
Install nginx in the lb server
Let's install nginx in the lb node, first ssh into the server. I have chosen Ubuntu as the image for the load balancer server and for other servers as well.
https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#prebuilt
Now make sure when you visit the External lb IP, should redirect to default nginx page
sudo apt-get update
sudo apt-get install nginx
For other distributions follow the below link to install nginxhttps://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#prebuilt
Now make sure when you visit the External lb IP, should redirect to default nginx page
Install apache web server in both servers
Run the below commands to install apache web server in both server 1 and server 2sudo apt-get update
sudo apt-get install apache2
sudo systemctl status apache2
Change the index.html as web server - 1 and web server -2
cd /var/www/html/
sudo rm index.html
sudo vim index.html
web server - 1
sudo systemctl restart apache2
After this change, you should get two different pages when visiting the IP in the browser asConfiguring Nginx
- ssh into the external lb server
- go to nginx conf
- go to nginx conf
cd /etc/nginx/conf.d
- now let's add our load balancing configurations, I'm naming this file as simple-load.conf sudo vim simple-load.conf
- add the below configurations
upstream backend {
server Server-1_IP;
server Server-2_IP;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
- This server listens to all traffic to port 80 and passes to upstream (our web servers)
- The upstream name and the proxy_pass should be matched
- You should remove the default nginx configuration
sudo rm /etc/nginx/sites-enabled/default
- Now reload the nginx service
sudo systemctl reload nginx
Let's try different configurations
Weighted load balancing
upstream backend {
server Server-1_IP weight=5;
server Server-2_IP;
}
Now the new requests will be distributed to the ratio 5:1 to both servers. 5 requests forward toServer-1 then 1 request to Server-2.
Backup
Backup can be used when you want to configure active-passive load balancing. Traffic will always route to the Server-1, if the server goes down for some reason, the traffic will then serve to the backup server.
upstream backend {
server Server_1;
server Server_2 backup;
}
Let's try this scenario
If you visit the lb public IP you will always route to the Server-1
Now let's stop the apache server of the server-1, to do that ssh into server-1 and run the below command
sudo systemctl stop apache2
Now visit the External lb Ip again now you will be redirected to the backup server which is the server-2 sudo systemctl start apache2
Traffic will start to route to server-1 again.This is an end of very basic load balancer configuration tutorial, just play around with this and try to understand what load balancing mechanism you required when you deploy your applications.
Thank you !!!!
Comments
Post a Comment