Mod_proxy Clustering and load balancing with Apache 2.2 mod_proxy

Preview:

Citation preview

mod_proxy

Clustering and load balancingwith Apache 2.2 mod_proxy

Agenda

Proxy architecture Proxy protocols Load balancing Dynamic runtime management

Proxy architecture

Worker conceptForward workerReverse workerNamed reverse workersBalancer workers

Forward worker

Standard mod_proxy forward proxying Enabled globally or per vhost withProxyRequests On

Fixed connection pool sizeSingle on prefork_mpmThreadsPerChild on worker_mpm

Reverse worker

Single global worker Enabled by default Fixed connection pool size

Single on prefork_mpmThreadsPerChild 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

Parent process

Listener Socket

Worker #1

Worker #2

Worker #n

Child process

Worker #1

Worker #2

Worker #n

Child process

Worker #1• status• elected• read• transferred• …

Worker #2

Worker #n

Scoreboard

User

Proxy architecture Session affinity

ajp://host1:8009 route=ATomcat/host1jvmRoute=“A”

AJP

13

AJP

/1.3

ajp://host1:8009 route=BTomcat/host2jvmRoute=“B”

AJP

13

AJP

/1.3

<Proxy balancer://cluster> BalancerMember ajp://host1:8009 route=A BalancerMember ajp://host2:8009 route=B</Proxy>

JSESSIONID=XXX.A

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 protocolEncryptionCompressionFeedback 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

RequestTraffic

Session affinity Failover

Load Balancing

BalancerMemberProtocol worker to remoteMultiple protocolsSession 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 namestickysession=JSESSIONIDstickysession=PHPSESSIONID

JSESSIONID=827BFE8CB4E01BCEAE41D02042485F05.SESSIONMARK

nofailover

Failover by defaultnofailover=On

Disables failover

Bound to remote until expiredEnables removing nodes from cluster

lbmethod

Defines balancer strategylbmethod=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 secondsAll workers are in error stateAll workers are busyOnly for threaded mpm’s.Limiting the number of opened connection to

remote

maxattempts

Maximum number of failover attemptsDefaults to number of membersmaxattempts=1

No failover

Worker Parameters

ProxyPass http://host param=value ..

BalancerMember ajp://host param=value ..

..

ProxySet http://cluster param=value

loadfactor

loadfactor=1Normalized load factorUsed with BalancerMember loadfactor=1 loadfactor=2Same 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=OnSend SO_KEEPALIVEUseful if remote is behind firewall

timeout

Connection timeout in secondsDefaults to ServerTimeout

route

Session route nameMatch 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 statusHook for status_module

Balancer managerWeb page management

Runtime status

LoadModule status_module ....<Location /server-status>

SetHandler server-statusOrder deny,allowDeny from allAllow from localhost

</Location>..

ProxyStatus On

Runtimestatus

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 Turkmturk@apache.org

Recommended