博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache 2.4.12 64位+Tomcat-8.0.32-windows-x64负载集群方案
阅读量:5312 次
发布时间:2019-06-14

本文共 4859 字,大约阅读时间需要 16 分钟。

     上次搞了Apache 2.2的集群方案,但是现在自己的机器和客户的服务器一般都是64位的,而且tomcat已经到8了。重新做Apache 2.4.12 64位+Tomcat-8.0.32-windows-x64负载集群方案。

     知其然知其所以然,先看下一些关键术语:

1、负载均衡(load balance)

在互联网高速发展的时代,大数据量、高并发等是互联网网站提及最多的。如何处理高并发带来的系统性能问题,最终大家都会使用负载均衡机制。它是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求。
对于大部分公司,会选择廉价有效的方法扩展整个系统的架构,来增加服务器的吞吐量和处理能力,以及承载能力,或者一些客户不想继续投入,典型啥事扔给研发人员的。
2、集群(Cluster)
 用N台服务器构成一个松耦合的多处理器系统(对外来说,他们就是一个服务器),它们之间通过网络实现通信。让N台服务器之间相互协作,共同承载一个网站的请求压力。
3、高可用(HA)
 在集群服务器架构中,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
4、session复制/共享
 在访问系统的会话过程中,用户登录系统后,不管访问系统的任何资源地址都不需要重复登录,这里面servlet容易保存了该用户的会话(session)。如果两个tomcat(A、B)提供集群服务时候,用户在A-tomcat上登录,接下来的请求web服务器根据策略分发到B-tomcat,因为B-tomcat没有保存用户的会话(session)信息,不知道其登录,会跳转到登录界面。
这时候我们需要让B-tomcat也保存有A-tomcat的会话,我们可以使用tomcat的session复制实现或者通过其他手段让session共享。

Apache +tomcat也有一些不足的地方,或者本博文有配置不对的地方,希望批评指正。以下为个人亲测:

本次全部为64位系统,希望大家配置时版本一致,免得出问题。本次依然使用mod_jk方式。

配置出错:一般有这几种:

1、路径错误;

2、版本错误,尤其jk版本和Apache版本,当大家把mod_jk.so已加载就报错,不加载Apache正常启动的时候就知道是版本不匹配错误;

3、昨天自己配置的时候一个网络问题,在家的内网配置,配置3个tomcat,有一个tomcat部署到了阿里云的一台服务器上,死活tomcat启动不了,启动成功后死活session不共享,后来把这个tomcat挪到内网的一台机器上什么事都没有,这个问题以后再想。

软件架构:

JDK  jdk1.7.0_80 64位 tomcat8需要jdk7及以上支持;

Apache:Apache_HTTP_Server_2.4.12  

tomcat :apache-tomcat-8.0.32-windows-x64

mod_jk:  tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x

网络环境:win7,64位,8G内存,一台机器装apache和两个tomcat

软件安装:

 在磁盘根目录下安装Apache,安装JDK,复制tomcat81 ,apache82,两个tomcat 都能单独启动;

 mod_jk解压出来以后so文件之后,重命名为mod_jk.so,并放到Apache2.4/modules 目录下;

配置:

1、Apache 配置 负载均衡:

    1. 在apache安装目录下conf目录中找到http.conf,在文件最后加上下面一句话就可以了:include "E:\Apache24\conf\mod_jk.conf"
    2. conf同目录新建mod_jk.conf,内容如下:
      1. # 加载jk 模块LoadModule jk_module modules/mod_jk.so# 设置 worker.properties 文件位置JkWorkersFile conf/workers.properties# 设置 日志文件文职JkLogFile logs/mod_jk.log# 设置 日志输出级别 可选项[debug/error/info]JkLogLevel debug# 转发.jsp 所有的请求到名字为controller的 workerJkMount /*.jsp controller

          

    3. conf同目录新建worker.properties,内容如下:
      1. #server列表worker.list = controller     #========tomcat81========worker.tomcat81.port=8009   #ajp13端口号worker.tomcat81.host=localhostworker.tomcat81.type=ajp13 #server的加权比重,值越高,分得的请求越多worker.tomcat81.lbfactor=1 #========tomcat82========worker.tomcat82.port=9009worker.tomcat82.host=localhostworker.tomcat82.type=ajp13worker.tomcat82.lbfactor=1#========controller,负载均衡控制器========worker.controller.type=lbworker.controller.retries=3#指定分担请求的tomcat  worker.controller.balance_workers=tomcat81,tomcat82worker.controller.sticky_session=falseworker.controller.sticky_session_force=1

        Apache 配置完成,启动Apache,一般来说应该没有问题了,apache 能够正常启动。

  1. 集群配置

    1. 如果是tomcat在不同的两台计算机上,则不用修改,但是要注意原来 的机器上是否在运行着tomcat,防止不改参数做实验你给人家同时给关闭了;
    2. 如果一台机器上两个tomcat,则需要修改一个,我们修改tomcat82:
    3. <Server port="8005" shutdown="SHUTDOWN">改为:
    4. <Connector port="8080" protocol="HTTP/1.1"

      connectionTimeout="20000"
      redirectPort="8443" />改为:

    5.     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />改为:
    6. Engine节点, 增加jvmRoute,jvmRoute属性要和worker.properties中balance_workers属性一致,两个tomcat要不同,tomcat81:

        tomcat82:

    7. 集群设置:
      Cluster 节点修改:
      Receiver 节点中的port端口,两台tomcat要不同。
    8. 分别启动tomcat81,tomcat82。
  2. session复制

    1. tomcat/webApps下新建项目test,新建test2.jsp文件,
      <%@ page contentType="text/html; charset=GBK" %><%@ page import="java.util.*" %>Cluster App TestServer Info:<%out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
      ");%><% out.println("
      ID " + session.getId()+"
      "); // 如果有新的 Session 属性设置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("Session 列表
      "); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"
      "); System.out.println( name + " = " + value); }%>
      名称:
      值:
    2. 实现session共享,还需要在context.xml添加属性distributable="true",或者像下面的方法
    3. 新建WEB-INF文件夹,文件夹下新建web.xml,内容:
      test

        插入<distributable/>

    4. 分别启动tomcat81,tomcat82,分别访问http://localhost:8080/test/test2.jsp,http://localhost:9090/test/test2.jsp
    5. apache 启动,通过 http://localhost/test/test2. 访问,多刷新几次页面,在控制台打印的 session 值都是一致的。可以看到tocmat控制器打印出来的东西,多找几个客户端试试,或者用手机访问下就可以看出来。
  3. 配置完成。

转载于:https://www.cnblogs.com/xiaomatech/p/5237005.html

你可能感兴趣的文章
JNDI的学习与使用
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
STM32下载失败,st-link v2 在线下载sw模式检测不到
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
iTextSharp 使用详解(转)
查看>>
【转】javascript 中的很多有用的东西
查看>>
Python中替换元素
查看>>
关于双核心:也许你不知道的五件事
查看>>
Trace 2018徐州icpc网络赛 (二分)(树状数组)
查看>>
让你的 Python 代码优雅又地道
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
jmeter里面Dug Sampler 和json提取器的用法
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
公司居然使用监听设备,大家来讨论下IT公司应该怎样管理
查看>>
一句简单的SQL----模糊 查询
查看>>
编程十年 (13):毁人不倦1
查看>>
排序算法小结
查看>>