100% found this document useful (2 votes)
3K views47 pages

HTTPD Load Balancing

This document discusses load balancing with Apache HTTP Server (HTTPD) version 2.2 and later. It begins by explaining the basics of load balancing including why it is used and common approaches. It then discusses specific load balancing strategies like DNS-based, layer 4, layer 7, and hardware/software-based load balancing. The rest of the document provides examples of configuring HTTPD for load balancing including using it as a gateway, setting up backend servers, basic balancer configuration, connection pooling, and more. It also covers related topics like persistence, failover, caching, and balancer management.

Uploaded by

oscar810429
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
100% found this document useful (2 votes)
3K views47 pages

HTTPD Load Balancing

This document discusses load balancing with Apache HTTP Server (HTTPD) version 2.2 and later. It begins by explaining the basics of load balancing including why it is used and common approaches. It then discusses specific load balancing strategies like DNS-based, layer 4, layer 7, and hardware/software-based load balancing. The rest of the document provides examples of configuring HTTPD for load balancing including using it as a gateway, setting up backend servers, basic balancer configuration, connection pooling, and more. It also covers related topics like persistence, failover, caching, and balancer management.

Uploaded by

oscar810429
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
You are on page 1/ 47

Apache HTTP Server

Load-Balancing with Apache HTTPD 2.2 and later

Erik Abele
www.eatc.de
About Me
• Working internationally as IT Consultant
• Areas: Administration & Operations
• Working on and with Open Source
• Apache Software Foundation
• Other projects (Ruby, Zenoss, ...)
• Living in South Germany
Content

• Basics
• Strategies
• Examples
• Questions
Basics
Why Load-Balancing?

• Optimizing Resource Utilization


• Maximizing Quality of Service
• Increasing Reliability & Availability
• Improving Security
• Lowering Administration Risks
Approaches
• DNS-Based Load-Balancing
• Round Robin
• Geographical Scheduling
• Layer 4 Load-Balancing
• Layer 7 Load-Balancing
• Hardware-/Software-Based Load-Balancers
DNS-Based Balancing
• Clients resolve
FQDN

• Response with
several IPs or
choosen
randomly or
e.g. according
to proximity
Layer 4 Balancing

• Transport Layer
• Deals with TCP connections
• Routes pure packets
• NAT with port and transaction awareness
Layer 7 Balancing

• Application Layer
• Deals with HTTP requests
• Forwards whole requests
• Gateway / Reverse Proxy
Layer 4-7 Balancing
• Combination: routing
packets but aware of
HTTP content
• Load-Balancer acts
as a multilayer switch
• Basic schema always
the same
Hardware-Based LBs
• Mostly real routers/switches with ML capabilites

• Pros

• Very fast

• Cons

• Expensive

• Proprietary

• Examples: Cisco LoadDirector, F5 Big/ip, Barracuda


Software-Based LBs
• Software-based appliances or just packages

• Pros

• Cheaper and also available as Open Source

• Simpler to configure and often more flexible

• Cons

• Not as fast as hardware based solutions

• Examples: Pen, Pound, Squid, Linux VS, Zeus ZXTM


Balancer Features 1
• TCP Offloading

• TCP Buffering

• SSL Offloading & Acceleration

• HTTP Caching

• HTTP Compression

• Client Authentication

• Attack Protection & Firewalling


Balancer Features 2

• Content-Aware Load-Balancing
• Request Rate Shaping
• Bandwidth Shaping
• Traffic Valuation & Prioritization
• Programmatic Traffic Manipulation
Balancing Algorithms
• Random Choice

• Round Robin

• Weighted Round Robin

• Request counting algorithm

• Weighted traffic counting algorithm

• Based on other factors (load, response time, ...)


Strategies
Gateway

• “Reverse Proxy” - the frontend:


• Apache HTTPD with mod_proxy and
mod_proxy_balancer as well as one of:
• mod_proxy_http
• mod_proxy_ajp
Application Servers

• A pool of servers - the backend:


• Apache HTTP with PHP, Perl, ...
• Apache Tomcat, JBoss, Glassfish, ...
• Zope, CherryPy, Mongrel, WebRick
• ...
Focus: Scalability
• A single load-balancer in front of a pool of
application servers
Persistence

• “Session Stickiness”
• A problem when not able to use a shared
data store for the application (e.g. when
using multiple physical locations where
replication becomes problematic)
• Alternative: using cookies as data store
Focus: Resilience
• Two or more load-balancers in front of a pool of
application servers
Failover
• Active/Active

• Both load-balancers are actively serving requests

• Active/Passive

• Only one load-balancer is actively serving


requests, the other one takes over in case of
failure

• There needs to be a way to detect failures


Focus: Globalization
• Several groups of load-balancers in more
than one physical location
Location Selection

• DNS-Based
• Round Robin
• Based on geographical proximity
• Based on utilization of location
• FQDN-Based (e.g. wwwN.example.com)
Examples
HTTPD as Gateway

• Required Modules:
• mod_proxy
• mod_proxy_balancer
• mod_proxy_http / mod_proxy_ajp
• mod_proxy_ftp
HTTP Backends

• Requires extension module:


mod_proxy_http
• Usage:
BalancerMember http://1.1.1.1:8080 ...
AJP Backends

• Requires extension module:


mod_proxy_ajp
• Usage:
BalancerMember ajp://1.1.1.1: 8009 ...
Basic Configuration
<VirtualHost *:80>
ServerName www.example.com
...
ProxyRequests Off
ProxyVia Off
ProxyErrorOverride On
ProxyPreserveHost On
ProxyTimeout 30

ProxyPass / balancer://app_farm lbmethod=byrequests maxattempts=3 \


nofailover=Off stickysession=SID

<Proxy balancer://app_farm>
BalancerMember http://1.1.1.1:8080 smax=15 max=50 lbfactor=2
BalancerMember http://1.1.1.2:8080 smax=15 max=50 lbfactor=2
BalancerMember http://1.1.1.3:8080 smax=10 max=25 lbfactor=1
</Proxy>
</VirtualHost>
Connection Pooling
• min
Minimum number of connections that will always
be open to the backend server

• max
Hard Maximum number of connections that will
be allowed to the backend server

• smax & ttl


Soft Maximum number of connections that will be
created on demand, TTL for connect’s above smax
Parameters 1
• lbmethod
The load-balancing scheduler method to
use, e.g.
• weighted request counting
• weighted traffic counting
• lbset
Assigns a specific cluster set to members
Parameters 2
• loadfactor
Defines the normalized weighted load
applied to this balancer member, e.g.
• loadfactor=1
• loadfactor=2 <- twice as much req’s / IO
• status
Defines the initial state of this member
Hot-Standby
<VirtualHost *:80>
ServerName www.example.com
...

ProxyPass / balancer://app_farm lbmethod=byrequests maxattempts=3 \


nofailover=Off stickysession=SID

<Proxy balancer://app_farm>
BalancerMember http://1.1.1.1:8080 ...
BalancerMember http://1.1.1.2:8080 ...
BalancerMember http://1.1.1.3:8080 ... status=+H
</Proxy>
</VirtualHost>
Sticky Sessions

• Supported by stickysession flag:


stickysession=PHPSESSID
stickysession=JSESSIONID|jsessionid
Environment Variables
• Generated by mod_proxy
• X-Forwarded-For

• X-Forwarded-Host

• X-Forwarded-Server

• Influence mod_proxy
• SetEnv force-proxy-request-1.0 1

• SetEnv proxy-nokeepalive 1
ProxyPassReverse

ProxyPass / balancer://app_farm ...

ProxyPassReverse / http://1.1.1.1:8080/
ProxyPassReverse / http://1.1.1.2:8080/

<Proxy balancer://app_farm>
BalancerMember http://1.1.1.1:8080 ...
BalancerMember http://1.1.1.2:8080 ...
</Proxy>
URL Rewriting
ProxyPass ~ ^/+(.*)$ balancer://app_farm/$1 ...

[or]

ProxyPassMatch ^/+(.*)$ balancer://app_farm/$1 ...

[or]

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/.balancer


RewriteRule ^(.*)$ - [L]

RewriteRule ^/+(.*)$ balancer://app_farm/$1 [P,L]

ProxySet balancer://app_farm lbmethod=bytraffic


Using Headers
<VirtualHost *:443>
ServerName www.example.com
...
RequestHeader set Front-End-Https "On"
...

ProxyPass / balancer://app_farm lbmethod=byrequests maxattempts=3 \


nofailover=Off stickysession=SID

<Proxy balancer://app_farm>
BalancerMember http://1.1.1.1:8080 smax=15 max=50 lbfactor=2
...
</Proxy>
</VirtualHost>
Filtering Content

• mod_mime, e.g.
AddOutputFilter INCLUDES .shtml

• mod_filter
• mod_proxy_html
Using Compression

• We can use mod_deflate as usually:


AddOutputFilterByType DEFLATE text/html
Offloading SSL

• Simply configure SSL on the frontend


server as you would do without a balancer
Caching
<VirtualHost *:80>
ServerName www.example.com
...
CacheEnable mem /
CacheEnable disk /
CacheDefaultExpire 1800
CacheMaxExpire 3600
...

ProxyPass / balancer://app_farm lbmethod=byrequests maxattempts=3 \


nofailover=Off stickysession=SID

<Proxy balancer://app_farm>
BalancerMember http://1.1.1.1:8080 smax=15 max=50 lbfactor=2
...
</Proxy>
</VirtualHost>
Failover

• Automatically done
• if a member is in-error the next one is
tried
• Can be switched off if backend servers do
not support session replication
Balancer Management
• Requires mod_status
• Allows for real-time monitoring
• Allows for dynamic updates of parameters
of balancer members
• enable/disable balancer members
• specify balance factors, methods, sets
Screenshot
Example Configuration
<Location /.balancer>
SetHandler balancer-manager

AuthType Digest
AuthName "Balancer Manager"
AuthDigestDomain /.balancer
AuthDigestProvider file
AuthUserFile /www/etc/httpd/balancer.passwd

Require user operations


</Location>

...

ProxyPass /.balancer !
ProxyPass / balancer://app_farm ...
Questions?

You might also like