finereport 9.0 Tomcat 集群-来自帆软

Tomcat服务器集群

目录:

  • 1. 描述
  • 3. 配置过程
  • 4. 结果测试

1. 描述

在单一的服务器上执行WEB应用程序有一些问题,当网站成功建成并开始接受大量请求时,单一服务器无法满足需要处理的负荷量。

另外一个常见的问题是会产生单点故障,如果该服务器坏掉,那么网站就立刻无法运作了。

不论是因为要有较佳的扩充性还是容错能力,我们都会想在一台以上的服务器计算机上执行WEB应用程序。

所以,这时候我们就需要用到集群这一门技术了。

1.1 集群(Cluster)

集群是一组协同工作的服务实体(可理解为服务器),用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。

1.2 负载均衡(Load Balance)

负载均衡实现了并发数的分流从而有效的实现减少单机服务器的压力,使高并发的情况下集群整体依然能够拥有较好的性能。同时负载均衡后的集群具有一定的容错率,当某一单机服务器down掉后,负载均衡使用分发机制将其分配到其他正在运行的服务器上,继续操作。

1.3 反向代理负载均衡 

常用的负载均衡技术有很多种,本文使用反向代理Apache+JK2实现Tomcat集群与负载均衡。

使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之上,从而达到负载均衡的目的。

1.4 实现原理

2. 环境准备

测试环境为win8.1+jdk1.8.0

版本   下载 作用  
  Apache2.4  Download - The Apache HTTP Server Project  用于分发请求
  Tomcat8.5.15  Apache Tomcat® - Welcome!  web服务器
  Mod_jk  Index of /dist/tomcat/tomcat-connectors/jk/binaries/windows  建立Apahce和Tomcat直接的连接

本文采用上述的版本进行演示,其他版本操作可能略有不同,请自行处理。

2.1 Apache
下载完成之后,直接安装apache,安装完成之后,在浏览器中输入http://localhost/,能够看到下图则说明安装成功:

2.2 Tomcat

解压下载好的tomcat压缩包,复制三分解压好的tomca文件夹,分别重命名为tomcat1,tomcat2,tomcat3。

3. 配置过程

后面使用的文件功能说明:

(a) mod_jk.conf:主要定义 mod_jk 模块的位置以及 mod_jk 模块的连接日志设置,还有定义 worker.properties 文件的位置。

(b) worker.properties:定义 worker 的参数,主要是连接 tomcat 主机的地址和端口信息。如果 Tomcat 与 apache 不在同一台机器上,或者需要做多台机器上 tomcat 的负载均衡只需要更改 workers.properties 文件中的相应定义即可。% APACHE_HOME %为你的安装目录。
3.1 Apache配置修改
(1)修改httpd.conf
我的Apache安装在C:\cluster\Apache24找到conf目录下的httpd.conf,在文件的最后一行添加:
  1. Include "C:\cluster\Apache24\conf\mod_jk.conf"  

注:以上表示将 mod_jk.conf 配置文件包含进来

(2)新建mod_jk.conf文件
在conf目录下新建mod_jk.conf文件,内容如下:
  1. LoadModule jk_module modules/mod_jk.so    
  2. JkWorkersFile conf/workers.properties    
  3. JkMount /*.jsp controller   
第一行最后的文件名为jk的文件名,根据下载的jk的名字不同而不同。
第二行表示指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名。
第三行表示可以进行集群的文件类型,这里写*.jsp表示集群的文件只能是jsp文件,如果不区分文件类型,则直接写成JkMount /* controller即可。
(3)Mod_jk
在bin目录下输入.\httpd -v查看apache版本号,下载对应的文件

解压下载的Mod_jk文件,将里面的so文件复制到Apache安装目录的modules目录下,这里下载的Mod_jk文件名为mod_jk.so。
(4)新建并编辑workers.properties文件
在conf文件夹下新建workers.properties,内容如下:
  1. #server    
  2. worker.list = controller    
  3. #========tomcat1========    
  4. worker.tomcat1.port=11009    
  5. worker.tomcat1.host=localhost    
  6. worker.tomcat1.type=ajp13    
  7. worker.tomcat1.lbfactor = 1    
  8. #========tomcat2========    
  9. worker.tomcat2.port=12009    
  10. worker.tomcat2.host=localhost    
  11. worker.tomcat2.type=ajp13    
  12. worker.tomcat2.lbfactor = 1    
  13. #========tomcat3========    
  14. worker.tomcat3.port=13009    
  15. worker.tomcat3.host=localhost    
  16. worker.tomcat3.type=ajp13    
  17. worker.tomcat3.lbfactor = 1    
  18.      
  19. #========controller,负载均衡控制器========    
  20. worker.controller.type=lb    
  21. worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3    
  22. worker.controller.sticky_session=false    
  23. worker.controller.sticky_session_force=1    
  24. #worker.controller.sticky_session=1    
worker.controller.sticky_session=false,提交页面,将按照负载均衡的规则切换服务器,实现“完全的负载均衡”,代价是Tomcat不停交换session数据,慢;
worker.controller.sticky_session_force=true,始终转发到session创建的服务器上。
注:其中1代表true,0代表false 
上面最后的代码中使用到的参数详细解释如下:
sticky_session    sticky_session_force含义  
  true   false  SESSION不复制,有粘性
  true   true   SESSION复制,有粘性
  false  false  SESSION不复制,无粘性 
  false  true   SESSION复制,无粘性
如果需要配置远程的tomcat服务器的话,只需要将worker.tomcat3.host=localhost中的localhost改为远程服务器的IP地址即可。
本次配置都是本地的tomcat,并且在一台机器上,所以端口号都不相同,如果在不同机器上,http和shutdown端口号则不需要更改。
3.2 Tomcat集群配置
分别打开tomcat1/tomcat2/tomcat3目录下的conf/server.xml文件,进行修改
(1)修改tomcat端口
由于这里是同一台机器上使用三个tomcat,为了避免端口冲突,需要修改tomcat服务器的http/shutdown/ajp端口号。
(2)修改集群设置
对于tomcat8.5.15要做集群的话,只需要将<Engine>元素下的
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
的注释符号去掉,启用这句配制就可以正常使用集群。
(3)Engine 增加 jvmRoute 属性设置
 jvmRoute 的值来自于 workers.properties 文件所设置的服务器名称,3个tomcat里,jvmRoute分别配置成tomcat1/tomcat2/tomcat3。
修改完成后如下图:

 注:由于这里三个tomcat全在一台机器上,所以需要修改三种类型的端口号,如果是在不同的机器上,则只需要修改AJP13的connector的port,其他端口号不需要修改。

另:jvmRoute里的名称和workers.properties中配置都必须对应。

4. 结果测试

在tomcat下面的项目文件夹中修改web.xml,如这里使用自带的examples项目,则修改三个tomcat下面的examples项目中的web.xml,在每个web.xml的<web-app>节点里添加新的节点<distributable/>,此应用将与集群服务器复制Session,如下图:
注:这里是用来测试此种情况演示效果的,实际部署我们工程的时候,web.xml可以不添加

在每个examples项目文件夹下新建test.jsp,内容如下:
  1. <%@ page contentType="text/html; charset=GBK" %>  
  2. <%@ page import="java.util.*" %>  
  3. <html><head><title>Cluster App Test</title></head>  
  4. <body>  
  5. Server Info:  
  6. <%  
  7. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>  
  8. <%  
  9.   out.println("<br> ID " + session.getId()+"<br>");  
  10.   // 如果有新的 Session 属性设置  
  11.   String dataName = request.getParameter("dataName");  
  12.   if (dataName != null && dataName.length() > 0) {  
  13.      String dataValue = request.getParameter("dataValue");  
  14.      session.setAttribute(dataName, dataValue);  
  15.   }  
  16.   out.println("<b>Session 列表</b><br>");  
  17.   System.out.println("============================");  
  18.   Enumeration e = session.getAttributeNames();  
  19.   while (e.hasMoreElements()) {  
  20.      String name = (String)e.nextElement();  
  21.      String value = session.getAttribute(name).toString();  
  22.      out.println( name + " = " + value+"<br>");  
  23.          System.out.println( name + " = " + value);  
  24.    }  
  25. %>  
  26.   <form action="test.jsp" method="POST">  
  27.     名称:<input type=text size=20 name="dataName">  
  28.      <br>  
  29.     值:<input type=text size=20 name="dataValue">  
  30.      <br>  
  31.     <input type=submit>  
  32.    </form>  
  33. </body>  
  34. </html>  
4.1 节点插拔测试
项目部署好之后,启动三个tomcat以及Apache,启动顺序随意,然后再浏览器中输入http://localhost/examples/test.jsp
(1)关闭Tomcat
关闭tomcat3,刷新页面,可以不断访问tomcat1和tomcat2,再关闭tomcat2,只能够访问tomcat1,说明节点关闭时运行正常。
(2)启动tomcat

如果重启Tomcat2,无论怎么刷新,始终访问Tomcat3,无法访问tomcat2,这时利用另外台机器访问页面,发现Tomcat2正常,然后在刷本地页面,又可以访问Tomcat2了。
对于每个新来的session,Apache按照节点配置中的lbfactor比重选择访问节点,如果某节点node1不能访问,则寻找下一可访问节点,并且将此node1就在该访问session的访问黑名单中,以后该session的访问直接不考虑node1,即使node1又可以访问了。
而新来的session是无黑名单的,如果新的session能够访问到node1了,则会将node1在其他所有session访问的黑名单删除,这样其他session就又能访问node1节点了。
经过以上测试,说明Tomcat集群和负载均衡已经实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AppML 下载

要下载 AppML&#xff0c;您可以访问菜鸟教程网站或自强学堂网站。AppML 不是一个产品&#xff0c;而是一个基于浏览器和服务器脚本的想法。您可以从这些网站下载适用于 PHP 或 ASP.NET 的 AppML 版本。下载文件将包含服务端脚本、样式文件、浏览器脚本和本地配置文件&#xff…

Java桥接模式

桥接模式 最重要的是 将 抽象 与 实现 解耦 , 通过组合 在 抽象 与 实现 之间搭建桥梁 ; 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )-CSDN博客 桥接模式&#xff08;Bridge Pattern&#xff09;-&#xff08;最通俗易懂的案例&#xff09;_桥接模式 例子-…

力扣 242题 有效的字母异位 记录

题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 …

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

有趣的C语言——我的C语言之路

记录一下关于C语言竞赛重刷的例题&#xff0c;有些真的很有意思&#xff0c;如果你觉得特别简单&#xff0c;那说明你很牛&#xff0c;小弟我甘拜下风&#xff01;! 勿喷 勿喷&#xff0c;仅记录学习历程&#xff08;有些特别基础的就不弄了&#xff0c;弄一些我觉得处理方法很…

Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接

步骤 1&#xff1a;运行 MySQL 容器 首先&#xff0c;确保你的 Docker 容器中运行了 MySQL 数据库。 docker run --name mysql-container -e MYSQL_ROOT_PASSWORDmy-secret-pw -d -p 3306:3306 mysql:latest--name mysql-container 为容器命名。-e MYSQL_ROOT_PASSWORDmy-sec…

python3 -m http.server 检查打包前端的项目

python3 -m http.server这是 Python 提供的一个内置的简单 HTTP 服务器。当你在终端中运行 python3 -m http.server 命令时(在对应的打包目录比如dist目录)&#xff0c;Python 会启动一个 HTTP 服务器&#xff0c;它会将当前工作目录下的文件作为静态文件提供给浏览器。这个服务…

LabVIEW软件开发人员的核心能力是什么

LabVIEW软件开发人员的核心能力包括以下几个方面&#xff1a; 1. LabVIEW编程技能 熟练掌握LabVIEW编程语言&#xff1a;包括虚拟仪器&#xff08;VI&#xff09;的创建、数据流编程、图形化编程技巧等。 模块化编程&#xff1a;能够设计和实现模块化的代码结构&#xff0c;便…

python数据分析——正则化

参考资料&#xff1a;活用pandas库 正则化旨在解决模型的过拟合问题。 在实际中&#xff0c;可能存在模型的训练分数很好&#xff0c;而测试分数却很低&#xff0c;这说明模型出现了过拟合问题。正则化通过对系数和变量施加约束来解决模型过拟合的问题。这会导致数据的系数变小…

数据结构与算法之计数排序

目录 前言 计数排序 定义 优缺点 策略 图解 代码实现 结束语 前言 今天是坚持写博客的第20天&#xff0c;时光飞逝&#xff0c;第二个10天即将过去&#xff0c;希望可以继续坚持&#xff0c;光明的未来也在未来等着我们。今天也恰逢高考&#xff0c;祝所有学子一帆风顺…

【DevOps】掌握 Helm:Kubernetes 应用程序部署指南

目录 一、前言 二、什么是 Helm&#xff1f; 三、Helm 的优势 四、Helm 组件 五、安装和配置 Helm 1、先决条件 2、安装 Helm 客户端 3、初始化 Helm 4、添加 Helm Charts 存储库 5、搜索和安装应用程序 5.1、搜索 Helm Charts 5.2、安装应用程序 5.3、自定义应用程…

echarts的toolbox自定义feature标签及事件

1. 需求 在使用echarts图时希望toolbox扩展一些自定义icon和点击事件&#xff0c;而不只是图中这些echarts提供的事件。 2. 文档 属性名类型描述toolbox.featureObject各工具配置项。 feature中除了echarts提供的各个内置的工具按钮外&#xff0c;可以自定义工具按钮。 除…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

学习笔记——路由网络基础——缺省(默认)路由

3、缺省(默认)路由 1、定义 缺省路由(默认路由)&#xff1a;是目的地址和掩码都为全0的特殊路由。全0代表任意网络。缺省路由在路由表中的形式为&#xff1a;0.0.0.0/0缺省路由也被叫默认路由。缺省路由优先级比直连路由低 缺省路由是一种特殊的路由&#xff0c;当报文没有在…

Facebook海外户Facebook广告被暂停的原因

有很多伙伴在Facebook广告时&#xff0c;有时会遇到账号被暂停&#xff0c;并通知你违反了哪些规则&#xff0c;那么Facebook广告被暂停的原因有哪些呢&#xff1f;今天小编详细梳理了一些原因&#xff0c;可以往下看哦~ 您的Facebook广告被暂停可能有以下几个原因&#xff1a…

Redis系列之淘汰策略介绍

Redis系列之淘汰策略介绍 文章目录 为什么需要Redis淘汰策略&#xff1f;Redis淘汰策略分类Redis数据淘汰流程源码验证淘汰流程Redis中的LRU算法Redis中的LFU算法 为什么需要Redis淘汰策略&#xff1f; 由于Redis内存是有大小的&#xff0c;当内存快满的时候&#xff0c;又没有…

【Qt】TreeWidget中Item的UserCheckable注意事项,没有出现多选框

1. 异常 开启 ItemIsUserCheckable以后&#xff0c;界面上没有出现多选框。 QTreeWidgetItem *item new QTreeWidgetItem();item->setText(0, "hello");item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable |Qt::ItemIsEnabled | Qt::ItemIsAuto…

AIGC 介绍与典型应用与亚马逊科技AIGC方案

1、AIGC ( 生成式人工智能 ) 是指可生成全新内容的人工智能技术 从字面意思来看&#xff0c;AIGC 是继 PGC&#xff0c;UGC 之后的新型内容创作方式&#xff0c;可以在创意、表现力、迭代、传播、个性化等方面&#xff0c;充分发挥技术优势&#xff0c;打造新的数字内容生成与…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…

力扣2106.摘水果

力扣2106.摘水果 在下标上做滑窗 二分出左边最远能取到的点j 自己写lowerbound (j,start)这个区间的水果数就是初值 如何判断一个区间是否合法 先往右走再往左走&#xff1a;fruit(right,0) - start fruit(right,0) - fruit(left,0);先往左走再往右走&#xff1a;start - fru…