apache+tomcat集群01 HTTP代理模式

阅读更多

 

前篇简单对集群进行了说明,其中apache服务器和tomcat的连接方法其实有三种:JKhttp_proxyajp_proxy。本文主要介绍http_proxy方式。

 

一、需要的软件包

JDKjdk-6u7-linux-i586.bin

Apacheapache_2.2.25-win32-x86-openssl-0.9.8k

Tomcatapache-tomcat-6.0.16.tar.gz

 

二、Apache 安装说明   

我们知道Apache的东西我们都可以从http://apache.org/网站上找到。

Apachehttp服务器,我们利用其对Tomcat进行负载均衡,安装后安装过程中要配置域名、网址和管理员邮箱之类的信息,这个信息完全可以按照提示,然后修改下填入即可,之后想修改的话直接到配置文件中改就行了。除了这个地方,还要保证机器上的80端口没有被其他程序占用,安装成功后,系统右下角的托盘区会有个图标,我们可以通过这个启动apache,如果那个小红点变成绿色,说明服务已经正常启动了(如果服务没有启动起来,说明安装过程中的配置有错误,建议卸载后重装)。如果按照默认,端口是80的话,那打开浏览器,输入:http://localhost/ ,应该可以看到 " It works “的字样。这样就可以进入下一步了。

Tocmat67。经测试,2个版本的Apache负载均衡配置过程都是一样的,因此下面的配置在Tomcat67集群是通用的。但是按照下面的配置,集群中Tomcat不能既有Tomcat6又有Tomcat7,否则虽能够负载均衡,但不能进行session复制,不知其他方式配置的集群是否可以。

 

三、配置

 

修改Apache安装目录的conf目录下的httped.conf文件

1、  加载module

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

 

2、  继续添加如下配置

ProxyPass / balancer://loadbalancer/
ProxyPassReverse / balancer://loadbalancer/

BalancerMember http://localhost:8081/
BalancerMember http://localhost:8082/
BalancerMember http://localhost:8083/

 

3、  配置tomcat容器

参见:tomcat集群中实现Session共享

 

四、测试

 

新建test.jsp页面

<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.*"%>


Cluster App Test


	Server 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); } %>
名称:
值:

 将项目部署到3个服务器,然后分别启动Apache3Tocmat服务器,这些Tomcat启动顺序随意,然后打开http://localhost/TestTomcat/test.jsp

apache+tomcat集群01 HTTP代理模式_第1张图片

 

F5刷新结果如下:

 

apache+tomcat集群01 HTTP代理模式_第2张图片

apache+tomcat集群01 HTTP代理模式_第3张图片

 

多次刷新页面的sessionID看是同一个ID,说明session是复制成功了。那么session中的存储的东西呢,在输入框中分别输入112233后,显示结果如下图:

 

apache+tomcat集群01 HTTP代理模式_第4张图片

apache+tomcat集群01 HTTP代理模式_第5张图片

apache+tomcat集群01 HTTP代理模式_第6张图片

 

以上的测试说明,集群中的session已经共享,每个集群对于同一访问均有相同的session,而且session中存储的变量也复制了。

 

五、节点插拔测试

插拔意思是应该保证当运行的集群中某节点中关闭或者启动时,集群正常工作并且节点能够正常工作。

        关闭Tomcat2,刷新页面,则不断访问Tocmat1Tomcat3,再关闭Tomcat1后,则只访问一个Tomcat3,说明节点关闭时运行正常。

如果重启Tomcat2,无论怎么刷新,始终访问Tomcat3,难道Apache不能将请求转发给中途启动的Tomcat2。这时利用另外台机器访问页面,发现Tomcat2正常,然后在刷本地页面,又可以访问Tomcat2了。

从上面可以看出Apache的负载均衡时的算法了,对于每个新来的sessionApache按照节点配置中的lbfactor比重选择访问节点,如果某节点node1不能访问,则寻找下一可访问节点,并且将此node1就在该访问session的访问黑名单中,以后该session的访问直接不考虑node1,即使node1又可以访问了。而新来的session是无黑名单的,如果新的session能够访问到node1了,则会将node1在其他所有session访问的黑名单删除,这样其他session就又能访问node1节点了。

 

 

  • apache+tomcat集群01 HTTP代理模式_第7张图片
  • 大小: 51.1 KB
  • apache+tomcat集群01 HTTP代理模式_第8张图片
  • 大小: 53.1 KB
  • apache+tomcat集群01 HTTP代理模式_第9张图片
  • 大小: 50.8 KB
  • apache+tomcat集群01 HTTP代理模式_第10张图片
  • 大小: 49.8 KB
  • apache+tomcat集群01 HTTP代理模式_第11张图片
  • 大小: 49.8 KB
  • apache+tomcat集群01 HTTP代理模式_第12张图片
  • 大小: 51.1 KB
  • 查看图片附件

你可能感兴趣的:(Apache,Tomcat,集群,http)