Tomcat集群与Session共享 + Nginx负载
来源:互联网 发布:java. 线程通信 编辑:程序博客网 时间:2024/04/28 23:31
虽然曾经做过,却经常性忘记,特将其记录,以备后续查看。
相关资料:
Linux下Tomcat运行环境搭建详见另一片博文:http://blog.csdn.net/xiadi934/article/details/50911175
Tomcat7.0官方集群文档,具体细节参数请到该处查阅:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
Linux下搭建Nginx + Tomcat还有问题的请绕过。
思路
- 使用两台机器,本机(window,IP:192.168.1.108) + 虚拟机(Linux,IP:192.168.25.132)
- Linux上部署 nginx + tomcat7 + web,Window上部署 : tomcat7 + web
- 参考Tomcat官方集群例子, 采用Tomcat本身自带集群与Session共享
实现
- Window上Tomcat下server.xml文件配置,其余配置均不变,只修改以下配置
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat127"> <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="192.168.1.108" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6" /><!--本机局域网IP,端口默认--> <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>
- Linux上Tomcat下server.xml文件配置,其余配置均不变,加上同上配置
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat132"> <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="192.168.25.132" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6" /><!-- 虚拟机的局域网IP --> ... </Cluster> ... </Engine>
- 修改Nginx配置,加入负载均衡
upstream backendServer{ ip_hash; #可选,根据来源IP方式选择web服务器,省略的话按默认的轮循方式选择web服务器 server 127.0.0.1:8080; #虚拟机本机Tomcat server 192.168.1.108:8080; #Window上Tomcat}server { #设置监听端口 listen 80; charset utf-8; #设置服务器域名(IP访问和多域名访问可不设置) #server_name _*; #server_name www.test.com; #开启shtml支持 ssi on; ssi_silent_errors on; ssi_types text/shtml; #设置主访问日志 #access_log logs/access.log main; access_log /dev/null; error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location / { proxy_pass http://backendServer; include proxy.conf; }}
- 修改两个Tomcat下conf/web.xml,尾部加入以下代码
<distributable/> <!-- 允许Session分配 -->
- 加入测试页面,在两个Tomcat/webapps下创建文件夹test,并创建index.jsp,代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>首页</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <p>sessionID:<%=session.getId() %></p> <p>session创建时间:<%=session.getCreationTime() %></p> <p>服务器IP:<%=request.getRemoteHost() %></p> </body></html>
测试
启动两个Tomcat,测试结果如下,则说明配置负载+集群+Session共享成功。
Nginx默认是就近IP访问本机Linux下tomcat,效果图如下
关闭Linux下的tomcat,刷新后,则是访问Window下tomcat
请注意查看Session的创建时间,是一致的说明成功了。
0 0
- Tomcat集群与Session共享 + Nginx负载
- nginx与tomcat、memcached 集群Session共享
- nginx负载均衡 tomcat集群 memcache共享session
- nginx负载均衡 tomcat集群 memcache共享session
- nginx、memcached、tomcat 负载均衡和集群配置,session共享
- nginx负载均衡 tomcat集群 memcache共享session
- linux nginx 负载均衡 图片缓存 tomcat集群 session 共享
- memcached对nginx负载tomcat集群共享session
- 基于nginx负载均衡下 Tomcat 集群的 Session 共享
- Nginx+Tomcat集群 + Session共享
- nginx+tomcat集群,session共享
- Tomat集群 + Tomcat集群session共享 + Nginx负载 + Nginx静态资源代理
- Tomat集群 + Tomcat集群session共享 + Nginx负载 + Nginx静态资源代理
- apache+tomcat 均衡负载与集群中的session共享
- nginx+tomcat+memcached实现负载均衡与session共享
- tomcat集群与Nginx 反向代理负载均衡 session
- apache+tomcat集群 负载均衡 session共享
- nginx + tomcat 负载均衡+session复制共享
- 西普实验吧CTF-杯酒人生
- 一致性哈希算法
- 高逼格UI-ASD(Android Support Design)
- hdu5643 King's Game(约瑟夫环+线段树)
- 【重磅预测】2016年度十大互联网产品预言
- Tomcat集群与Session共享 + Nginx负载
- oracle日期时间数据类型字段更新例子
- 《Unix高级环境编编程》 第十二章 Thread Control
- 网络编程---以太网头 IP头 ARP包结构体封装及常用自定义网络转换函数(已测试)
- WinMain函数
- C++ 不能重载的运算符
- Java NIO系列教程(一) Java NIO 概述
- 开发自己的QQ游戏
- DOS命令集合