Simple load balancing with Apache proxy_balancer

Load balancing with Apache proxy_balancer concept

For a proof-of-concept to increase the availability of a web server, I am experimenting with Apache Proxy Load Balancing. The concept is kept simple, with four virtual machines in total. One virtual machine is acting as Load Balancer (Frontend) and three other virtual machines are acting as Backend web servers. To test the load balancing and availability, I'm using a laptop running Kali Linux, which provides the tools for Testing.

To generate the proper load, I'm using Siege, which is a HTTP load testing and benchmarking tool. The concept looks like this as shown in the simple drawing below:

Load balancing with Apache proxy_balancer concept

Load balancing with Apache proxy_balancer concept

Virtual setup for Apache Proxy Load Balancer concept

On my virtual enviromment (running on XCP-NG), I'm distributing two virtual machines (balancer + www1) on the first node, and two virtual machines (www2 + www3) on the second node. The virtual machines use a Debian GNU/Linux standard setup with Apache web servers.

Virtual setup for Apache Proxy Load Balancer concept

Virtual setup for Apache Proxy Load Balancer concept

On the virtual machine with the Apache Load Balancer, I am using the following, simple configuration. With a2endmod I make sure the modules proxy, proxy_http, proxy_balancer and lbmethod_byrequests are enabled. In addition, I set up a status page called balancer-member to view the status and function of the load balancing.


  # Disable Server Signatures for Production environments
  ServerTokens Prod
  ServerSignature Off
  
  <VirtualHost *:80>
  <Proxy balancer://cluster>
    # Set Proxy balancing method
    ProxySet lbmethod=byrequests
	
	# Set Balancer members
    BalancerMember http://192.168.0.31:80
    BalancerMember http://192.168.0.32:80
    BalancerMember http://192.168.0.33:80
  </proxy>

  # Use incoming Host HTTP request header for proxy request
  ProxyPreserveHost On
  
  # Add proxy information in X-Forwaders headers
  ProxyAddHeaders On
  
  # Proxy except for Status page, then everything else
  ProxyPass /balancer-manager !
  ProxyPass / balancer://cluster/
  
  # Status URL location
  <Location /balancer-manager>
    SetHandler balancer-manager
  </Location>
  
  # Set Server name and admin to something with example.com
  ServerName balancer.example.com
  ServerAdmin webmaster@balancer.example.com
  
  # Standard log settings
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  </VirtualHost>

Testing the load balancing with siege

For testing I'm using the Kali Linux laptop and perform a load and stress test with the following command:


siege http://192.168.0.30 -t 1H -c 255

The screenshot below shows the status of balancer-manager, where all three Backend web servers received traffic and where www2 simulates a failure by shutting down the Apache web server.

Apache Proxy Load Balancer testing with siege

Apache Proxy Load Balancer testing with siege

Search my web site