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]
© Copyright 2024