Tomcat集群
来源:互联网 发布:洛阳智网网络爆客网 编辑:程序博客网 时间:2024/04/29 05:28
高并发问题
网站发展壮大,必然得能承受住庞大的网站访问量;
如果服务器访问量过大,就会出现服应用服务器崩溃的情况,如何解决?
多服务器负载均衡
webSphere或tomcat,都提供了一种通用的解决方式,就是多台服务器来分担访问量。
这样一个服务器上的压力就会减小很多,可以根据需求配置任意多的服务器来支撑应用系统,如果一台服务崩溃了,那么另外的应用服务器依然可以继续支持应用继续服务。
多应用服务器的简单流程图大致如下:
为了实现这个原理我们就需要解决两个问题:
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持)
2:如何分发请求到各个应用服务器实现压力分解:(用apache或nginx做 web服务器)
Session共享
Tomcat的简单集群设置session共享
server.xml,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上。
该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <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" bind="127.0.0.1" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="127.0.0.1" port="4001" selectorTimeout="100" 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=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
修改web.xml:
只需要在节点中添加这个节点就可以了。加入
<distrubutable/>
nginx + tomcat + redis尝试
利用tomcat和nginx+redis共享session:
windows环境:
nginx: localhost:8888
tomcat1: localhost:8180
tomcat2: localhost:8280
redis: localhost:16379
tomcat配置
因为我是在一台机器上做的,所以2个tomcat需要配置不同端口:
按照百位区分:8180,8280这样:
- tomcat1:
<Server port="8105" shutdown="SHUTDOWN"><!-- shutdown 端口 --><Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><!-- http 端口 --><Connector port="8109" protocol="AJP/1.3" redirectPort="8443" /><!-- AJP端口,虽然我还不知道是用来干啥的 -->
- tomcat2:
<Server port="8205" shutdown="SHUTDOWN"><!-- shutdown 端口 --><Connector port="8280" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><!-- http 端口 --><Connector port="8209" protocol="AJP/1.3" redirectPort="8443" /><!-- AJP端口,虽然我还不知道是用来干啥的 -->
启动脚本catalina.bat run
nginx配置
worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #这个是负载均衡的所有服务器 upstream webservers { server localhost:8180; server localhost:8280; } server { listen 8888; server_name localhost; charset utf-8; location / { root html; index index.html index.htm; proxy_pass http://webservers; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}启动脚本:`start nginx`或`start nginx.exe`
redis配置
其实只有下面两行配置要改,搜索改这两行就行
port 16379maxheap 1024000000
注意,最好改端口,因为6379很可能被占用了。
redis server启动:
redis-server.exe XX.conf
redis-cli启动:
redis-cli.exe XX.conf
运行效果
整个程序只有一个jsp页面,主要是查看session是否一致,如果一致,则说明已经共享:
可以看到,不管是直接访问tomcat1,2还是走nginx,session都是相同的,可以看到session已经共享。
同时在redis中可以看到已经存在session(3493E9EF683CF8BB1F1992965625862A):
注
下载资源
测试版Java web小程序
windows版redis
参考链接
Windows下安装并设置Redis
Tomcat集群配置学习篇—–分布式应用
- Tomcat集群
- tomcat集群
- Tomcat集群
- TOMCAT 集群
- tomcat集群
- Tomcat集群
- tomcat集群
- tomcat 集群
- tomcat集群
- tomcat集群
- Tomcat集群
- tomcat集群
- tomcat集群
- tomcat集群
- TOMCAT集群
- tomcat集群
- tomcat 集群
- Tomcat集群
- 金字塔(函数调用)
- hdu1171 Big Event in HDU --01背包
- sdwebimage相关
- uva658
- mysql存储过程详解
- Tomcat集群
- VB作业
- poj1836——Alignment(dp)
- Android ImageView实现圆形头像
- AndroidManifes清单文件
- HDU1010:Tempter of the Bone(DFS)
- Windows下使用VisualSVN Server搭建SVN服务器
- 【UNET自学日志】Part9 造成伤害
- good blog about android base