现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量;大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎么办,难道就只能去重启服务器吗?好,如果是一般的小型公益网站到也无所谓,但如果是比如像大型航空公司售票等电子商务网站,每天每小时都有大量的订单业务,如果这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避免呢。

别担心,不管是目前IBM的webSphere还是大众化的tomcat服务器,都为我们提供了一种通用的解决方式,就是多台服务器来分担访问量,这样在一个服务器上的压力就会减小很多,你可以根据自己的需求去配置任意多的服务器来支撑你的应用系统,如果一台服务崩溃了,那么另外的应用服务器依然可以继续支持应用继续服务。多应用服务器的简单流程图大致如下:

为了实现这个原理我们就需要解决两个问题:

1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持)

2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache做 web服务器)

下面我们就是实际行动来看看如何实现这种实现。

环境配置:

App应用服务器apache-tomcat-7.0.52-1

web服务器:apache的apache 2.0.55

Java环境:jdk1.6

系统环境:winxp系统

1) web服务器配置

首先安装apache的web服务器:

apache服务器和tomcat的连接方法其实有三种:mod_JK、http_proxy和ajp_proxy。

一:软件环境
   1. Apache: apache 2.0.55 (由http://httpd.apache.org/进入下载)(点击下载apache 2.0.55)
   2. Tomcat: apache-tomcat-7.0.52-1
   3. mod_jk: 在页面 http://tomcat.apache.org/   Download 标题下找到 Tomcat Connectors 链接进入(点击下载mod_jk-apache-2.0.55.so),看起来像是个Unix/Linux下的动态库,实际应是个Win32 的 DLL 动态库,大概是为保持不同平台配置的一致性,才用了这个扩展名。

二:负载均衡
 用Apache进行分流,把请求按照权重以及当时负荷分tomcat1,tomcat2...去处理

1. 安装apache,tomcat
   我把Apache安装在D:/Apache Group/Apache2
  解压两分Tomcat, 分别在 D:/Apache Group/apache-tomcat-7.0.52-1,D:/Apache Group/apache-tomcat-7.0.52-1

2.修改Apache配置文件http.conf

在apache安装目录下conf目录中找到http.conf,在文件最后加上下面一句话就可以了

include conf/mod_jk.conf

3. http.conf 同目录下新建mod_jk.conf文件,内容如下

  1. #加载mod_jk Module
  2. LoadModule jk_module modules/mod_jk-apache-2.0.55.so
  3. #指定 workers.properties文件路径
  4. JkWorkersFile conf/workers.properties
  5. #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
  6. JkMount /*.jsp controller

如果还要指定*.do也进行分流就再加一行
JkMount /*.do controller

如果你想对所有的请求进行分流只需要写成
JkMount /* controller

4. 在http.conf同目录下新建 workers.properties文件

  1. worker.list = controller,tomcat1,tomcat2  #server 列表
  2. #========tomcat1========
  3. worker.tomcat1.port=8019       #ajp13 端口号,在tomcat下server.xml配置,默认8009
  4. worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
  5. worker.tomcat1.type=ajp13
  6. worker.tomcat1.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
  7. #========tomcat2========
  8. worker.tomcat2.port=8029       #ajp13 端口号,在tomcat下server.xml配置,默认8009
  9. worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
  10. worker.tomcat2.type=ajp13
  11. worker.tomcat2.lbfactor = 2    #server的加权比重,值越高,分得的请求越多
  12. #========controller,负载均衡控制器========
  13. worker.controller.type=lb
  14. worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat
  15. worker.controller.sticky_session=1

5. 修改tomcat配置文件server.xml
如果你是水平集群,即在不同电脑上安装tomcat,tomcat的安装数量为一个,可以不必修改tomcat配置文件.我这里是在同一台电脑上安装两个tomcat,实现的是垂直集群方式,所以必须修改其中一个的设置,以避免端口冲突,按照参考文章是把原来以9开头的端口号改为以9开头端口号,但是在我机器上如果以9开头的端口号,例如9080、9082会与我的WebSphere Application Server配置冲突,所以我这里采取的策略是把原来端口号的第三位改为1,如8080改为8180。

打开tomcat2/conf/server.xml文件

1) 将关闭Tomcat的监听端口改成由8005改为8105
即把
 <Server port="8005" shutdown="SHUTDOWN">
改为
 <Server port="8105" shutdown="SHUTDOWN">

2) 把http服务端口号由8080改为8180
找到
 <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <CONNECTOR port="8080" 
把这里的8080改为8180

3) 把AJP端口号由8009改为8109
找到
 <!-- Define an AJP 1.3 Connector on port 8009 -->
    <CONNECTOR port="8009"
把这里的8009改为8109

4) 把 HTTP 代理端口从8082改为8182(这个配置默认是被注释掉的,可跳过这一步)
找到
<CONNECTOR port="8082"
把这里的8082改为8182

5) 编写一个测试 jsp
建立一个目录TestCluster,里面新建一个test.jsp,内容为

把TestCluster放到tomcat1,tomcat2的webapps下

6) 启动apache,tomcat1,tomcat2,进行测试
通过 http://localhost/TestCluster/test.jsp 访问,多刷新几次页面,查看Tomcat1和Tomcat2的窗口,你将可以看到打印了一行行"===========================",并且从统计上来说,大约在tomcat2打印的数量是在Tomcat1中的两倍,可以看到请求会被tomcat1,tomcat2按照不同的权重分流处理,实现了负载均衡。

作下面的集群配置,请在workers.properties把tomcat1和tomcat2的权重改为一样的,使请求较平均分配,将有便于看到实验的效果。

首先配置web应用服务器配置tomcat-A配置

1:修改tomcat的server.xml文件增加如下内容

贴出代码,方便复制:

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
  2. channelSendOptions="6">
  3. <Manager className="org.apache.catalina.ha.session.BackupManager"
  4. expireSessionsOnShutdown="false"
  5. notifyListenersOnReplication="true"
  6. mapSendOptions="6"/>
  7. <Manager className="org.apache.catalina.ha.session.DeltaManager"
  8. expireSessionsOnShutdown="false"
  9. notifyListenersOnReplication="true"/>
  10. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
  11. <Membership className="org.apache.catalina.tribes.membership.McastService"
  12. bind="127.0.0.1"
  13. address="228.0.0.4"
  14. port="45564"
  15. frequency="500"
  16. dropTime="3000"/>
  17. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  18. address="127.0.0.1"
  19. port="4001"
  20. selectorTimeout="100"
  21. maxThreads="6"/>
  22. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
  23. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
  24. </Sender>
  25. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
  26. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  27. <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
  28. </Channel>
  29. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
  30. filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
  31. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  32. </Cluster>

备注:

1) App应用服务器tomcat-B配置和tomcat-A基本相同,但需要注意的是两台服务器如果在一个电脑上就需要注意端口的冲突问题,比如:tomcat-A的端口是8080,那么tomcat-B就是8081或者其他,其他的以此类推

我这里这里的端口配置如下:

tomcat-1:serverport:8081   ajp/1.3connector:8019  <Server port="8015" shutdown="SHUTDOWN">

tomcat-2:serverport:8082   ajp/1.3connector:8029  <Server port="8025" shutdown="SHUTDOWN">

2) 然后就是新建一个web应用测试一下,在新建应用的web.xml里面需要加上

<distributable/>

3) 到这里就可以测试你的配置了,先启动tomcat-1,然后启动tomcat-2,如果你在两个控制台里面看到类似的如下信息

证明两台应用服务器已经配置完成了。

4) 新建web应用,web.xml配置文件里面需要添加如下内容来配合实现session共享:

<distrbutable/>

然后将应用分别部署到两台服务器,启动两台应用服务器进行测试:

注:由于jsp自带session对象,所以在测试的时候最好把页面自带的session对象关闭后再测试,关闭代码<%@ page session="false"%>

Tomcat-A  index.jsp代码:

<body>

This is my JSP page.tomcat-A <br>

<%

HttpSession mysession = request.getSession(false);

if(mysession==null){

mysession = request.getSession(true);

mysession.setAttribute("appname","value-A");

out.println("new session:"+mysession.getId());

}else{

out.println("old session:"+mysession.getId());

}

out.println("appname="+mysession.getAttribute("appname"));

%>

</body>

Tomcat-B  index.jsp代码:

<body>

This is my JSP page.tomcat-B<br>

<%

HttpSession mysession = request.getSession(false);

if(mysession==null){

mysession = request.getSession(true);

mysession.setAttribute("appname","value-A");

out.println("new session:"+mysession.getId());

}else{

out.println("old session:"+mysession.getId());

}

out.println("appname="+mysession.getAttribute("appname"));

%>

</body>

5) 分别访问两台服务器:http://172.23.1.46:8081/mycluster

和http://172.23.1.46:8082/mycluster分别访问得到结果如下就证明配置可以了。

访问8081服务器:

页面刷新后结果如下:

访问8082服务器:

页面刷新后结果如下:

到这里tomcat服务器就配置完成了,接下来就需要配置统一入口的负载均衡的web服务器,这里用的是apache 2.2.19(官网上可以直接下载)

Tomcat学习总结(12)—— Tomcat集群配置的更多相关文章

  1. LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置(DR模式,一个VIP,多个端口)

    一.概述 LVS作用:实现负载均衡 Keepalived作用:监控集群系统中各个服务节点的状态,HA cluster. 配置LVS有两种方式: 1. 通过ipvsadm命令行方式配置 2. 通过Red ...

  2. nodejs的mysql模块学习(十)连接池集群配置选项

    连接池集群选项 canRetry : 如果true ,连接池集群会在连接失败时尝试连接 默认true removeNodeErrorCount : 如果连接失败,节点的errCount增加.当erro ...

  3. Apache +Tomcat的负载均衡与集群配置

    实验拓扑图: 一.搭配环境 (1).Tomcat的安装和配置 Tomcat_a的ip:192.168.55.229 Tomcat_b的ip:192.168.55.231 Tomcat的需要安装jdk和 ...

  4. redis5.0集群配置

    介绍 redis自3.0版本以来支持主从模式的集群,可用哨兵监控集群健康状态,但这种方式的集群很不成熟,数据备份需要全量拷贝.在之后的版本才真正支持集群分片. 在redis5.0中去除了以redis- ...

  5. Tomcat集群配置学习篇-----分布式应用

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

  6. Apache负载均衡与Tomcat集群配置学习(Windows环境)

    本文主要参考自http://www.iteye.com/topic/985404?dhcc,经由实际操作配置操并记录而成. 由于最近的一个Java开发项目用到了Tomcat中间件作为web服务器,刚开 ...

  7. 转载 Tomcat集群配置学习篇-----分布式应用

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

  8. (转)Apache+Tomcat集群配置

    本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...

  9. 1.Apache+Tomcat负载均衡+集群配置

    1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...

随机推荐

  1. jsp 中出现大量红线,而且页面能正常访问

    第一次,出现这种情况真的很苦恼,估计是有强迫症的原因,就是看着不舒服,都页面能正常访问,但是还是想解决它 解决方法:依次按下 ctl+A ctl+X.ctl+V, 没看错就是 全选,剪切,粘贴 就好了 ...

  2. The writing on the wall

              题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子; 思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L- ...

  3. hdu1258

    给你两个数t,n 接下来输入n个数字 让你输出所有数字相加等于n的组合 4 6 4 3 2 2 1 1 t n 4 3+1 2+2 2+1+1 Sample Input 4 6 4 3 2 2 1 1 ...

  4. Linux 修改默认的 yum 源

    官方的yum源在国内访问效果不佳. 需要改为国内比较好的阿里的 yum源,因为每次装的时候都得百度,所以这里记录一下. 修改方式: 1)cd /etc/yum.repos.d/ 这个目录下普通用户可能 ...

  5. 用mysql workbench导出mysql数据库关系图

    用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create ...

  6. ASP.NET Web API 框架研究 Action方法介绍

    在根据请求解析出匹配的Controller类型并创建实例后,要在该Controller类型中的众多Action方法中选择与请求匹配的那一个,并执行,然后返回响应. Action方法,其元数据,主要包括 ...

  7. NFS Server宕机后,NFS Client主机上df命令挂死

    方法1: 使用root用户:Oracle@NDMCDB05:~> su -Password: NDMCDB05:~ # cat /etc/mtab /dev/sda2 / reiserfs rw ...

  8. 安装Chrome浏览器

    Ubuntu 16.04下安装64位谷歌Chrome浏览器 在 Ubuntu 16.04 中,要想使用谷歌的 Chrome 浏览器,可以通过命令行的方式手动安装. 1.进入 Ubuntu 16.04 ...

  9. unigui在阿里云服务器上部署

    unigui在阿里云服务器上部署 客户租用了阿里云WINDOWS2008服务器,部署UNIGUI发现死活不行,WINDOWS2008自带的IE9浏览器打开URL,卡死在loading...... 我远 ...

  10. 一个DELPHI操作USB摄像头类

    最近在使用Usb摄像头做了个项目,其中写了一个操作usb摄像头类分享给大家 {*******************************************************} { } ...