6/18/2013

Apache HTTP Server Setup as Load Balancer

Environment:

Win 7 64 bits, Apache Http Server (httpd) 2.4.3, Apache Tomcat 7.0.29.

1.       Download Apache Http Server:
In this test case, I use the XAMPP(1.8.1) with Apache Server version 2.4.3.
2.       Setup the XAMPP:
Run %XAMPP_HOME%/setup_xampp.bat
3.       Configure the Apache Server:
=====“httpd.conf”=====
#Add below modules under the module list:
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

#Uncomment below modules:

#Update the listen port:
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 0.0.0.0:80
#Listen [::]:80
Listen 127.0.0.1:90

NOTE: Multiple ‘ip:port’ can be listed down below, but do not put port only. Also, do not put ‘0.0.0.0:port’. Otherwise, exception will be thrown:

“C:\xampp-win32-1.8.1-VC9\xampp>apache_start.bat
Diese Eingabeforderung nicht waehrend des Running beenden
Bitte erst bei einem gewollten Shutdown schliessen
Please close this command only for Shutdown
Apache 2 is starting ...
(OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted.  : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs”

If want to check which port is in use by other process, type in cmd:
netstat -a –n

#Update the Server Name:
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName localhost:90

=====“httpd-ssl.conf”=====
#
# When we also provide SSL we have to listen to the
# standard HTTP port (see above) and to the HTTPS port
#
# Note: Configurations that use IPv6 but not IPv4-mapped addresses need two
#       Listen directives: "Listen [::]:443" and "Listen 0.0.0.0:443"
#
#Listen 0.0.0.0:443
#Listen [::]:443
Listen 127.0.0.1:443

=====“httpd-proxy.conf”=====
#
# Implements a proxy/gateway for Apache.
# # Required modules: mod_proxy, mod_proxy_http
#

<IfModule proxy_module>
<IfModule proxy_http_module>

#
# Reverse Proxy
#
ProxyRequests Off

<Proxy balancer://mycluster>
                  BalancerMember http://127.0.0.1:8080
                  BalancerMember http://127.0.0.1:9080
                  ProxySet lbmethod=byrequests
</Proxy>

#Optional  start
<Location /balancer-manager>
   SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !   #Not proxy balancer-manager
#Optional  end

ProxyPass / balancer://mycluster/
</IfModule>
</IfModule>

NOTEI: The ‘mycluster’ is the identifier of the load balancer, can pick any value as long as starts with ‘balancer://’

NOTEII: The ‘balancer-manager is one optional configuration, this is one web UI of the load balancer manager. You can choose to use it, or not. URL is http://localhost:90/balancer-manager

NOTEIII: IMPORTANT! ProxyPass /balancer-manager !   , this is to not proxy balancer-manager to tomcat.

NOTEIV: IMPORTANT! ProxyPass / balancer://mycluster/, this is to proxy url from base ‘/’, and the trailing slash is very important. If not have, you’ll have 500 http error code. If you check the error log, below warning will be shown:

“[Tue Jun 18 11:32:39.296798 2013] [proxy:warn] [pid 36488:tid 1732] [client 127.0.0.1:59079] AH01144: No protocol handler was valid for the URL /error/HTTP_BAD_GATEWAY.html.var. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.”

Configuration Summary
You can also group things together by using ‘VirtualHost’.

=====”httpd-vhosts.conf”=====

<VirtualHost *:90>
        ProxyRequests off
        ServerName localhost:90

        <Proxy balancer://mycluster>
                BalancerMember http://127.0.0.1:8080
                BalancerMember http://127.0.0.1:9080

                # Security "technically we aren't blocking
                # anyone but this the place to make those
                # chages
                Order Deny,Allow
                Deny from none
                Allow from all

                # Load Balancer Settings
                # We will be configuring a simple Round
                # Robin style load balancer.  This means
                # that all webheads take an equal share of
                # of the load.
                ProxySet lbmethod=byrequests
        </Proxy>

        # balancer-manager
        # This tool is built into the mod_proxy_balancer
        # module and will allow you to do some simple
        # modifications to the balanced group via a gui
        # web interface.
        <Location /balancer-manager>
                SetHandler balancer-manager

                # I recommend locking this one down to your
                # your office
                Order deny,allow
                Allow from all
        </Location>

        # Point of Balance
        # This setting will allow to explicitly name the
        # the location in the site that we want to be
        # balanced, in this example we will balance "/"
        # or everything in the site.
        ProxyPass /balancer-manager !
        ProxyPass / balancer://mycluster/
</VirtualHost>

4.       Start two Tomcat instances
5.       Start Apache Http server (MUST run as administrator)
Either run the bat file %XAMPP_HOME%/apache_start.bat
Or start XAMPP’s control panel and start the server.
If any error happens, the error log is a good place that could help debug.

6.       Test load balance
For example, I run the web app that test the central session.

Bingo. Happy ending.
This is a very very basic configuration of apache http server as load balancer. Main goal is to make it work. For further usage, please refer to the official web site.

No comments:

Post a Comment