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. 【题解】51nod 1686第K大区间

    成功的秘诀,在于克服自己看题解的冲动……[笑哭].自己A掉这题还是灰常开心的~ 以及爱死 two - pointer ! two - pointer 大法是真的好哇……这个题目有上一题的经验:求第\( ...

  2. BZOJ1597 & 洛谷2900:[USACO2008 MAR]Land Acquisition 土地购买——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1597 https://www.luogu.org/problemnew/show/P2900 约翰准 ...

  3. Codeforces 854C Planning(贪心+堆)

    贪心:让代价大的尽量移到靠前的位置. 做法:先让前k个数加进堆里,枚举k+1~n+k,每次把新元素加进堆后找到最大代价放在当前位置即可. #include<bits/stdc++.h> # ...

  4. bzoj2330: [SCOI2011]糖果(差分约束)

    差分约束裸题,a==b的话分别建a>=b a<=b的边就行.倒序加边不然会TLE是什么鬼 #include<iostream> #include<cstring> ...

  5. NOIP系列(续)

    马上就要告别noip了呢. 这道题大家都说dfs可过. 但是数据范围一眼状压啊. 首先假设点是有序的(选取有先后顺序),其实这并不影响什么,但是却省下大量的时间和代码长度. 然后状压,dp[i]表示状 ...

  6. C++语言中数组指针和指针数组彻底分析

    #################################                              ##       基本知识               ##        ...

  7. [lottery anayliser]lottery anayliser

    抓取网页,获得获奖信息 #!/usr/bin/python import urllib2 import re import time def spider(url): ""&quo ...

  8. 链表系列 - [LeetCode] 链表的交错重排L1,Ln,L2,Ln-1 ....

    其实一开始并没有想到时间上O(n)的方法,想到了也是空间复杂度是O(n)的(需要用到栈或者递归):链表分两段,用栈记录第一段的遍历过程. 后来经提示想到了,可以将第二段链表逆序.从而不需要额外的辅助空 ...

  9. MongoDB入门(6)- 我们自己封装的MongoDB-C#版本

    Wisdombud.Mongo 包含内容 MongoDB.Bson.dll MongoDB.Bson.xml MongoDB.Driver.dll MongoDB.Driver.xml Wisdomb ...

  10. mysql 添加字段 修改字段为not null

    添加一个字段 ALTER TABLE jw_user_role ADD zk_env VARCHAR(16); 修改字段为not null,还要把原来的类型也写出来 ALTER TABLE jw_us ...