软负载均衡:apache+tomcat负载均衡实验

实验要求:
1、1个apache作为负载均衡器、3个以上的tomcat作为web应用服务器
2、分别采用session sticky和session replication进行配置实验
3、要求能实现3个及以上tomcat应用服务器节点的负载均衡,并支持节点热拔插

实验步骤:
1.按win+R输入cmd打开命令提示符,在命令提示符中先后输入java 、javac 、java -version三个命令,确保电脑具备JDK环境

注:此例电脑JDK版本为"1.8.0_162"

2.下载apache-tomcat-7.0.76,下载成功后复制粘贴它并分别重命名为:apache-tomcat-7.0.76(2),apache-tomcat-7.0.76(3)

注:tomcat版本应根据JDK版本合理选择,避免JDK与tomcat之间的版本冲突问题,此例选用apache-tomcat-7.0.76版本

3.分别修改三个tomcat 的 '/conf’目录下的servlet.xml文件,修改tomcat以下三处端口号,使三个tomcat中相应的端口号各不相同:(三处端口分别为:关闭请求的端口号;HTTP请求的端口号;AJP端口号)

<Server port="8007" shutdown="SHUTDOWN">;
<Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />;
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />;

此例中三个tomcat修改后的端口号如下:
apache-tomcat-7.0.76

<Server port="8007" shutdown="SHUTDOWN">;
<Connector port="8070" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />;
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />;

apache-tomcat-7.0.76(2)

 <Server port="8008" shutdown="SHUTDOWN">;
<Connector port="8071" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />;
 <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />;

apache-tomcat-7.0.76(3)

<Server port="8009" shutdown="SHUTDOWN">;
<Connector port="8072" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />;
 <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />;

4.分别进入三个tomcat的‘/bin’目录,点击startup.sh,使三个tomcat能够同时启动。三个tomcat控制台不报错时,打开谷歌浏览器,新建三个访问页面,分别在页面中输入URL:127.0.0.1:8070 URL:127.0.0.1:8071 URL:127.0.0.1:8072
若三个URL都能成功访问到apache官网,则三个tomcat同时启动成功

注:URL构成:127.0.0.1:tomcat的端口号

5.下载并安装apache_2.2.8-win32-x86-no_ssl.msi,安装完毕后在浏览器中输入URL:127.0.0.1能够访问出内容则apache安装成功

6.下载mod_jk:mod_jk-1.2.31-httpd-2.2.3.so

7.进入apache安装目录下的models文件夹中,将下载后的mod_jk-1.2.31-httpd-2.2.3.so放入其中

8.进入apache安装目录下的conf文件夹中,新建名为jk的文件夹,在jk文件夹中新建三个文件:mod_jk.conf(文本文档) workers.properties(properties文件) uriworkermap.properties(properties文件)

文件:mod_jk.conf
用于加载mod_jk-1.2.31-httpd-2.2.3.so,指定workers.properties,uriworkermap.properties文件路径,指定jk日志输出文件mod_jk.log及日志级别,文件内容如下:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/jk/workers.properties
JkMountFile conf/jk/uriworkermap.properties
JkLogFile logs/mod_jk.log 
JkLogLevel warn  
JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"  

文件:uriworkermap.properties
结合workers.properties配置负载均衡路径,文件内容如下:

/* = controller

文件:workers.properties
用于配置负载均衡,将三个tomcat放置worker中,分别配置worker下三个tomcat的port(AJP端口,而不是HTTP请求端口),host(统一访问域名,三个tomcat需统一配置),type(固定值为ajp13,表示端口类型),文件内容如下:

#定义worker
worker.list = controller
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcat1.lbfactor=1

worker.tomcat2.port=8010
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

worker.tomcat3.port=8011
worker.tomcat3.host=localhost
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1
#负载均衡配置
worker.controller.type=lb
#指定分担请求的tomcat
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=0

9.进入apache安装目录下的conf文件夹中,找到httpd.conf文件,在文件的最后一行添加:(引入mod_jk.conf文件,请注意文件路径是否正确)

Include conf/jk/mod_jk.conf

10.根据workers.properties的配置修改tomcatservlet.xml文件中的属性值(按照AJP端口号修改相应tomcat的jvmRoute属性):
apache-tomcat-7.0.76(AJP端口号:8009)

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

apache-tomcat-7.0.76(2)(AJP端口号:8010)

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

apache-tomcat-7.0.76(3)(AJP端口号:8011)

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat3">

至此,已完成负载均衡

检测负载均衡是否配置成功: 同时启动三个tomcat,打开浏览器,在浏览器中能正常访问http://localhost (正常访问即:访问出apache官网页面)

下面,我们接着配置session共享,实现节点热拔插
11.在三个tomcat的servlet.xml文件中,分别找到

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

将其从注释中释放出来。

12.在apache-tomcat-7.0.76的webapps目录下新建test文件夹,在test文件夹中新建WEB-INF文件夹,并在WEB-INF文件夹中新建web.xml文件,在文件中添加标签:<distributable/>
web.xml文件内容:

<?xml version="1.0" encoding="ISO-8859-1"?>
 <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <distributable/>
</web-app>

在test文件夹中新建test.jsp,用于测试负载均衡,session共享,节点热拔插
test.jsp文件内容:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html>
	<head>
	 <title>Cluster App Test</title>
    </head>
<body>
 	tomcat1_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>

将一整个test文件夹复制粘贴,分别放到apache-tomcat-7.0.76(2)和apache-tomcat-7.0.76(3)的webapps目录下

至此,session共享与节点热拔插配置完毕,检验配置成功与否的方法如下:
第一步:同时启动三个tomcat,在浏览器中输入URL:http://localhost/test/test.jsp
第二步:连续刷新三次以上,若页面中的session值不变化,则session共享配置成功;
第三步:连续刷新三次以上,若页面中的tomcat1,tomcat2,tomcat3来回跳转,则负载均衡配置成功;
第四步:任意关闭一个运行中的tomcat,刷新页面,若页面仍能正常访问(session刷新多次值不变,tomcat在另外两个打开的tomcat中跳转);
第五步:接着关闭一个tomcat,刷新页面,页面仍能正常访问;(此时tomcat显示保留的tomcat)
第六步:打开之前关闭掉的一个tomcat,将最后一个tomcat关闭,刷新页面,页面仍能正常访问;(此时tomcat显示新打开的tomcat)

啦啦啦。若照着上面的步骤,从一到六依次下来结果都符合上述,恭喜你,可以交作业了!

猜你喜欢

转载自blog.csdn.net/qq_39422634/article/details/83019639