mod_proxy_balancer requires the service of mod_proxy, and it provides load balancing for all the supported protocols.
mod_proxy_balancer has following scheduling algorithm
- mod_lbmethod_byrequests
- mod_lbmethod_bytraffic
- mod_lbmethod_bybusyness
- mod_lbmethod_heartbeat
Followings are the example of a balancer configuration:
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.50:80"
BalancerMember "http://192.168.1.51:80"
</Proxy>
ProxyPass "/test" "balancer://mycluster"
ProxyPassReverse "/test" "balancer://mycluster"
Followings are another example of balancer configuration:
<VirtualHost *:80>
ServerName cdn.foo.net
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
<Proxy balancer://mycluster>
BalancerMember http://192.168.10.7:80 route=1 connectiontimeout=1
BalancerMember http://192.168.10.8:80 route=2 connectiontimeout=1
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass "/" "balancer://mycluster"
ProxyPassReverse "/" "balancer://mycluster"
DocumentRoot "/pub/cdn.qsok.com/"
CustomLog /var/log/httpd/cdn.its-newid.net-access.log combined
ErrorLog /var/log/httpd/cdn.its-newid.net-error.log
</VirtualHost>
If you encounter errors like below in case that you use PHP combined with Apache, you will need to use other configuration. Probably you may not able to get any session data from your client.
Below configuration will enable you to use your PHP codes as designed.
<VirtualHost *:80>
ServerName cdn.foo.net
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID nofailover=On
ProxyPassReverse / http://192.168.10.7:80
ProxyPassReverse / http://192.168.10.8:80
<Proxy balancer://mycluster>
BalancerMember http://192.168.10.7:80 route=1 connectiontimeout=1
BalancerMember http://192.168.10.8:80 route=2 connectiontimeout=1
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
DocumentRoot "/pub/cdn.qsok.com/"
CustomLog /var/log/httpd/cdn.its-newid.net-access.log combined
ErrorLog /var/log/httpd/cdn.its-newid.net-error.log
</VirtualHost>
