mod_proxy Clustering and load balancing with Apache 2.2 mod_proxy

mod_proxy
Clustering and load balancing
with Apache 2.2 mod_proxy
Agenda
Proxy architecture
 Proxy protocols
 Load balancing
 Dynamic runtime management

Proxy architecture

Worker concept
 Forward
worker
 Reverse worker
 Named reverse workers
 Balancer workers
Forward worker
Standard mod_proxy forward proxying
 Enabled globally or per vhost with
ProxyRequests On


Fixed connection pool size
 Single
on prefork_mpm
 ThreadsPerChild on worker_mpm
Reverse worker
Single global worker
 Enabled by default
 Fixed connection pool size

 Single
on prefork_mpm
 ThreadsPerChild on worker_mpm

Used for unknown reverse proxy requests
from mod_rewrite
Named reverse workers
Created for each unique
hostname:port ProxyPass directive
 Created for each unique
hostname:port BalancerMember
directive
 Dynamic connection pool size for
threaded mpm’s.

 Defaults
to ThreadsPerChild
Balancer workers
Virtual worker
 Contain 1…n real protocol workers

LoadModule balancer_module
modules/mod_proxy_balancer.so
<Proxy balancer://cluster>
BalancerMember http://remote:port
…
</Proxy>
Proxy architecture

Shared memory runtime data
Parent process
Listener Socket
User
Child process
Scoreboard
Worker #1
Worker #1
• status
• elected
• read
• transferred
•…
Worker #2
Worker #n
Child process
Worker #2
Worker #1
Worker #2
Worker #n
Worker #n
Proxy architecture

Session affinity
JSESSIONID=XXX.A
ajp://host1:8009 route=A
AJP13
AJP/1.3
ajp://host1:8009 route=B
AJP13
AJP/1.3
<Proxy balancer://cluster>
BalancerMember ajp://host1:8009 route=A
BalancerMember ajp://host2:8009 route=B
</Proxy>
Tomcat/host1
jvmRoute=“A”
Tomcat/host2
jvmRoute=“B”
Proxy architecture

Sticky sessions
Proxy Protocols
http/https
 connect
 ftp
 ajp
 balancer

AJP Protocol

Apache Java Protocol
 Current
version 1.3 (AJP13)
 Binary http protocol
 No need to marshal/unmarshal http request
 Reusable connections
 Supported by most Java app servers


Tomcat
Jetty
http://jakarta.apache.org/tomcat/connectors-doc/common/ajpv13a.html
AJP 1.4 Protocol

Next generation AJP protocol
 Encryption
 Compression
 Feedback
from remote node
Too busy
 Going to shutdown
 Change dynamic config
 Update load balancer factor


Q4 2005
Load Balancing
mod_proxy_balancer.so
 Protocol independent
 Multiple strategy

 Request
 Traffic
Session affinity
 Failover

Load Balancing

BalancerMember
 Protocol
worker to remote
 Multiple protocols
 Session affinity (Sticky sessions)
 Preferred failover node
Balancer Parameters
<Proxy balancer://cluster param=value .. >
</Proxy>
..
ProxySet balancer://cluster param=value
stickysession
Check for session mark at the end of
session identifier.
 Configurable session identifier name

 stickysession=JSESSIONID
 stickysession=PHPSESSIONID
JSESSIONID=827BFE8CB4E01BCEAE41D02042485F05.SESSIONMARK
nofailover

Failover by default
 nofailover=On


Disables failover
Bound to remote until expired
 Enables
removing nodes from cluster
lbmethod

Defines balancer strategy
 lbmethod=Request
Default strategy
 Counts number of requests to remote

 lbmethod=Traffic
Default strategy
 Counts number of bytes read/transferred

timeout

Maximum time to wait for a free
connection in seconds
 All
workers are in error state
 All workers are busy
 Only for threaded mpm’s.
 Limiting the number of opened connection to
remote
maxattempts

Maximum number of failover attempts
 Defaults
to number of members
 maxattempts=1

No failover
Worker Parameters
ProxyPass http://host param=value ..
BalancerMember ajp://host param=value ..
..
ProxySet http://cluster param=value
loadfactor

loadfactor=1
 Normalized
load factor
 Used with BalancerMember
loadfactor=1
loadfactor=2
Same as:
loadfactor=3
loadfactor=6
retry
Number of seconds to retry the worker
 Default is 60 seconds.

Connection pool tuning

min
 Initial

number of connections to remote
max
 Maximum

number of connections to remote
smax
 connections

to remote that will not be destroyed
ttl
 destroy
all the connections that exceed the smax
keepalive

keepalive=On
 Send
SO_KEEPALIVE
 Useful if remote is behind firewall
timeout

Connection timeout in seconds
 Defaults
to ServerTimeout
route

Session route name
 Match
with jvmRoute in Tomcat
route=someName
..
<Engine .. jvmRoute=“someName” />
redirect

Preferred failover
 If
session route worker is in error state
BalancerMember .. route=A redirect=B
..
BalancerMember .. route=B
Dynamic runtime management

Runtime status
 Hook

for status_module
Balancer manager
 Web
page management
Runtime status
LoadModule status_module ..
..
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>
..
ProxyStatus On
Runtime
status
Balancer Manager
Dynamic management of balancer
 Management of balancer members

Balancer Manager
LoadModule proxy_balancer_module ..
..
<Location /manager>
SetHandler balancer-manager
Order deny,allow
Deny from all
Allow from localhost
</Location>
Q&A
Thank you
Mladen Turk
[email protected]