mod_proxy - Apache Software Foundation
Download
Report
Transcript mod_proxy - Apache Software Foundation
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]