380 likes | 1.08k Views
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.
E N D
mod_proxy Clustering and load balancingwith 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 withProxyRequests 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 requestsfrom mod_rewrite
Named reverse workers • Created for each uniquehostname:port ProxyPass directive • Created for each uniquehostname:port BalancerMember directive • Dynamic connection pool size forthreaded 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 Scoreboard Listener Socket Childprocess Parent process • Worker #1 • status • elected • read • transferred • … Worker #1 Worker #2 Worker #n Child process Worker #2 Worker #1 User Worker #n Worker #2 Worker #n
Proxy architecture JSESSIONID=XXX.A • Session affinity Tomcat/host1 jvmRoute=“A” AJP/1.3 ajp://host1:8009 route=A AJP13 Tomcat/host2 jvmRoute=“B” AJP/1.3 ajp://host1:8009 route=B AJP13 <Proxy balancer://cluster> BalancerMember ajp://host1:8009 route=A BalancerMember ajp://host2:8009 route=B</Proxy>
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
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>