apache+tomcat 实现负载均衡集群

一、 为什么要用集群?

  1. 如果项目都在在一台计算机的服务器上,若这台计算机出现问题,则会导致整个项目无法运行。
  2. 一台计算机的并发量有限,理论上单节点tomcat能够稳定的处理请求并发量200-300,若多台计算机一同运行则能显著提高效率。

二、 集群带来的好处

  1. 负载均衡
    也叫垂直集群,将多个服务器,安装在同一个计算机上。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。

  2. 失败迁移
    也叫水平集群,将服务器安装在各个不同的计算机上。若一台计算机出现问题,越不会连累其他计算机。

三、 模拟实现集群

  1. 首先下载apache服务器工具(此apache是一个服务工具,不是之前理解的 基金组织。)
  2. 配置刚刚下载的apache
  • 如图路径打开httpd.conf配置文件
    在这里插入图片描述

  • 根据自己下载的Apache路径配置
    在这里插入图片描述

  • 执行命令注册apache服务
    a. 以管理员身份打开cmd执行命令: “D:\cluster\httpd\Apache24\bin\httpd.exe” -k install -n apache24
    在这里插入图片描述
    执行cmd命令:在这里插入图片描述

    b. 如果在注册apache服务时,提示“丢失VCRUNTIME140.DLL”,则需要下载并安装vc_redist.x64.exe。下载地址https://www.microsoft.com/en-US/download/details.aspx?id=48145

  • 注册成功后查看服务是否开启
    在这里插入图片描述

  1. 复制两份tomcat到apache24目录下,并改名为tomcata和tomcatb供以后分辨在这里插入图片描述
    在这里插入图片描述
    在ClusterProject中创建一个WEB-INF包和index.jsp,在WEB-INF包下创建web.xml文件(.idea不用创建,运行后会自动生成)
    在这里插入图片描述
    在tomcata中的ClusterProject项目的index.jsp中填入以下代码待之后运行,title为tomcata,tomcatb中同理,只要将title改为tomcatb即可
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>tomcata</title>
</head>
<body>
   服务器地址
   <%
		out.print(request.getRemoteAddr()+":"+request.getLocalPort());
   %>
   sessionID:
   <%
		out.print(session.getId());
   %>
</body>
</html>

  1. 规划并修改接口:server.xml
    将tomcata/conf和tomcata/conf中的server.xml文件端口号修改为以下:
    server端口号 http协议端口 ajp协议端口号
    tomcat-a: 1005 1080 1009
    tomcat-b 2005 2080 2009
    以tomcata为例(tomcatb同理)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    若AJP为注解,打开修改即可
  2. 配置引擎Engine
    也是在service.xml文件中,增加jvmRoute(以tomcata为例):
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-a">
    在这里插入图片描述
  3. 打开集群开关
    打开以下注释:
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    在这里插入图片描述
  4. tomcat集群配置搞定下载mod_jk.so,找到其中的中的httpd.zip

在这里插入图片描述

  1. 配置mod_jk.so
    a. 存放到位置,\Apache24\modules\mod_jk.so
    b. \Apache24\conf\下创建配置文件配置workers.properties,并按下图修改配置文件
worker.list=controller,tomcata,tomcatb
#tomcata,lbfactor为1:2,tomcatb比tomcata更容易获得请求
worker.tomcata.port=1009
worker.tomcata.host=localhost
worker.tomcata.type=ajp13
worker.tomcata.lbfactor=1


#tomcatb
worker.tomcatb.port=2009
worker.tomcatb.host=localhost
worker.tomcatb.type=ajp13
worker.tomcatb.lbfactor=2

#controller
worker.controller.type=lb
worker.controller.balanced_workers=tomcata,tomcatb
worker.controller.sticky_session=false

分布式session策略:

  1. sticky:固定将每一个用户的请求 分给特定的服务器,后期的请求不会分给其他服务器
  2. session广播(自动同步session): 自动同步session,弊端:如果服务器太多,可能造成广播风暴(将一个服务器的session,需要同步到其他所有的服务器中)
  3. 集中管理方式(推荐):将各个服务器的session集群存储到一个 数据库中
  1. 配置\Apache24\conf\mod_jk.conf (用于加载mod_jk.so和workers.properties)
#加载mod_jk.so和workers.properties
LoadModule jk_module modules/mod_jk.so
#加载workers.properties
JkWorkersFile conf/workers.properties
JkMount /* controller

其中JkMount /* controller,表示拦截一切请求。也可以之拦截jsp: /*.jsp
执行顺序为mod_jk.so,workers.properties ->mod_jk.conf -> apache程序会自动加载httpd.conf

  1. 配置Apache/conf/httpd.conf: include conf/mod_jk.conf
    在这里插入图片描述
    在apache启动时自动加载mod_jk.conf

  2. 配置完成
    环境变量中的CATALINA_HOME会使启动tomcat时自动开启CATALINA_HOME指定的tomcat。而集群 需要开启多个不同的tomcat,因此在单机环境下,需要删除CATALINA_HOME。

四、 测试

  1. 依次打开tomcata/bin/startup.bat和tomcatb/bin/startup.bat
  2. 开启后在网址栏输入localhost/ClusterProject/index.jsp(apache端口号默认为80,所以可以不用填)。
    在这里插入图片描述
    刷新几次后发现tomcatb的次数多于tomcata,是因为我们之前在配置文件你中设置了worker.tomcata.lbfactor的值导致的。
    大功告成!

猜你喜欢

转载自blog.csdn.net/qq_43960954/article/details/121199069