apache与tomcat负载集群的方法与集群的文件同步问题和图片上传显示问题解决

来源:互联网 发布:js点击展开 隐藏切换 编辑:程序博客网 时间:2024/05/16 19:22

整理一下apache与tomcat负载集群过程中遇到的问题,因为网上的文章都只是解决了部分问题,没有说全面,特地整理个全面的分享给大家。

主要包括三个方面,如何配置集群,静态文件如何处理,上传文件问题怎么处理。本次测试是1个apache集成两个tomcat。

1、配置集群

(1)下载软件

apache:httpd-2.2.17-win32-x86-no_ssl.msi
tomcat:apache
-tomcat-6.0.20.zip
jdk:jdk
-6u14-windows-i586.exe

mod_jk-1.2.31-httpd-2.2.3.so
(2)安装apache ,安装过程省略,改端口为8081,访问地址为http://127.0.0.1:8081

将下载的mod_jk-1.2.31-httpd-2.2.3.so,改名为mod_jk.so放进apache 的modules文件夹内
修改conf/httpd.conf配置,加入如下配置:

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount  /*.do loadbalancer
JkMount  /*.jsp loadbalancer

然后继续加入如下配置,主要配置的是静态文件,包括图片等,因为apache只处理动态文件,如jsp serverlet等等。还有,如果你需要处理serverlet等跳转,可以加入类似JkMount  /*/servlet/* 这样的配置。

#要设置虚拟路径,否则图片无法正常显示
  Alias   /voteadmin   "E:/ontopvoteadmin/WebModule" 
  <Directory   "E:/ontopvoteadmin/WebModule"> 
  Options   Indexes   MultiViews 
  AddOutputFilter   Includes   html 
  AllowOverride   None 
  Order   allow,deny 
  Allow   from   all 
  </Directory>

然后在 apache/modules下新建一个配置文件workers.properties,其内容为

worker.list=loadbalancer
worker.worker2.port=8077   #ajp的监听端口
worker.worker2.host=108.88.3.105
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker3.port=9009
worker.worker3.host=127.0.0.1
worker.worker3.type=ajp13
worker.worker3.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3 #这里在的worker2、worker3为需要与上边tomcat设置的别名一致
worker.loadbalancer.sticky_session=1

       注明:worker.worker3.host=127.0.0.1  集群tomcat所在机器名或ip
           worker.worker2.port=8077 这是tomcat的jk工作端口,就是server.xml中配置的ajp端口。
到此,apache 安装配置完毕。可以访问测试一下。
(3)安装tomcat

  解压apache-tomcat-6.0.20.zip,测试时我是把两个tomcat分开放在不同的虚拟机,其中一个是和apache同一台虚拟机。
两个tomcat分别打算命名为worker2和worker3
先说tomcat.worker2的配置:
打开server.xml
 配置http监听端口,这里端口设为8079,该步骤非必要,只要不冲突就行了。
<Connector port="8079" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
配置AJP监听端口,这里端口设为8077,该步骤非必要,只要不冲突就行了。这个对应上文worker.worker2.port=8077

<Connector port="8077" protocol="AJP/1.3" redirectPort="8443" />

配置服务器标识,这里标识名配置为:worker2,添加jvmRoute="worker2",该步骤必须。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">

在Engine节点启用集群配置,只需去掉Cluster节点前的注释就行了,该步骤必须。

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

最后

要实现session复制,还需要在context.xml添加属性distributable="true",如下:
<Context distributable="true">

配置完成,访问地址为:http://127.0.0.1:8079
二、测试集群,添加测试例子。

在tomcat.worker2和tomcat.worker3的webapps文件夹添加同样的测试文件test"test.jsp

html>
<head>
  
<title>helloapp</title>
</head>
<body>
<%
System.out.println(
"call test.jsp");

%>   
SessionID: 
<%=session.getId() %>  
</body>
</html>

访问http://127.0.0.1:8078/test/test.jsp和http://127.0.0.1:8079/test/test.jsp,确保能成功访问。

重启测试即可。

三、上传文件同步问题解决。

由于集群配置了虚拟路径,那么所有静态文件都从你定义的虚拟路径读取,所以,当你上传时,是上传到不同路径,这就会出现上传成功,其他的tomcat无法访问。

这里有几种方案来处理,第一,文件同步,第二,磁盘共享,第三,tomcat虚拟路径映射。前两种都是靠操作系统和其他软件处理。这里讲解第三种。

配置方法如下两种任选,这样就解决

1. 在.%TOMCAT_HOME%\conf\Catalina\localhost建立一个xml文件 里面写上

<Context path="/web" docBase="D:/myweb" crossContext="false" debug="0"

reloadable="true"></Context> 推荐方式

2.打开%TOMCAT_HOME%\conf\server.xml文件

 在 <host> </host>之间加入如下代码: <Context path="/web" docBase="E:\myweb"

debug="0" reloadable="true"/>


 综上,配置集群遇到的所有问题和解决方法都整理在一起了,应该可以说是一站式 的解决方案了。

0 0
原创粉丝点击