Windows下整合Apache2.2和Tomcat6.0 集群与负载均衡

本文详细介绍了在Windows Server 2008 R2环境下,如何整合Apache2.2和Tomcat6.0,创建集群并实现负载均衡。主要涉及Apache的proxy模块配置、Tomcat的Server和Connector端口设置,以及集群配置,包括Cluster、Engine和Session共享的条件。通过配置Apache的httpd.conf和httpd-vhosts.conf,以及Tomcat的server.xml,实现了Apache与Tomcat间的AJP连接和负载分配。
摘要由CSDN通过智能技术生成

Windows下整合Apache2.2和Tomcat6.0

集群与负载均衡


1.     介绍

Apache2.2+Tomcat有两种方式集群配置:

第一种:proxy代理与反向代理方式

第二种:jk连接器方式

2.     环境

平台:Windows Server 2008 R2 (64 位),4GRAM

软件:Jdk1.7,Apache2.2.19,Tomcat6.0.29

机器和网络配置

操作系统

网络配置

主机名

角色

备注

Win-Server2008R2(64)

IP: 99.1.14.203

PORT:8888

pianoweb1sz0

Apache Server

管理/代理服务器

Win-Server2008R2(64)

IP: 99.1.14.203

PORT:8081

pianoweb1sz0

clustertomcat6_1

Web服务器

Win-Server2008R2(64)

IP: 99.1.15.204

PORT:8081

pianoweb2sz0

clustertomcat6_1

Web服务器

表1

【注】:

1.      两台服务器网络互通,可相互访问;

2.      Apache只部署在其中一台服务器(pianoweb1sz0),且其默认端口改为8888 (httpd.conf文件内Listen 80的80端口修改为8888);

3.      当前只在每台机器部署一个工程实例,即一个tomcat;如果同一台部署多个实例,则需要注意其端口不可相同;

 

集群部署图示

图1


3.     配置集群

3.1 集群工具安装

1. 

2. 

Apache安装

安装步骤不细说。

建议安装路径以:盘符:/Apache 

l  设置系统信息,三条信息均可任意填写,无效的也行。

 

成功完成安装后,桌面右下角状态栏会出现下面绿色图标,表示Apache服务已经开始运行。并且通过它可进行服务控制(启动/停止/重启)。

浏览器地址栏输入“http://127.0.0.1”,看到如下页面,表示Apache服务器已安装成功。

Tomcat安装

版本apache-tomcat-6.0.29.tar.gz,解压后即可使用。

分别解压到99.1.14.203、99.1.15.204机器,并命名如下:

机器

集群命名

99.1.14.203

clustertomcat6_1

clustertomcat6_2

99.1.15.204

clustertomcat6_3

clustertomcat6_4

表2

3.2方案配置

3.2.1 proxy代理与反向代理方式

 

1.  Apache配置

 

1.1. 

httpd.conf配置

修改APACHE的配置文件,安装目录/ Apache2.2/conf/httpd.conf:

需要修改几处:

1.      把下面几行去掉注释,即启用响应功能;

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.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

 

2.      修改目录访问权限;

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Denyfrom all

</Directory>

修改成

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Allowfrom all

</Directory>

3.      增加index.jsp

找到<IfModule dir_module></IfModule>,为其加上index.jsp,

修改成:

<IfModule dir_module>

    DirectoryIndex index.htmlindex.jsp

</IfModule>

 

4.      启用映射;

找到#Include conf/extra/httpd-vhosts.conf把注释去掉;

修改成:Include conf/extra/httpd-vhosts.conf

 

5.       

<proxy balancer://cluster>

BalancerMember ajp:// 99.1.14.203:8011 loadfactor=1 route=clustertomcat6_1

#BalancerMember ajp:// 99.1.14.203:8012 loadfactor=1 route=clustertomcat6_2

#(如果每台部署两个实例,可把注释去掉)

#BalancerMember ajp:// 99.1.15.204:8012 loadfactor=1 route=clustertomcat6_2

BalancerMember ajp:// 99.1.15.204:8011 loadfactor=1 route=clustertomcat6_1

</proxy>

BalancerMember成员将在后面介绍。

httpd-vhosts.conf设置

安装目录\Apache2.2\conf\extra\httpd-vhosts.conf)原有的<VirtualHost*:80>给注释掉,在文件最下面加入

<VirtualHost *:8888>

   ServerAdmin webmaster@ neu.com

   ServerName neu.com

   ServerAlias www.neu.com

   ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionidnofailover=On

   ProxyPassReverse / balancer://cluster/

</VirtualHost>

 

2. 配置Tomcat

对Tomcat的server.xml进行配置。

a. 配置Server port

一台机器上跑多个 tomcat ,需要修改不同 tomcat 的Server port,避免出现端口被占用的情况。

在tomcat-6.1\conf\server.xml文件中找到<Server port="8005" shutdown="SHUTDOWN">,修改成:<Server port="8006" shutdown="SHUTDOWN">,并将其余3个Tomcat的Server port分别修改成8007,8008,8009

b. 配置Connector port

在tomcat-6.1\conf\server.xml文件中找到

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />

修改成:

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />

并将其余3个Tomcat的port分别修改成8082,8083,8084

 

继续往下找到

<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />,修改成:

<Connector port="8011" protocol="AJP/1.3"redirectPort="8443" />,并将其余3个Tomcat的port分别修改成8012,8013,8014

这里是apache和tomcat链接的关键,前台apache就是通过AJP协议与tomcat进行通信的,以完成负载均衡,上面的红色部分(port="8010")就是连接的端口了。

回顾一下httpd.conf配置中的

<proxy balancer://cluster>

BalancerMember ajp://172.20.50.133:8011loadfactor=1 route=tomcat1

BalancerMember ajp://172.20.50.133:8012loadfactor=1 route=tomcat2

BalancerMember ajp://172.20.50.183:8013loadfactor=1 route=tomcat3

BalancerMember ajp://172.20.50.183:8014loadfactor=1 route=tomcat4

</proxy>

Tomcat中的端口要和“ajp://172.20.50.133:XXXX”后面端口一致。

c. 配置Engine

在tomcat-6.1\conf\server.xml文件中找到

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

修改成:

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

并将其余3个Tomcat的jvmRoute分别修改成:

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

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

<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat4">

 

回顾一下httpd.conf配置中的

<proxy balancer://cluster>

BalancerMember ajp://172.20.50.133:8011 loadfactor=1 route=tomcat1

BalancerMember ajp://172.20.50.133:8012 loadfactor=1 route=tomcat2

BalancerMember ajp://172.20.50.183:8013 loadfactor=1 route=tomcat3

BalancerMember ajp://172.20.50.183:8014 loadfactor=1 route=tomcat4

</proxy>

Tomcat中的jvmRoute="tomcatx"要和“route=tomcatx”中的命名一致。

 

d. 配置Cluster

在tomcat-6.1\conf\server.xml文件中找到被注释掉的<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,在注释行的下面添加:

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

    <Manager className="org.apache.catalina.ha.session.BackupManager"

            expireSessionsOnShutdown="false"

            notifyListenersOnReplication="true"

            mapSendOptions="6"/>

    <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;"/>

    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

其余3个Tomcat都要做相同的配置,注意每个Tomcat之间的差别是<Receiver>标签下面的port值不一样,这里是5001,其余3个Tomcat中分别是500250035004

 

3.2.2 jk连接器方式

jk方式配置需要依赖于mod_jk.so库。此方案使用mod_jk-1.2.31-httpd-2.2.3.so,并将其放在Apache安装目录的modules目录下。

 

1.Apache配置

httpd.conf配置

为了避免直接对httpd.conf进行过多的修改,本方案采用增加mod_jk.conf配置文件,并在httpd.conf文件内引入。mod_jk.conf与httpd.conf文件在同一目录。

在httpd.conf文件最后加入:

Include conf/mod_jk.conf

 

mod_jk.conf文件内容:

#引入mod_jk.so包库

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so 

#引入集群实例配置文件

JkWorkersFile conf/workers.properties

#引入请求过滤配置,即可以指定哪些请求被controller(均衡器)处理

JkWorkersFile conf/uriworkermap.properties

 

Workers.properties文件内容:

#server 

worker.list=controller,status

#========tomcat1======== 

worker.clustertomcat6_1.port=7011 

worker.clustertomcat6_1.host=99.1.67.30 

worker.clustertomcat6_1.type=ajp13 

worker.clustertomcat6_1.lbfactor=1 

#========tomcat2======== 

worker.clustertomcat6_2.port=7012 

worker.clustertomcat6_2.host=99.1.67.30 

worker.clustertomcat6_2.type=ajp13 

worker.clustertomcat6_2.lbfactor=1 

#========tomcat3======== 

worker.clustertomcat6_3.port=7013

worker.clustertomcat6_3.host=99.1.67.149

worker.clustertomcat6_3.type=ajp13 

worker.clustertomcat6_3.lbfactor=1 

  

#========controller负载均衡控制器======== 

worker.controller.type=lb 

worker.controller.balance_workers=clustertomcat6_1,clustertomcat6_2,clustertomcat6_3

worker.controller.sticky_session=false 

worker.controller.sticky_session_force=1

worker.controller.sticky_session=1

 

worker.status.type=status

 

uriworkermap.properties文件内容:

暂不指定,因此所有请求都会被处理。

 

 

2. Tomcat配置

配置同proxy代理方式的tomcat一致,在此不累赘。

 

4.     集群负载均衡和Session共享验证

3. 

3.1.1.Session共享的条件

1.        所有session中的对象可以序列化,实现 java.io.Serializable接口。

2.        确保你部署文件中的web.xml有<distributable/>元素(其父元素为</web-app>),或者设置你的<Context distributable="true" />。本文采用的是在web.xml中添加<distributable/>元素。当使用多台机器时,要保证不同机器时间的同步。

3.        确保你的loadbalancer是sticky session 模式。

sessionId 一致则说明已经实现session共享。

 

重要说明:

(1).如果项目要发布到集群上,那么与会话有关的类需要实现java.io.Serializable序列化接口。

(2).集群Tomcat间用组播方式进行通信,如果机器上有多个网卡则可能导致组播失败,解决的办法是<Cluster>元素的<Membership>元素配置bind属性,它用于明确知道组播地址:

<MembershipclassName="org.apache.catalina.tribes.membership.McastService" bind="127.0.0.1".../>

(3).如果集群较小,可以采用DeltaManager会话管理器,如果多的话建议使用BackupManager

(4).<Membership>的address设为"228.0.0.4",运行时须确保机器联网能访问到该地址,否则可能运行失败。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值