码迷,mamicode.com
首页 > 其他好文 > 详细

Tomcat高级实现

时间:2017-11-07 11:18:40      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ade   scheduler   ajp   adf   red   down   border   span   for   

会话保持:

(1) session sticky

source_ip

nginx: ip_hash

haproxy: source

lvs: sh

cookie:

nginx:hash

haproxy: cookie

(2) session cluster:delta session manager

(3) session server:redis(store), memcached(cache)

 

Tomcat Cluster(session)

(1) session sticky

(2) session cluster

tomcat delta manager

(3) session server

memcached

 

Tomcat Cluster

(1) httpd + tomcat cluster

httpd: mod_proxy, mod_proxy_http, mod_proxy_balancer

tomcat cluster:http connector

(2) httpd + tomcat cluster

httpd: mod_proxy, mod_proxy_ajp, mod_proxy_balancer

tomcat cluster:ajp connector

(3) httpd + tomcat cluster

httpd: mod_jk

tomcat cluster:ajp connector

(4) nginx + tomcat cluster

 

 

第一种方法的实现:

<proxy balancer://tcsrvs>

BalancerMember http://172.18.100.67:8080

BalancerMember http://172.18.100.68:8080

ProxySet lbmethod=byrequests

</Proxy>

 

<VirtualHost *:80>

ServerName lb.magedu.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tcsrvs/

ProxyPassReverse / balancer://tcsrvs/

<Location />

Require all granted

</Location>

</VirtualHost>

 

BalancerMember:

BalancerMember [balancerurl] url [key=value [key=value ...]]

status:

D: Worker is disabled and will not accept any requests.

S: Worker is administratively stopped.

I: Worker is in ignore-errors mode and will always be considered available.

H: Worker is in hot-standby mode and will only be used if no other viable workers are available.

E: Worker is in an error state.

N: Worker is in drain mode and will only accept existing sticky sessions destined for itself and ignore all other requests.

loadfactor:

负载因子,即权重;

lbmethod:

Balancer load-balance method. Select the load-balancing scheduler method to use. Either byrequests, to perform weighted request counting; bytraffic, to perform weighted traffic byte count balancing; or bybusyness, to perform pending request balancing. The default is byrequests.

stickysession

Balancer sticky session name. The value is usually set to something like JSESSIONID or PHPSESSIONID, and it depends on the backend application server that support sessions. If the backend application server uses different name for cookies and url encoded id (like servlet containers) use | to separate them. The first part is for the cookie the second for the path.

Available in Apache HTTP Server 2.4.4 and later.

 

会话粘性的实现方法:

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

 

<proxy balancer://tcsrvs>

BalancerMember http://172.18.100.67:8080 route=TomcatA loadfactor=1

BalancerMember http://172.18.100.68:8080 route=TomcatB loadfactor=2

ProxySet lbmethod=byrequests

ProxySet stickysession=ROUTEID

</Proxy>

 

<VirtualHost *:80>

ServerName lb.magedu.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tcsrvs/

ProxyPassReverse / balancer://tcsrvs/

<Location />

Require all granted

</Location>

</VirtualHost>

 

启用管理接口:

<Location /balancer-manager>

SetHandler balancer-manager

ProxyPass !

Require all granted

</Location>

 

示例程序:

演示效果,在TomcatA上某context中(如/test),提供如下页面

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="red">TomcatA.magedu.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

 

 

演示效果,在TomcatB上某context中(如/test),提供如下页面

<%@ page language="java" %>

<html>

<head><title>TomcatB</title></head>

<body>

<h1><font color="blue">TomcatB.magedu.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

 

第二种方式:

<proxy balancer://tcsrvs>

BalancerMember ajp://172.18.100.67:8009

BalancerMember ajp://172.18.100.68:8009

ProxySet lbmethod=byrequests

</Proxy>

 

<VirtualHost *:80>

ServerName lb.magedu.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tcsrvs/

ProxyPassReverse / balancer://tcsrvs/

<Location />

Require all granted

</Location>

<Location /balancer-manager>

SetHandler balancer-manager

ProxyPass !

Require all granted

</Location>

</VirtualHost>

 

保持会话的方式参考前一种方式。

 

Tomcat Session Replication Cluster:

(1) 配置启用集群,将下列配置放置于<engine>或<host>中;

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="8">

 

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

 

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

 

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

 

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

 

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

 

确保Engine的jvmRoute属性配置正确。

 

(2) 配置webapps

编辑WEB-INF/web.xml,添加<distributable/>元素;

 

注意:CentOS 7上的tomcat自带的文档中的配置示例有语法错误;

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

 

绑定的地址为auto时,会自动解析本地主机名,并解析得出的IP地址作为使用的地址;

Tomcat高级实现

标签:ade   scheduler   ajp   adf   red   down   border   span   for   

原文地址:http://www.cnblogs.com/heiye123/p/7797905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!