finereport 9.0 Tomcat 集群-来自帆软

news2024/10/6 8:33:24

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.coloradmin.cn/o/1798532.html

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

相关文章

Spring-DI入门案例

黑马程序员SSM框架教程 文章目录 一、DI入门案例思路分析二、实现步骤2.1 删除service中使用new形式创建的Dao对象2.2 提供以来对象对应的setter方法2.3 配置service与到之间的关系 一、DI入门案例思路分析 基于IoC管理bean&#xff08;上个案例已经实现&#xff09;service中…

centos7安装anaconda3

centos7安装anaconda3 1、anaconda3运行Anaconda3-2021.11-Linux-x86_64.sh 脚本 1、anaconda3 2021版本下载地址 注&#xff1a;使用wget 无法下载可以先下载到本地通过xshell上传 运行Anaconda3-2021.11-Linux-x86_64.sh 脚本 1、赋予运行权限 chmod 777 ./ Anaconda3-20…

七招神技!用ChatGPT秒变文章达人,让你的作品瞬间爆红网络

如果您正在探索利用人工智能、AI工具&#xff0c;以及今年在互联网上迅速兴起的新型大语言模型LLM&#xff0c;如ChatGPT&#xff0c;来提升写作水平的方法&#xff0c;本文将为您简述如何便捷地运用这些工具来增强写作和语法技能&#xff0c;从而彻底告别写作障碍。 无论您是…

两种AI 图像生成技术:MidJourney 和 Stable Diffusion

目录 1、MidJourney1.1 MidJourney基本特点1.2 MidJourney的玩法教程 2、Stable Diffusion2.1 Stable Diffusion基本特点&#xff1a;2.2 Stable Diffusion生成展示 3、两种技术的区别4、AI 绘画与它们的联系5、总结 MidJourney 和 Stable Diffusion 是当前两种流行的 AI 图像生…

如何为您的网站选择合适的SSL证书

在当今数字化时代&#xff0c;网站的安全性愈发受到重视。SSL证书作为网站安全的“守门员”&#xff0c;不仅能保护用户数据不被窃取&#xff0c;还能提升网站的信任度。但面对市场上琳琅满目的SSL证书产品&#xff0c;如何根据业务需求挑选合适的证书呢&#xff1f;今天&#…

海外网站搭建:企业数字化出海的基石

在全球化的浪潮下&#xff0c;越来越多中国企业开始寻求海外市场的拓展机会。然而&#xff0c;要想成功进入海外市场&#xff0c;一个符合国际标准的、具备吸引力的海外网站是必不可少的。在这个过程中&#xff0c;NetFarmer凭借其专业的服务和丰富的经验&#xff0c;为企业海外…

redis 03 RDB AOF

1.数据库状态 2.为什么会出现RDB 3.什么是RDB 5.1 5.2 6 6.1 6.2 6.2.1 6.2.2 6.2.3 7

动态规划求多段图的最短路径

一、基本思想 动态规划法将待求解问题分解成若干个相互重叠的子问题&#xff0c;每个子问题相互关联&#xff1b;动态规划法与分治法的区别就在于分治法的子问题相互不关联&#xff0c;而动态规划法的子问题是相互关联的&#xff0c;且有重叠的部分。 二、算法分析 动态规划…

google的chromedriver最新版下载地址

Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载&#xff0c;下载前先看下自己google浏览器版本&#xff0c;找到对应的版本号去下载&#xff0c;把解压缩的exe放到google浏览器目录下。

AB测试学习(附有相关代码)

目录 一、基本概念1. 定义2. 作用3. 原理 二、实验基本原则三、实验步骤四、实验步骤详解1. 确定实验目的2. 确定实验变量3. 实验指标设计3.1 实验指标类型&#xff08;按作用区分&#xff09;3.1.1 核心指标3.1.2 驱动指标&#xff08;跟踪指标&#xff09;3.1.3 护栏指标 3.2…

Qwen2开源发布,各方位全面升级!

今天&#xff0c;通义千问团队带来了Qwen2系列模型&#xff0c;Qwen2系列模型是Qwen1.5系列模型的重大升级。包括了&#xff1a; 5个尺⼨的预训练和指令微调模型, 包括Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B&#xff1b; 在中⽂英语的基础上&#xf…

Threejs-02、坐标辅助器与轨道控制器使用

一、坐标辅助器 1、添加坐标辅助器 // 添加世界坐标辅助器 const axesHelper = new THREE.AxesHelper(2); scene.add(axesHelper);2、调整相机位置 //设置相机位置 camera.

【Unity UGUI】Screen.safeArea获取异形屏数据失败

Screen.safeArea获取不到异形屏的尺寸位置等数据 检查AndroidManifest.xml文件是否有设置&#xff1a;android:theme"style/UnityThemeSelector"&#xff0c;没有加上即可 android:theme"style/UnityThemeSelector"

Vue3【六】setup的使用和setup的返回值

Vue3【六】setup的使用和setup的返回值 setup函数的使用&#xff0c;和vue2的选项式不同 vue3的组合式使用的是setup函数 通过返回值将数据和方法传到页面 返回值也可以是一个箭头函数 setup先于 data和method执行所有无法读取到this和data&#xff0c;method的内容&#xff0c…

ruoyi若依二次开发怎么添加扫描自己的controller和mapper,配置三个地方即可。

概要 首先&#xff0c;添加在com.ruoyi外的类&#xff0c;项目启动后&#xff0c;调用接口&#xff0c;是会返回404找不到的。 必须要对这以外的接口类进行配置。目录结构如下&#xff1a; 解决步骤 一、添加 com.ruoyi.framework.config 下&#xff1a; // 指定要扫描的M…

Java版工程项目管理平台:以源码驱动,引领工程企业数字化转型

在当今数字化时代&#xff0c;随着企业的扩张和业务的增长&#xff0c;传统的工程项目管理方法已显不足。为了提升管理效率、减轻工作负担、增强信息处理的快速性和精确度&#xff0c;工程企业亟需借助数字化技术进行转型升级。本文将向您展示一款基于Spring Cloud、Spring Boo…

《大宅门》特别活动走进李良济,开启探寻中医药文化之旅!

《大宅门》话剧将于6月14-16日在苏州湾大剧院上演&#xff0c;为了让大家了解到中医药知识&#xff0c;6月2日&#xff0c;李良济携手苏州湾大剧院举办《大宅门》特别活动“探寻中医药文化之旅”&#xff01; 6月2日下午&#xff0c;大家一起走进李良济&#xff0c;深度了解传统…

Stable Diffusion【应用篇】【图片修复】:模糊头像照片的高清修复

本文主要是回复一下后台小伙伴留言的问题。经小伙伴本人同意后&#xff0c;允许使用待修复的照片。 我们先看一下待修复的照片。 在向我咨询之前&#xff0c;小伙伴也自己进行了尝试&#xff0c;如果直接使用Stable Diffusion的后期处理功能&#xff0c;出来的图片效果是这样的…

Ant Design+react 表单只读

表单禁用&#xff0c;样式不好看&#xff0c;不符合甲方标准&#xff0c;看了一下文档&#xff0c;select、radio等都不支持只读状态。 解决方法&#xff1a; 利用css3的point-events属性&#xff0c;设置为none 在查看弹窗时&#xff0c;传入一个变量&#xff0c;当变量为true…

AI视频教程下载:用LangChain开发 ChatGPT和 LLMs 应用

在这个快速变化的人工智能时代&#xff0c;我们为您带来了一场关于语言模型和生成式人工智能的革命性课程。这不仅仅是一个课程&#xff0c;而是一次探险&#xff0c;一次深入人工智能核心的奇妙之旅。 在这里&#xff0c;您将开启一段激动人心的旅程&#xff0c;探索语言模型…