APACHE +TOMCAT配置负载均衡全程

来源:互联网 发布:域名的dns怎么设置 编辑:程序博客网 时间:2024/04/26 17:17

环境:APACHE 2.2.8+TOMCAT6.0.14

目标:使用 apache 和tomcat 配置一个可以应用的 web 网站,要达到以下要求:


1、  Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡。

2、  为系统设定 Session 超时时间,包括 Apache 和 tomcat

3、  为系统屏蔽文件列表,包括Apache 和 tomcat

一、前期准备工作:

安装用的程序(前提保证已安装了JDK1.5以上的版本)
APAHCE 2.2.8下载:apache_2.2.8-win32-x86-no_ssl.msi(下载地址:Apache安装包下载)
TOMCAT6.0.14下载:apache-tomcat-6.0.14.zip直接解压。(下载地址:Tomcat下载)

一、安装过程:

开始安装。出现安装欢迎界面



直接点“Next”继续,出现授权协议。



选择“I accept the terms in the license agreement”同意授权协议,然后点“Next”继续,出现安装说明。



直接点“Next”下一步,出现填写信息界面。



“Network Domain”填写你的网络域名,比如admin10000.com,如果没有网络域名,可以随便填写。
“Server Name”填写你的服务器名,比如 www.admin10000.com,也就是主机名。没有的话可以随便填写。
“Administrator's Email Address”填写系统管理员的联系电子邮件地址,比如webmaster@admin10000.com。联系电子邮件地址会在当系统故障时提供给访问者。
提示:因为我们安装apache主要是在本机上做开发,所以前2项填写localhost即可。以上3项信息可以任意填写,以后可以在httpd.conf文件中修改这些信息。

下面还有两个选择,第一个是为系统所有用户安装,使用默认的80端口,并作为系统服务自动启动;另外一个是仅为当前用户安装,使用端口8080,手动启动。我们选择第一个“for All Users, on Port 80, as a Service – Recommended”。然后点击“Next”继续。



出现选择安装类型界面,Typical为典型安装,Custom为用户定制安装,我们这里选择Typical,按“Next”继续。



点击“Change...”,手动指定安装目录。这里我们把Apache安装到了“D:\Apache\”,安装哪里你自己决定。建议不要安装在操作系统所在盘(通常是C盘),免得操作系统坏了之后,还原操作把Apache配置文件也清除了。指定好安装目录后,点“Next”继续。


确认安装选项无误,点“Install”开始安装。如果您认为要再检查一遍,可以点“Back”一步步返回检查。

安装进行中



安装完成之后就可以点击“Finish”后,在右下角状态栏会出现一个带绿色标志的图标。表示Apache已经正常启动。
这时候在浏览器输入http://localhost/ 或者http://127.0.0.1/可以看到如下界面。




 常见问题

安装完成后,弹出dos窗口,提示“通常每个套接字地址   (协议/网络地址/端口)   只允许使用一次”。

这说明Apache默认的80端口被其他Web服务器占用了。此时右下角状态栏出现一个带红色标志的图标 ,说明Apache服务没有启动。
很可能是你也安装并启用了IIS,并且IIS占用了80端口,要么把IIS先停了再启动Apache,要么为Apache重新设置一个端口。

为Apache重新设置端口步骤:
1. 找到Apache安装目录下conf目录下的httpd.conf文件(即d:\Apache\conf\httpd.conf)。打开它。
2. 找到“Listen 80”,紧接着Listen的数字就是端口号,我们改为“Listen 8080”。  修改为其它未使用的端口号也行。
3. 重新启动Apache,使新的配置生效。可以使用右下角状态栏的“Apache Serive Monitor” 启动apache。
  也可以点击“开始”>"运行>输入cmd>回车>定位到apache安装目录下到bin目录,然后输入 “httpd –k start”。
4. 这时候在浏览器输入http://localhost:8080/ 可以看到与上图一样的效果


按照上面的步骤,APACHE已经安装成功可以运行了,下面安装tomcat,这个步骤我就不再详细的说明了,我是将Tomcat放在了D:\Work\ApacheTomcat下。


配置

Apache配置:

1.配置httpd.conf

修改APACHE的配置文件D:\Apache\conf\httpd.conf
将以下Module的注释去掉,这里并没有使用mod_jk.so进行apache和tomcat的链接,从2.X以后apache自身已集成了 mod_jk.so的功能。只需简单的把下面几行去掉注释,就相当于以前用mod_jk.so比较繁琐的配置了。这里主要采用了代理的方法,就这么简单。


LoadModule proxy_module modules/mod_proxy.so   LoadModule proxy_connect_module modules/mod_proxy_connect.so   LoadModule proxy_ftp_module modules/mod_proxy_ftp.so   LoadModule proxy_http_module modules/mod_proxy_http.so   LoadModule proxy_ajp_module modules/mod_proxy_ajp.so   LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

再找到<IfModule dir_module></IfModule>加上index.jsp

修改成
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>


在最下面加入

ProxyRequests Off <proxy balancer://cluster> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1BalancerMember ajp:// 127.0.0.1:9009 loadfactor=1 route=jvm2BalancerMember ajp:// 127.0.0.1:9001 loadfactor=1 route=jvm3BalancerMember ajp:// 127.0.0.1:9003 loadfactor=1 route=jvm4</proxy>


上面的四个BalancerMember成员是我们配置的tomcat集群。后面会说明的。


2.httpd-vhosts.conf的配置:

接下来进行虚拟主机的设置。APACHE的虚拟主机设置如下:

首先要修改 conf/httpd.conf找到(Apache目录下conf/extra/httpd-vhosts.conf)把注释去掉

# Virtual hosts
Include conf/extra/httpd-vhosts.conf
在文件(extra/httpd-vhosts.conf)最下面加入

<VirtualHost *:80>         ServerAdmin houyafei1@163.com         ServerName localhost         ServerAlias localhost         ProxyPass / balancer://cluster/ stickysession=jsessionidnofailover=On         ProxyPassReverse / balancer://cluster/</VirtualHost>


其中的域名和路径根据你自己情况设置
然后再设置TOMCAT虚拟主机

2.配置 tomcat

2.1.  配置 server 的关闭
我们需要在一台机器上跑 4 个不同的 tomcat ,需要修改不同的 tomcat 的关闭口,避免出现端口被占用的情况。其中tomcat6.0用默认值,不修改。其他三个修改。在tomcat6.01\conf, tomcat6.02\conf下和tomcat6.03\conf下的 server.xml 中找到 server, 

将:<Server port="8005"shutdown="SHUTDOWN">   改为  <Server port="XXXX"shutdown="SHUTDOWN">

XXXX 在这里表示不同的端口:我的其它三个 tomcat 分别使用 9005,8006 , 9007

=====================================


2.2. 配置 Engine
把原来的配置注释掉,把下面一句去掉注释。并标明jvmRoute="jvm2".
<Engine name="Standalone" defaultHost="localhost"jvmRoute="jvm2">         
以下是原来的配置。
<!-- <Engine name="Catalina"defaultHost="localhost">  -->
其他(tomcat6.02和tomcat6.03)也要同样配置。注意:jvmRoute配置不要一样。
<Engine name="Standalone" defaultHost="localhost"jvmRoute="jvm3">  
<Engine name="Standalone" defaultHost="localhost"jvmRoute="jvm4">  
2.3. 配置 Connector
原来的默认配置。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
这里是apache和tomcat链接的关键,前台apache就是通过AJP协议与tomcat进行通信的,以完成负载均衡的作用。也可以用HTTP协议。大家注意它们是如何连接通信的,上面的红色部分(port="8009")就是连接的接口了。
把其他三个tomcat的<Connectorport="XXX" />port分别改成与上面
<proxy balancer://cluster>
     #与tomcat6.0对应,route与<EnginejvmRoute="jvm1">对应。
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
#与tomcat6.01对应,route与<Engine jvmRoute="jvm2">对应。
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
#与tomcat6.02对应,route与<Engine jvmRoute="jvm3">对应。
BalancerMember ajp://127.0.0.1:9001 loadfactor=1 route=jvm3
#与tomcat6.03对应,route与<Engine jvmRoute="jvm4">对应。
BalancerMember ajp://127.0.0.1:9003 loadfactor=1 route=jvm4
</proxy>
中的端口对应,tomcat6.01 的ajp端口port:9009. tomcat6.02 的ajp端口port:9001。tomcat6.03 的ajp端口port:9003.一定要与上面的一致。同时也要把redirectPort的值改成唯一的,确保四个tomcat的都不一样。
2.5.配置Cluster(每个tomcat中都要修改)
原来的配置。
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为以下的代码:<Receiver port=”XX”/>port也要保证唯一性。


=======================================

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6"><Manager className="org.apache.catalina.ha.session.BackupManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"mapSendOptions="6"/><!--<Manager className="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/>--><Channel className="org.apache.catalina.tribes.group.GroupChannel"><Membership className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="5001"selectorTimeout="100"maxThreads="6"/><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>

这个设置是主要用以tomcat的集群。


四、启动服务,测试tomcat自带的例子
1、测试apache和tomcat协作。
先在每个tomcat中的\webapps\ROOT下的index.jsp下面加上以下的测试代码部分:(X代表不同的tomcat的输出不同的信息),把index.html删除,以免影响测试效果。在最后面的加上.即</table></body>之间。
<%
      System.out.println("tomcat6.0X  deal  with  request");
%>
然后再通过http:// 127.0.0.1来访问一下,就会出现大家熟悉的猫猫。
然后再通过分别访问
http:// 127.0.0.1:8080, http:// 127.0.0.1:9080,http:// 127.0.0.1:8081,http://127.0.0.1:9002它们访问的内容和上面的http:// 127.0.0.1是一样的。
这样就说明apache和TOMCAT整合成功!
2、测试均衡器
通过http:// 127.0.0.1多次访问,要想看到真正的效果,必须用一些压力测试工具,可用微软Microsoft Web Application Stress Tool进行简单压力测试,不然你靠不停刷新是体现不出来的,你只会在一个tomcat的控制台有输出结果。只用用压力测试工具模拟大量用户同时访问,你会发现四个tomcat控制台均有打出控制信息,说明均衡器工作正常。

 

要实现session共享  
还要在每个工程的web.xml里面加句
<distributable/>


文件中提到的配置,可以下载配置文件进行查看(下载地址:配置文件下载)


以上这些对APACHE的配置已经可以实现负载均衡,下面对APACHE有一些扩展,APACHE启用压缩功能


1    配置

针对Apache2.0及之后的版本,Apache提供压缩支持, 不过不叫gzip,而叫mod_deflate
下面就对Apache2.0及之后的版本作一个说明
1) 去掉#LoadModule headers_module modules/mod_headers.so前面的注释#,
2) 添加LoadModule deflate_module modules/mod_deflate.so
3)添加

<Location"/">

     SetOutputFilter DEFLATE

     BrowserMatch ^Mozilla/4gzip-only-text/html

     BrowserMatch ^Mozilla/4\.0[678] no-gzip

     BrowserMatch \bMSIE !no-gzip!gzip-only-text/html

     SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|png)$ no-gzip dont-vary

     Header append Vary User-Agent env=!dont-vary

</Location>

2    测试

/Apache2.2/logs/access.log

查看记录中的最后1列为传输文件的大小,对比真实文件的大小和传输文件的大小,可以确认是否启用压缩功能



0 0
原创粉丝点击