Tomcat+Apache 负载均衡
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>0</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工程。
注意:如果在访问决策系统的时候,登录不进系统(反复提示输入),且用户名和密码正确,这时需要勾选“保持登录状态”。