1.JDK1.8和Tomcat7.0不兼容,支持Tomcat8.0.

集群架构图:

2.负载均衡:负载的基础是集群,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同的硬件构成的计算机。如一个提供Web服务的集群,对外界看来是一个大Web服务器。负载均即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

3.部署方法:Apache2.2+Tomcat7.0+JDK1.7+JK

主要方法:http://www.finereporthelp.com/help/24/1/3/3.html

主要步骤:(jdk+tomcat+apache+mod_jk)

1.每台服务器上分布都安装jdk,tomcat(安装成功tomcat,在浏览器中输入localhost:8080,会进入tomcat页面);

2.在反代理服务器安装apache(安装成功,在浏览器中输入localhost,会显示安装成功);

3.更改apache安装路径conf下面的httpd.conf,在其最后一行添加:include "apache安装路径\conf\mod_jk.conf";

4.在conf下面新建格式为.conf的mod_jk.conf文件,并添加如下代码:

LoadModule jk_module modules/mod_jk.so    //需要在apache安装路径下的modules导入mod_jk.so

JkWorkersFile conf/workers.properties  //负载均衡

JkMount /*.jsp controller    //*.jsp可以更改为*,支持所有文件格式

5.在conf下面新建workers.properties文件,添加如下代码:

#server
worker.list = controller
#========tomcat1======== //有多少服务器就建立多少个tomcat
worker.tomcat1.port=11009 //每台服务器为一个tomcat,对应的端口也不一样
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=12009
worker.tomcat2.host=localhost //如果是另外一台服务器,则改为ip
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========tomcat3========
worker.tomcat2.port=13009
worker.tomcat2.host=192.168.10.250
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3 //有多少tomcat就添加多少
worker.controller.sticky_session=false //如果为true/1,则表示当用户第一次受到某一服务器处理,则以后都是
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1

6.再到每台服务器的tomcat安装路径的conf文件夹下面,找到serve.xml,更改如下几个位置信息:

注意:1.port和jvmRoute必须与workers.properties中相对应;2.注意是否被注释掉(最后一个红色框容易被忽视)。

7.将每个tomcat下面的项目(需要用Java设计器创建web应用程序)的web.xml的<display-name>之后加上<distributable/>。

8.在项目中新建测试页面test.jsp:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
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+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
名称:<input type=text size=20 name="dataName">
<br>
值:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

在测试成功的情况下,在名称和值的输入框中输入值,server info后面不变,ID后面不变,tomcat会变。

10.如果是做FineReport的独立部署,则需要将FR的webreport整体拷贝至tomcat的webapps下面,需要将同一个webreport分别拷贝至每个tomcat下面,然后拿掉WEB-INF——resources下的lic(在已经注册的情况下),通过localhost:8080/WebReport/ReportServer访问决策系统,进行注册。(每台服务器对应不同.lic)

11.修改每台服务器下面tomcat中webreport项目中WEB-INF下面的web.xml(第七步),如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Template WebApp</display-name>
<distributable/>
<mime-mapping>
<extension>msi</extension>
<mime-type>application/x-msi</mime-type>
</mime-mapping>
<servlet>
<servlet-name>ReportServer</servlet-name>
<servlet-class>com.fr.web.ReportServlet</servlet-class>
<load-on-startup></load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ReportServer</servlet-name>
<url-pattern>/ReportServer</url-pattern>
</servlet-mapping>
</web-app>

12.在resources下面新建cluster.xml文件,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<ClusterConfig useCluster="true" userShare="true"> //useCluster=”true”表示启用集群配置
<ClusterService>
<ServiceName>A</ServiceName> //给这台服务器取一个区别于其他机器的别名,报名可任意,但不能出现相同
<ip>192.168.10.249</ip> //这台服务器在内网中的IP地址
<port>8080</port> //报表应用的端口
<WebAppName>WebReport</WebAppName> //报表应用的名称,因为是webreport工程
</ClusterService>
<ClusterService isSelf="true"> //isSelf=''true"指示该ip当前服务器,有多少服务器添加多少
<ServiceName>B</ServiceName>
<ip>192.168.10.250</ip> //即上面为isSelf,这里可以为localhost
<port>8080</port>
<WebAppName>WebReport</WebAppName>
</ClusterService>
</ClusterConfig>

14.测试报表集群是否配置成功,可以在浏览器输入:

http://localhost:8080/WebReport/ReportServer?op=fr_cluster&cmd=test_c_all

如果成功,则会显示Cluster is  start,这时候通过当前页面信息查看整个环境的配置。

13.这时候可以通过localhost/WebReport/ReportServer进行交叉访问,不断刷新,访问不同tomcat下面webreport工程。

注意:如果在访问决策系统的时候,登录不进系统(反复提示输入),且用户名和密码正确,这时需要勾选“保持登录状态”。

Tomcat+Apache 负载均衡的更多相关文章

  1. Apache+Tomcat部署负载均衡(或集群)

    本来只打算写Tomcat集群部署,简化Apache和Tomcat整合过程的.后来想了想,这样不便于没有用过Apache的朋友来学习本文内容.于是干脆加大篇幅,让对Apache不了解的朋友能对Apach ...

  2. 基于Apache和tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  3. apache+tomcat配置负载均衡,实现http与websocket接口分压

    一.应用场景 在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量.Apache本身带有一些模块,可以完成对应用 ...

  4. 基于Apache+Tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  5. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

  6. 利用httpd对tomcat进行负载均衡配置

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:jdk-8u60-linux-x64 ...

  7. JBOSS通过Apache负载均衡方法一:使用mod_jk

    JBOSS通过Apache负载均衡方法一:使用mod_jk   本文第一.二节分别对Linux环境下前端使用Apache以及windows环境下前端使用IIS通过AJP协议和后端的JBOSS通信实现负 ...

  8. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  9. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

随机推荐

  1. harbor1.4.0高可用部署

    一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数成为 Children 的方法,然 ...

  2. BZOJ3197:[SDOI2013]刺客信条——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3197 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受 ...

  3. BZOJ5312:冒险——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5312 Kaiser终于成为冒险协会的一员,这次冒险协会派他去冒险,他来到一处古墓,却被大门上的守护 ...

  4. C++中友元简介

    本文基于<C++ Primer(第五版)>,纯属个人笔记整理.若有错误欢迎大家留言指出. 一.为什么要用友元和其缺点? 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员 ...

  5. 浅谈Hibernate框架(一)——.hbm.xml中的配置

    Hibernate一枚“全自动”的ORM框架: 用IDE工具集成Hibernate会自动生成: 以.hbm.xml为后缀结尾的配置文件+ POJO类 + Dao类 主键查询: Session.load ...

  6. Kindle 电子书相关的工具软件【转】

    这里是与 Kindle 电子书相关的工具软件.它们可以帮助我们解决在日常使用电子书时所可能遇到的问题,比如 kindle 管理工具.kindle 转换工具.kindle电子书制作工具.kindle 推 ...

  7. GSM之AT操作命令详解20160615

    因工作接触到GSM模块,所以收集整理了一下关于操作GSM模块的AT命令的资料: 1.AT的历史与应用 1.1 AT的历史AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制 ...

  8. OpecnCV训练分类器详细整理

    本文主要是对下面网址博客中内容的实例操作: http://blog.csdn.net/byxdaz/article/details/4907211 在上述博客中,详细的讲述了OpenCV训练分类器的做 ...

  9. HDU1254 bfs

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  10. ZooKeeper配额指南(十)

    配额 ZK有命名空间和字节配额.你可以使用ZooKeeperMain类来设置配额.ZK打印警告信息如果用户超过分配给他们的配额.这些信息被打印到ZK的日志中. $java -cp zookeeper. ...