设为首页 收藏本站
查看: 756|回复: 0

[经验分享] web集群配置1——apache+tomcat+session复制

[复制链接]

尚未签到

发表于 2017-1-8 12:50:36 | 显示全部楼层 |阅读模式
  将QQ空间的帖子移到这里,原文地址  http://user.qzone.qq.com/396768440/blog/1364571672
  apache是使用非常广泛的web服务器,tomcat也是使用广泛的JSP服务器,可以使用apache和tomcat来搭建集群。
apache2.2的代理支持负载均衡,可以添加多个web服务(IP+端口),当然也能跳转到tomcat上。老版的apache可以下载mod_jk来配置tomcat。
多个tomcat间采用session复制的方式,这种方式tomcat个数不宜太多,通常在4个以下。

1、apache的配置文件conf/httpd.conf,添加以下内容。这些内容在文件中已有,只是被注释了。
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

2、apache的配置文件conf/extra/httpd-vhosts.conf,删除原来的VirtualHost节点,添加以下内容。其中8080、8081是tomcat的访问端口,loadfactor为负载因子。images目录的路径不转向tomcat,其它路径都转向tomcat。
<VirtualHost *:80>
ErrorLog "logs/error.log"
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access.log vcommon
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /images/ !
ProxyPass / balancer://tomcat/
ProxyPassReverse / balancer://tomcat/
<Proxy balancer://tomcat/>
BalancerMember http://127.0.0.1:8080 loadfactor=1
BalancerMember http://127.0.0.1:8081 loadfactor=1
#BalancerMember ajp://localhost:8009 loadfactor=1
#BalancerMember ajp://localhost:8010 loadfactor=1
ProxySet lbmethod=bybusyness
</Proxy>
</VirtualHost>

3、多tomcat间session复制的配置,这种方式下的tomcat只好不要超过过4个,否则会因session在多个tomcat间复制而开销太大。如果多个tomcat在一台机器上,需要修改server.xml中的端口(8005、8006、8080),防止端口冲突。
tomcat目录/conf/server.xml文件中,Engine节点添加jvmRoute属性,各个tomcat可配成不同值,用来标识每个tomcat。如s1表示第一个tomcat,s2表示第二个tomcat。<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">

Engine节点中添加以下内容。228.0.0.4是广播地址。
<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>
<Value className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Value 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"/>

4、在每个tomcat的web工程(这里用testtomcat为工程名)的目录下,WEB-INF/web.xml的web-app节点,添加以下内容。用来支持session复制。
<distributable/>

5、在每个tomcat的web工程的目录下,添加index.jsp文件,用来测试,内容如下。
<%java.util.Enumeration enums = request.getParameterNames();
String action = request.getParameter("action");
while(enums.hasMoreElements()){
String name = (String)enums.nextElement();
if(action != null && action.equals("add") && name.equals("action")==false){
session.setAttribute(name, request.getParameter(name));
}
if(action != null && action.equals("delete") && name.equals("action")==false){
session.removeAttribute(name);
}
}
String[] s = session.getValueNames();
out.println("session id:"+session.getId()+"<br/>");
if(s == null){
out.println("session is null <br/>");
}
else{
out.println("session is<br/>");
for(String sname:s){
out.print(sname+":"+session.getAttribute(sname)+"<br/>");
}
}
%>

完成以上以上5步,然后启动apache和2个tomcat。
本地浏览器中,访问不同的tomcat下相同的web工程,生成的sessionId一样,并且能共享session。
1)访问以下URL,设置session值。页面显示session id中后.s2,表示此次访问定位到tomcat2。如果tomcat中不配置jvmRoute属性,则不会有.s2。
http://127.0.0.1/testtomcat/index.jsp?action=add&name=jim&sex=man
页面内容:
session id:F7AFF0B6D28051B9473313BA291FD484.s2
session is
name:jim
sex:man

2)打开URL。如果快速刷新,会看到s1、s2交替变化。
http://127.0.0.1/testtomcat/index.jsp
页面内容
session id:F7AFF0B6D28051B9473313BA291FD484.s2
session is
name:jim
sex:man

3)停掉tomcat2,再打开,则会访问到s1节点。
http://127.0.0.1/testtomcat/index.jsp
页面内容
session id:F7AFF0B6D28051B9473313BA291FD484.s1
session is
name:jim
sex:man

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325575-1-1.html 上篇帖子: apache http server tomcat jk 配置,实现url rewrite功能 下篇帖子: xampp1.74 apache不能正常运行的解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表