基于mod_proxy模块
配置内容如下:
准备工作--》检查模块
# httpd -D
DUMP_MODULES
……………………
proxy_module
(shared)
proxy_balancer_module (shared)
proxy_ftp_module
(shared)
proxy_http_module (shared)
proxy_connect_module (shared)
前端apache配置内容-->192.168.9.130
#
cat /etc/httpd/conf.d/proxy_tomcat.conf
ProxyVia On
#关闭正向代理
ProxyRequests
Off
#前端向后端转发的时候支持虚拟主机
ProxyPreserveHost
On
<Proxy balancer://lbcluster>
#这里基于HTTP/1.1协议,也可以基于AJP/1.3,需要修改对应的后端tomcat服务器的连接器属性,端口也要和tomcat中定义的一致.
BalancerMember http://192.168.6.128:80 loadfactor=1
BalancerMember http://192.168.6.129:80 loadfactor=1
#设定负载均衡算法(byrequests基于权重,类似haproxy的roundrobin)(bybusiness基于当前负载情况,类似于haproxy的leastconn最少连接)(bytraffic基于后端流量)
ProxySet lbmethod=byrequests
</Proxy>
#如果访问的是http://ip/lbmanager,则不代理,balancer-manager可以保留代理状态信息
<Location /lbmanager>
#强制所有匹配的文件被一个指定的处理器处理
SetHandler balancer-manager
Proxypass !
Order
Deny,Allow
Allow
from all
</Location>
#代理集群
#代理(这里代理后的路径最后有个/,一定不能省略)
ProxyPass / balancer://lbcluster/
#作用在于原请求之后追加上redirect的路径
ProxyPassReverse
/ balancer://lbcluster/
#2.2控制机制,2.4使用Require
all granted
<Location *
>
Order
allow,deny
Allow from
all
</Location>
<Location /
>
Order
allow,deny
Allow from
all
</Location>
后端tomcat配置-->
?所有节点--》
#vim server.xml
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
#mkdir -pv
$CATALINA_HOME/webapps/testapp/WEB-INF/{lib,classes}
添加分布式配置文件
#cp $CATALINA_HOME/conf/web.xml $CATALINA_HOME/webapps/testapp/WEB-INF
#vim $CATALINA_HOME/webapps/testapp/WEB-INF/web.xml
添加
节点A--》192.168.6.128
在server.xml的Engine段中添加如下内容(也可以在Host中添加),这里主要修改本节点心跳地址和端口
#vim server.xml
<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="224.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.6.128"
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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</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>
#vim
$CATALINA_HOME/webapps/testapp/index.jsp
<%@
page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font
color="red">TomcatA </font></h1>
<table
align="centre" border="1">
<tr>
<td>Session
ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created
on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
节点B--》192.168.6.129
在server.xml的Engine段中添加如下内容(也可以在Host中添加)
#vim server.xml
<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="224.0.0.4" port="45564" frequency="500" dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.6.129" port="4001" 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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</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>
#vim
$CATALINA_HOME/webapps/testapp/index.jsp
<%@
page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font
color="blue">TomcatB </font></h1>
<table
align="centre" border="1">
<tr>
<td>Session
ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created
on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
测试--》访问http://192.168.9.130/testapp
如果正常,则会刷新过程中分别显示TomcatA和TomcatB,但是会话一致

说实话,我做到最后会话不知为什么不能保持,日志中已经互相检测到,但是会话疑似没有复制,这个
(暂留)
中间遇到的问题如下:
Deployer className选项可能会造成以下错误
严重: FarmWarDeployer can only work as
host cluster subelement!

如果配置完毕后,发现不能启动tomcat,则需要将组播地址添加到路由里,并添加到/etc/crontab
route
add -net 224.0.0.4 netmask 255.255.255.255 dev eth0
基于mod_jk模块(暂留)
?准备工作--》
1、
为了避免用户直接访问后端Tomcat实例,影响负载均衡的效果,建议在Tomcat 7的各实例上禁用HTTP/1.1连接器。
2、为每一个Tomcat
7实例的引擎添加jvmRoute参数,并通过其为当前引擎设置全局惟一标识符。如下所示。需要注意的是,每一个实例的jvmRoute的值均不能相同。
3、前端apache如果使用的是mod_jk模式,则tomcat引擎一定要定义jvmroute参数;如果前端apache使用的是mod_proxy模式,则不需要定义。
tomcat引擎的开头示例如下--->
<Engine name=”Standalone”
defaultHost=”localhost” jvmRoute=” TomcatA ”>
配置过程--》
配置apache,修改/etc/httpd/extra/httpd-jk.conf为如下内容:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile
/etc/httpd/extra/workers.properties
JkLogFile
logs/mod_jk.log
JkLogLevel
debug
#访问根下的任意文件,都转到集群1上
JkMount /* lbcluster1
#访问根下的jkstatus,都转到stat1上
JkMount
/jkstatus/
stat1
编辑/etc/httpd/extra/workers.properties,添加如下内容:
worker.list =
lbcluster1,stat1
#实例类型
worker.TomcatA.type =
ajp13
#实例内定义的虚拟主机的访问ip
worker.TomcatA.host
= 172.16.100.1
#实例与连接器之间的端口
worker.TomcatA.port
= 8009
#实例权重
worker.TomcatA.lbfactor = 5
worker.TomcatB.type =
ajp13
worker.TomcatB.host =
172.16.100.2
worker.TomcatB.port
= 8009
worker.TomcatB.lbfactor
= 5
#集群类型
worker.lbcluster1.type = lb
#会话绑定
worker.lbcluster1.sticky_session
= 1
#调度方法
worker.lbcluster1.method = R
#集群里含有的实例
worker.lbcluster1.balance_workers
= TomcatA,
TomcatB
worker.stat1.type =
status
tomcat之负载均衡(apache反响代理tomcat)
原文:http://www.cnblogs.com/aaa103439/p/3543802.html