`

转载:Apache+Tomcat集群配置负载均衡器

    博客分类:
  • java
 
阅读更多
主 题:Apache+Tomcat集群配置负载均衡器



tomcat是开源servlet \jsp服务器,下载地点 http://jakarta.apache.org/ ;
apache 2.0.43 是开源的www服务器,下载地点 http://www.apache.org/dist/httpd/binaries/ ;
JavaGroups是一个实现集群服务实体间通信的通信协议,下载地址: http://www.javagroups.com/ ;
Tomcat 会话复制库,基于JavaGroups通信协议,完成集群服务实体间任务执行上下文的复制,下载地址: http://www.filip.net/tomcat/tomcat-javagroups.jar
jk2模块,jk 是mod_jserv的替代者,它是Tomcat-Apache插件,处理Tomcat和Apache之间的通信,在集群配置中充当负载均衡器的作用。JK2是符合apache 2.x系列的新品,下载地址: http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk2/release/v2.0.2/bin/。
2.2 配置负载均衡器

在apache下配置负载均衡器分为三步,注意每次修改httpd.conf和workers2.properties时不要忘了重新启动apache。

第一步,安装和调试apache
负载均衡器jk2模块是apache www 服务的插件,所以配置负载均衡器就得先安装apache。本文下载的是windows版本 2.0.43,执行setup.exe并回答一些简单问题就可完成apache的任务。值得注意的是,安装并启动apache后如果apache对http://localhost/ 地址没反应,你得修改apache安装路径下htdocs目录下的index.html.xx文件,比如把index.html.en改成index.html。

第二步,安装jk2
把下载到的 mod_jk2-2.0.43.dll改成mod_jk2.dll 放到apache的modules目录下,修改apache的httpd.conf,即在LoadModule foo_module modules/mod_foo.so 行下插入mod_jk2模块的装载信息:

# Example:

# LoadModule foo_module modules/mod_foo.so

#

LoadModule jk2_module modules/mod_jk2.dll



第三步,配置jk2
jk2的配置全在一个配置文件中,文件名为workers2.properties,和apache 的httpd.conf放在同一个目录下。以下是这个文件的内容:

#++++++++++++++++++++++++++++++++++++

# only at beginnin. In production uncomment it out

[logger.apache2]

level=DEBUG

#shm必须配

[shm]

file=D:\Program Files\Apache Group\Apache2\logs\shm.file

size=1048576

# 第一个tomcat 的地址

# Example socket channel, override port and host.

[channel.socket:tomcat1]

port=11009

host=127.0.0.1

# 定义第一个工作者指向第一个tomcat

# define the worker

[ajp13:tomcat1]

channel=channel.socket:tomcat1

#第二个tomcat 得地址

# Example socket channel, override port and host.

[channel.socket:tomcat2]

port=12009

host=10.1.36.123

# 定义第二个工作者指向第二个tomcat

# define the worker

[ajp13:tomcat2]

channel=channel.socket:tomcat2

#定义负载均衡器,使其包含两个工作者

[lb:lb1]

worker=ajp13:tomcat2

worker=ajp13:tomcat1

#指定负载均衡器完成单一地址映射,使得apache 服务所在的uri全部指向 两个tomcat 上的 root

# Uri mapping

[uri:/*]

group=lb:lb1

#++++++++++++++++++++++++++++++++++++++++++



对于jk2模块的负载均衡配置可参见相关站点,值得提及的是jk2的负载均衡还支持权重分配等优秀功能。

2.3 配置tomcat

同属于一个集群下的两个服务实体,要求功能的同一性,所以我们可先安装和配置第一个tomcat,接着拷贝形成第二个tomcat,最后配置第二个tomcat。

2.3.1 安装第一个tomcat

安装tomcat 非常简单,本文就不再描述。我们假设第一个tomcat的安装路径为d:\tomcat1。

拷贝tomcat-javagroups.jar和javagroups.jar到d:\tomcat1\ server\lib 路径下。

2.3.2 配置第一个tomcat

2.3.2.1 配置jk2

tomcat 中的jk2 connector缺省端口为8009,为了在一台机器上运行两个tomcat,修改D:\Tomcat1\conf\jk2.properties,设置jk2 connector的端口为11009,整个文件内容如下:

#++++++++++++++

channelSocket.port=11009

#++++++++++++++



2.3.2.2 修改server.conf

首先为了让一台机器上运行两个tomcat,修改server.conf的tomcat 停止指令监听端口:

<Server port="8005" shutdown="SHUTDOWN" debug="0"> 改为

<Server port="11005" shutdown="SHUTDOWN" debug="0">



然后打开JK2 AJP connector ,关闭其它connector,下面是JK2 AJP 1.3的样子,这里已把它的端口改为11009:

<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

               port="11009" minProcessors="5" maxProcessors="75"

               enableLookups="true" redirectPort="8443"

               acceptCount="10" debug="0" connectionTimeout="20000"

               useURIValidationHack="false"

               protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>



接着配置需要集群支持的webapp(比如examples) 的context,添加如下manager:

    <Manager

        className="org.apache.catalina.session.InMemoryReplicationManager"

        protocolStack="UDP(mcast_addr=228.1.2.3;mcast_port=45566;ip_ttl=32):PING(timeout=3000;

                num_initial_members=6):FD(timeout=5000):VERIFY_SUSPECT(timeout=1500):

                    pbcast.STABLE(desired_avg_gossip=10000):pbcast.NAKACK(gc_lag=10;

                retransmit_timeout=3000):UNICAST(timeout=5000;min_wait_time=2000):

                    MERGE2:FRAG:pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;

                shun=false;print_local_addr=false)">

      </Manager>



注意protocolStack的值必须在一行内写完。

2.3.3 配置第二个tomcat

我们先把已经配好的第一个tomcat复制一份,形成第二个tomcat,假设路径为d:\tomcat2。

2.3.3.1 配置jk2

修改D:\Tomcat2\conf\jk2.properties,设置jk2 connector的端口12009,整个文件内容如下:

#++++++++++++++

channelSocket.port=12009

#++++++++++++++



2.3.3.2 修改server.conf

有了第一个tomcat的配置我们只需修改server.conf的tomcat 停止指令监听端口:

<Server port="11005" shutdown="SHUTDOWN" debug="0"> 改为

<Server port="12005" shutdown="SHUTDOWN" debug="0">



然后设置JK2 AJP connector 端口为12009。

2.4 运行测试

启动apache,tomcat1和tomcat2。

2.4.1 测试负载均衡

我们先准备两个文件,第一个文件为test.jsp,拷贝到第一个tomcat 的根web应用的目录即d:\tomcat1\webapps\ROOT 下:

<html>

<body bgcolor="red">

<center>

<%= request.getSession().getId() %>

<h1>Tomcat 1</h1>

</body>

</html>



第二个文件也为test.jsp,拷贝到第二个tomcat 的根web应用的目录即d:\tomcat2\webapps\ROOT 下:

<html>

<body bgcolor="blue">

<center>

<%= request.getSession().getId() %>

<h1>Tomcat 2</h1>

</body>

</html>



从不同的浏览器中多次输入地址http://localhost/test.jsp 会看到不同的颜色,这表明apache中的jk2模块起到了负载均衡的作用。

2.4.2 测试错误恢复

访问url: http://localhost/examples/servlet/SessionExample 可以得到一个关于session的例子,我们用它来测试集群的错误恢复能力。

测试步骤如下:

1.      关闭tomcat1和tomcat2;

2.      启动tomcat1

3.      

4.      在浏览器中输入属性名tomcat1和属性值tomcat1再提交,返回的页面显示session中有刚刚输入的tomcat1属性;

5.      启动tomcat2;

6.      过一会后(等待tomcat2和tomcat1通信并复制信息)关闭tomcat1;

7.      在浏览器中输入属性名tomcat2和属性值tomcat2再提交,返回的页面显示session中有刚刚输入的tomcat2属性,还有先前输入的tomcat1属性;

8.      启动tomcat1;

9.      过一会后(等待tomcat2和tomcat1通信并复制信息)关闭tomcat2;

10.   在浏览器中输入属性名tomcat11和属性值tomcat11再提交,返回的页面显示session中有刚刚输入的tomcat11属性,还有先前输入的tomcat1和tomcat2属性;

……

2.4.3 测试多目传输的方法

如果运行测试失败,可以使用下面的JAVAGROUP方法测试机器的多目传输性:

启动多目接收器:

java org.javagroups.tests.McastReceiverTest -mcast_addr 224.10.10.10 -port 5555



启动多目传输器:

java org.javagroups.tests.McastSenderTest -mcast_addr 224.10.10.10 -port 5555



这样你在McastSenderTest窗口中输入内容,应该在McastReceiverWindow中可以看到结果。如果看不到结果,在McastSenderTest运行参数中加入-ttl 32,如果还不行,可以修改多目地址再试试(注意避开系统保留用的多目地址);如果还不行,就去问问网管吧!

2.4.4 对tomcat-javagroups的修改

tomcat-javagroups.jar中的org.apache.catalina.session.ReplicatedSession类的removeAttribute方法会导致stackoverflow错误,请按下面的代码对其进行修改:

public void removeAttribute(String name, boolean notify, boolean jgnotify) {

        super.removeAttribute(name);

        if ( jgnotify )

        {

            SessionMessage msg =

                new SessionMessage(notify?SessionMessage.

                EVT_ATTRIBUTE_REMOVED_WNOTIFY:SessionMessage.

                EVT_ATTRIBUTE_REMOVED_WONOTIFY,

                                                              null,

                                                              getId(),

                                                              name,

                                                              null,

                                                              null);

            sendMessage(msg);

        }

      

    }

     public void removeAttribute(String name, boolean notify) {

        removeAttribute(name,notify,true);

}
分享到:
评论

相关推荐

    apache+tomcat集群配置

    本文详细介绍了 Apache + Tomcat 集群配置的每一步骤,包括安装 Apache 和 Tomcat 服务器、配置 mod_jk 模块、配置 Apache 和 Tomcat 服务器、配置负载均衡控制器等。通过遵循本文的配置步骤,可以成功地配置 Apache...

    Apache+Tomcat集群和负载均衡的资料

    ### Apache+Tomcat集群与负载均衡配置详解 #### 一、环境说明 为了实现Apache与Tomcat集群的负载均衡,我们需要准备以下环境: 1. **服务器配置**:四台服务器,其中一台安装Apache,三台安装Tomcat。 - Apache...

    apache+tomcat+jk 均衡负载和集群

    Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...

    tomcat+apache+jk集群和负载均衡

    在IT领域,特别是Web服务架构中,通过使用Tomcat、Apache和JK代理模块实现集群与负载均衡是一种常见的优化策略,旨在提升系统性能、稳定性和可用性。以下是对标题“tomcat+apache+jk集群和负载均衡”以及描述...

    Apache+Tomcat集群和负载均衡及Session绑定

    #### 3.2 配置负载均衡器 配置Apache的httpd.conf文件,添加JK2模块配置,包括定义每个Tomcat服务器的worker,设置负载均衡策略(例如轮询、最少连接数等)。 ```apacheconf LoadModule jk_module modules/mod_jk....

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    Apache+Tomcat+Linux集群和负载均衡

    ### Apache+Tomcat+Linux集群和负载均衡 在IT领域,Apache+Tomcat+Linux集群与负载均衡技术是实现高可用性、高性能Web服务的重要手段之一。本文将围绕这一主题展开详细讨论,涵盖关键技术概念、配置流程及注意事项...

    Apache+Tomcat集群的负载均衡配置文件和测试文件

    本主题聚焦于"Apache+Tomcat集群的负载均衡配置",通过Apache作为前端代理服务器,对后端的多个Tomcat实例进行负载分发,以实现高可用和高性能的服务。 首先,我们要理解负载均衡的基本概念。负载均衡是指将流入的...

    实现apache+tomcat集群和负载均衡的比较

    总之,Apache+Tomcat集群和负载均衡的实现能够显著提升Web服务的可用性和性能,通过灵活选择负载均衡策略和模块,可以适应各种复杂的业务场景。在实际操作中,还需要不断调整和优化,以达到最佳的效果。

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    .在32位操作系统上配置apache+tomcat集群/负载均衡/session复制

    标题中的“在32位操作系统上配置apache+tomcat集群/负载均衡/session复制”涉及到的是在32位系统环境下,如何构建一个使用Apache HTTP Server作为前端负载均衡器,与多个Tomcat应用服务器协同工作的集群环境,并实现...

    Apache+Tomcat服务器集群配置详细步骤

    #### 三、Apache+Tomcat集群配置步骤 **步骤1:环境准备** - 安装Apache。 - 安装两个Tomcat实例,并在各自的`webapps`目录下部署测试项目。 **步骤2:JK插件配置** - 将`mod_jk.so`复制到`&lt;apache_home&gt;/...

    apache+tomcat集群配置文件和文档

    这份"apache+tomcat集群配置文件和文档"将涵盖以上所有要点,指导你逐步配置和测试Apache+Tomcat集群。按照文档操作,你将能够构建出一个高效且稳定的Web服务环境。在实际操作中,务必根据你的硬件资源和具体需求...

    apache+tomcat集群均衡负载 简单实现步骤

    二、Apache配置负载均衡 1. 安装mod_proxy模块:首先确保Apache已安装,并启用mod_proxy模块。在Unix/Linux系统中,通常使用`a2enmod proxy`和`a2enmod proxy_balancer`命令来启用。 2. 配置虚拟主机:在Apache的...

Global site tag (gtag.js) - Google Analytics