tomcat集群配置----分布式应用个人总结

现目前基于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
系统环境:windowns系统
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,并且更正名称分别为为tomcat1,tomcat2
2.下载好的mod_jk-apache-XXXX.so放到Apache2\modules下
3.修改Apache配置文件conf/httpd.conf 在最后一行末尾添加:include conf/mod_jk.conf
4.在httpd.conf 同目录下新建mod_jk.conf文件
#加载mod_jk Module     
LoadModule jk_module modules/mod_jk-apache-2.0.55.so     
#指定 workers.properties文件路径     
JkWorkersFile conf/workers.properties      
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器     
JkMount /*.jsp controller  
如果还要指定*.do也进行分流就再加一行
JkMount /*.do controller
如果你想对所有的请求进行分流只需要写成
JkMount /* controller
5.在http.conf同目录下新建 workers.properties文件
#这里可以配置任意多个Tomcat,此处配置了2个Tomat服务器.
#host和port根据自己实际配置.实例配置的是本机两个tomcat,分别使用不同的端口.避免冲突
#如果Tomcat不再同一机器上,没必要改端口的。
#server 列表
worker.list=controller,tomcat1,tomcat2  
#========tomcat1========
worker.tomcat1.port=9988        #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1        #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=9999        #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1        #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
#指定此负载平衡器负责的Tomcat应用节点。
worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat
#此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台
#Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。
worker.controller.sticky_session=false      #设为false,则表明需求会话复制。
6.分别修改tomca1,tomcat2
{
tomcat中把tomcat的监听端口号,http服务端口号,把AJP端口号,使其不同即可,如果不在同一机器上监听端口可以相同;
增加jvmRoute的值,保证同workers.properties里边配置的值一致
<!--增加jvmRoute,值为在Apache中配置的list集群结点中的值,这里定义为tomcat1结点-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
去掉默认注释掉的集群配置
<!--取消集群结点相关的注释,该句默认值注释掉的,我们需要配置集群所以去掉注释,让其起作用-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
}
7.测试
在web.xml文件中增加
<distributable/>
编写测试jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Tomcat集群测试</title>
  </head>
  <body>
        服务器信息:
    <%
      String dtm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
      System.out.println("["+request.getLocalAddr()+":"+ request.getLocalPort()+"]" + dtm);
      out.println("<br>["+request.getLocalAddr()+":" +request.getLocalPort()+"]" + dtm+"<br>"); 
    %>
    session分发:
    <%
        session.setAttribute("name","dennisit");
        System.out.println("[session分发] session id:"+session.getId());
        out.println("<br>[session分发] session id: " + session.getId()+"<br>");
    %>
  </body>
</html>
将项目部署到每个集群结点中,即实例中的tomcat_node1和tomcat_node2,依次移动Apache和tomcat服务器,tomcat服务器之间的启动顺序随意.这里Apache端口使用默认的80.
浏览器访问localhost:80/项目名/页面,多打开几个浏览器,关掉一个tomcat试试。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值