首页 > 其他分享 >Tomcat集群配置学习篇-----分布式应用

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

时间:2023-09-20 14:01:38浏览次数:40  
标签:Tomcat tomcat worker 分布式应用 ----- tomcat2 tomcat1 apache 服务器


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

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

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

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

 

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

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.     
4. #指定 workers.properties文件路径     
5. JkWorkersFile conf/workers.properties     
6.     
7. #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器     
8. 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.      
8. #========tomcat2========      
9. worker.tomcat2.port=8029       #ajp13 端口号,在tomcat下server.xml配置,默认8009      
10. worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址      
11. worker.tomcat2.type=ajp13      
12. worker.tomcat2.lbfactor = 2    #server的加权比重,值越高,分得的请求越多      
13.      
14. #========controller,负载均衡控制器========      
15. worker.controller.type=lb      
16. worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat      
17. 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
即把
8005" shutdown="SHUTDOWN">
改为
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文件增加如下内容

 

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

贴出代码,方便复制:

 

 
  
1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"    
2. channelSendOptions="6">    
3.         
4. <Manager className="org.apache.catalina.ha.session.BackupManager"    
5. expireSessionsOnShutdown="false"    
6. notifyListenersOnReplication="true"    
7. mapSendOptions="6"/>     
8. <Manager className="org.apache.catalina.ha.session.DeltaManager"    
9. expireSessionsOnShutdown="false"    
10. notifyListenersOnReplication="true"/>      
11. <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
12. <Membership className="org.apache.catalina.tribes.membership.McastService"    
13. bind="127.0.0.1"    
14. address="228.0.0.4"    
15. port="45564"    
16. frequency="500"    
17. dropTime="3000"/>    
18. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"    
19. address="127.0.0.1"    
20. port="4001"    
21. selectorTimeout="100"    
22. maxThreads="6"/>    
23.         
24. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">    
25. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>    
26. </Sender>    
27. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>    
28. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>    
29. <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>    
30. </Channel>    
31.         
32. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"    
33. filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>    
34.         
35. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>    
36. </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,如果你在两个控制台里面看到类似的如下信息

 

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

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

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,tomcat,worker,分布式应用,-----,tomcat2,tomcat1,apache,服务器
From: https://blog.51cto.com/u_16242566/7536848

相关文章

  • Java学习之路--method--方法重载
    packagecom.chao.method;//Java中都是值传递(Java)和引用类型publicclassDemo02{publicstaticvoidmain(String[]args){intmax=max(40,50);//实参40,50System.out.println("最大的数是"+max);}//比大小形参num1,num2publicstatic......
  • Java学习之路-method--递归
    packagecom.chao.method;//递归/*概念:递归就是A方法调用A方法,就是自己调用自己递归包括两个部分:递归头:什么时候不调用自身方法,如果没有头,将陷入死循环;递归体:什么时候需要用自身方法*/publicclassDemo04{publicstaticvoidmain(String[]args){System.out.prin......
  • 【个人项目互评】结对互评-中小学数学试卷自动生成程序
    目录1.简介2.项目要求3.代码分析4.运行测试5.优缺点分析  1.简介本篇博客是对结对编程队友对于项目《中小学数学卷子自动生成系统》的学习,分析与总结,选用的编程语言为Java.  2.项目要求1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中......
  • Java学习一路-Demo01-Java数据类型
    packagecom.chao.base;publicclassDemo01{/*Java数据类型两大类:基本数据类型和引用类型1.基本数据类型共8种:(1)数值类型分为:整数类型(4种):a.byte(字节型),占1个字节,取值范围(-128~127)b.short(短整型),占2个字节,取值范围......
  • Java学习之路-Demo02
    packagecom.chao.base;publicclassDemo02{publicstaticvoidmain(String[]args){//整数拓展:进制二进制0b十进制八进制0十六进制0xinti=10;inti1=010;//八进制0inti2=0x10;//十六进制0x0~9A~F16System......
  • Java学习之路-Demo03-类型转换
    packagecom.chao.base;publicclassDemo03{publicstaticvoidmain(String[]args){inti=128;byteb=(byte)i;//内存溢出doubled=i;//强制转换(类型)变量名高-->低例:int转byte,int转short,int转char等//自动转换......
  • 个人项目-小初高算数题目生成(Java互评)
    目录简介测试与分析功能测试代码分析总结一、简介本博客对结对编程队友高义林同学的个人项目进行分析测试,使用语言为Java。需求如下图所示:二、测试与分析1.功能测试1.登录功能测试分析:登录时输入错误账密、错误密码、空的账密均不可成功登录,可......
  • 14-2 OSPF默认路由引入实验
    实验一会配置OSPF下发默认路由,一般在出口设备配置下发默认路由,出口连接运营商,通过下发默认路由将数据引导至出口设备,再转交给运营商拓扑AR2模拟运营商配置PC1配置LSW1配置<Huawei>sys[Huawei]sysLSW1[LSW1]vlanbatch1020[LSW1]integi0/0/2[LSW1-GigabitEth......
  • CentOS 7.9编译安装Python-3.10.13
    一、查看CentOS版本、系统默认gcc版本、Python版本和pip版本:#cat/etc/redhat-release#gcc--version#python-V#pip-V二、部署Python-3.10.13:1、下载Python-3.10.13.tar.xz,Python官网:https://www.python.org/2、安装编译依赖软件包及包组:#yum-ygroupinstall"Development......
  • 无涯教程-JavaScript - AVERAGE函数
    描述AVERAGE函数返回参数的平均值(算术平均值)。语法AVERAGE(number1,[number2]...)争论Argument描述Required/OptionalNumber1Thefirstnumber,cellreference,orrangeforwhichyouwanttheaverage.RequiredNumber2,...Additionalnumbers,cellrefe......