`
jamesqiu
  • 浏览: 18608 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Apache Tomcat 负载均衡配置参考

阅读更多

要提高Java应用服务器的扩展性和可用性, 采用前端Web服务器来进行Load-Balance负载均衡是一种极为靠谱的方式. 这种方式在用户数量和应用负载进行增长的时候很容易扩展, 也能够在一个机器硬件(网卡,硬盘等)出问题被动down机或者管理员主动down机进行维护的情况下保证系统可用. 架构师和开发人员越早了解这种方式并在实际应用中使用, 会对自己的Web应用越有信心.

 

下面我们用最简单可行的方式(一台Windows下Apache 2.2.x + Tomcat 6.0.18), 让大家对这种配置有一个直接的了解, 配置虽然是在WindowsXP上完成的, 但对Debian Linux下的情况也进行介绍, 你会发现, 在Linux下做这个工作只会更加省心, 毕竟Apache和Tomcat和*nix环境更加亲和 (如果你只安装了Windows, 我推荐你尽快安装Cygwin 或者coLinux ).

 

1.

http://httpd.apache.org 下载 apache_2.2.11-win32-x86-openssl-0.9.8i.msi , 安装至如 e:\Apache2.2, 安装的时候他让你填domain,hostname, 都选你的主机名即可 (可通过ipconfig/all或者hostname命令得到).

提示: Debian下更简单, $apt-get install apache2 命令直接完成.

 

2.

编辑conf\httpd.conf, 把下面的注释行生效:
#ServerName yourHostname:80
启动: bin\httpd.exe 或者 net start Apache2.2, 第一种启动方式有时便于你查错.

提示: Debian下用 $apache2 或者 $apache2ctl -k start

 

3.

下载mod_jk (mod_jk-1.2.28-httpd-2.2.3.so )

配置使用mod_jk, conf\httpd.conf 中增加:

---------------------------------------------------------------------------------
# jamesqiu
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
# trace, debug, info(*default), warn, error
JkLogLevel warn
# 让controller处理的url, controller和workers.properties中的名称需一致
JkMount /* controller  # */
# 不让controller处理的url
JkUnMount /test.html controller
---------------------------------------------------------------------------------

新建:
conf\workers.properties (内容如下, 或见附件1)

 

#--- see following for detail
# "http://tomcat.apache.org/connectors-doc/"
# "http://tomcat.apache.org/connectors-doc/reference/workers.html"

#========server列表========
worker.list=controller

#========controller,负载均衡控制器========
worker.controller.type=lb								# load-balance worker, can be "lb, status"
worker.controller.method=B								# 如何选择最优的worker, B[usyness]: 选最不忙的, R[equest]: 缺省
worker.controller.balance_workers=tomcat1,tomcat2		# 指定分担请求的tomcat
# *注意* sticky_session=1的时候不能设置sticky_session_force=1, 否则永远不能由另一worker接手
worker.controller.sticky_session=1						# 1: True, otherwise False, 相同session id一直访问同一服务器
worker.controller.sticky_session_force=0				# session id出错状态不返回500(Server Error), 由另一worker接手

#========tomcat1========
worker.tomcat1.port=8009		# ajp13 端口号,在tomcat下server.xml配置, 注意不是http端口8080
worker.tomcat1.host=localhost	# tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13		# apache和tomcat通讯方式, can be "ajp13, ajp14"
worker.tomcat1.lbfactor=1		# server的加权比重,值越高,分得的请求越多

#========tomcat2========
worker.tomcat2.port=8019		# ajp13 端口号,在tomcat下server.xml配置
worker.tomcat2.host=localhost	# tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13		# apache和tomcat通讯方式, can be "ajp13, ajp14"
worker.tomcat2.lbfactor=1		# server的加权比重,值越高,分得的请求越多

 

 

提示: Debian下没得说, $apt-get install libapache2-mod-jk 直接完成 安装

 

4.

http://tomcat.apache.org 下载 Tomcat 6.0.18 , 得益于Java程序的方便性, 解压至如 e:\tomcat 即用(需有安装好的jdk如sun jdk1.6.0_13). 因为要做多个tomcat进行load-balance, 至少得准备2份Tomcat.

如果此时你想都不想就从e:\tomcat复制出一份e:\tomcat2, 我要提醒你了同学: 作为一位IT人, 要尽量秉承DRY(别干傻事)和节约机器资源的原则, 不要老搞copy&paste的糗事让内行鄙视. , 你仅仅需要不同的conf\server.xml而已. bin\, lib\, webapps\完全可以共用, 这里我绕个弯(不用catalina run -config server2.xml), 以便郑重推荐Junction(下载地址 )这个类似于*nix下ln命令的工具, 他可以用一个<JUNCTION>链接来冒充实际目录欺骗Windows(其实现在这些OS挺傻的, 被虚拟机骗得找不着北, 都不知道自己运行在什么CPU和硬件上).

在各自的conf/server.xml中修改 http端口8080->808x, shutdown端口8005->80x5, ajp端口8009->80x9, 如:
  tomcat1 http:8080, shutdown:8005, ajp:8009
  tomcat2 http:8081, shutdown:8015, ajp:8019
  tomcat3 http:8082, shutdown:8025, ajp:8029

  .....

为了启动,停止,重启tomcat方便, 你可以在path里使用 tm.bat 和 tm2.bat, 但不要在其他地方设置 CATALINA_HOME (内容如下, 或见附件2)

 
@echo off
setlocal

if '%1'=='' (
        echo tm 1 启动tomcat
        echo tm 0 停止tomcat
        echo tm 2 重启tomcat
        goto end
)

set CATALINA_HOME=E:\tomcat
if %1==1 ( rem 启动
        %CATALINA_HOME%\bin\startup.bat
) else if %1==0 ( rem 停止
        %CATALINA_HOME%\bin\shutdown.bat
) else if %1==2 ( rem 重启
        %CATALINA_HOME%\bin\shutdown.bat
        sleep 1 && %CATALINA_HOME%\bin\startup.bat
)

:end
endlocal
@echo on
 

提示: Debian下你当然是用 ln -s 来轻松造出多份Tomcat了; 改用shell来写 tm.bat 也非常容易;

 

5.

重启Apache, 启动所有tomcat实例, 你可以手工用浏览器测试, 我安装了curl(在cygwin上), 也可以用如下脚本测试:

      for /L %B in (0,1,9) do curl http://localhost/test.jsp
可以看出tomcat1, tomcat2被轮流调用;

把其中一个tomcat实例停止, 再测试发现已经转到其他tomcat来处理了.

%CATALINA_HOME%\webapps\ROOT\test.jsp 的内容很简单, 仅仅标示一下自己是那个Tomcat实例:

<%
out.println("CATALINA_HOME=" + System.getenv("CATALINA_HOME") );
%> 

 

6.

后记:

  • 要把一个Tomcat实例仅仅作为其他实例不工作时的临时应急, 而不在正常状态下参与 (例如: 较低配置的备份机器), 也很容易在workers.properties里面进行配置(参考 )
  • 是否还需要在load-balance的基础上做Cluster( 进行session复制 )? 请自行认真评估应用需求. Cluster保证session不丢失的同时, 同步session行为也会出现更多的稳定性问题和性能问题(尤其在tomcat实例数量较多时), 而你放入session的对象, 也得认真实现java.io.Serializable. Cluster的配置Tomcat自带文档写得很清楚.

 

 

0
0
分享到:
评论
1 楼 yongboy 2009-11-19  
在《Apache Tomcat 6高级编程》这本书里面有详细讲解,可以参考一下

相关推荐

    apache+tomcat负载均衡_proxy模式

    内附完整配置教程和修改后的apache的httpd.conf文件和tomcat的server.xml配置文件,包含test测试项目,不包含apache和tomcat安装文件。 本教程参考网上资料,本机测试成功,如有问题可以私信说明。

    Tomcat+Apache2负载均衡部署参考

    通过向Apache发送请求,观察请求是否被正确地分发到各个Tomcat服务器,以及负载是否均匀分布,可以验证负载均衡配置的有效性。 在实际部署中,可能需要根据服务器的数量、硬件资源和应用程序的需求调整负载均衡策略...

    windows平台apache+tomcat+说明文档负载均衡整个环境

    本人自己配置的windows平台apache+tomcat负载均衡实现,这个资源中包括apache,tomcat,测试项目+说明文档。只要正确安装apache,即可直接正常运行。本人参考网络,所以给贡献网络。

    apache+tomcat负载均衡整合文档

    以下是实现Apache+Tomcat负载均衡整合的详细步骤: 1. **安装与配置Apache**: - 安装Apache HTTP服务器,并确保已启用mod_proxy、mod_proxy_balancer和mod_proxy_http模块。这些模块通常在默认的Apache安装中已经...

    Apache+tomcat实现负载均衡

    本篇文章将详细介绍如何使用Apache和Tomcat实现负载均衡。 负载均衡的核心思想是将来自用户的请求分发到多个服务器上,以避免单一服务器过载。在Apache与Tomcat的组合中,Apache通常作为前端负载均衡器,通过HTTP...

    Windows下Apache2.2+Tomcat6配置集群、负载均衡、session共享

    在Windows环境下,Apache2.2和Tomcat6的组合是一个常见的Web服务器架构,用于搭建集群、实现负载均衡和处理session共享。Apache作为前端反向代理服务器,负责分发请求到后端的多个Tomcat实例,以提高应用的可用性和...

    apache tomcat mysql多服务器集群负载均衡

    【Apache Tomcat MySQL 多服务器集群负载均衡】 在IT领域,构建高可用性和高可扩展性的系统是关键,特别是对于大型企业或高流量网站。Apache Tomcat MySQL多服务器集群负载均衡解决方案旨在通过分布式架构和负载...

    apache 负载均衡集群

    二、Apache + Tomcat 配置负载均衡集群步骤 1. **准备工作**: - 安装必要的软件:JDK 1.6、Tomcat 6、Apache 2.2 及 JK 2.2.4。确保所有软件版本兼容。 - JDK 和 Tomcat 的安装一般比较常规,Apache 安装可以...

    apache_tomcat配置

    此外,文件`mod_jk-1.2.26-httpd-2.2.4.so`是用于Apache HTTP Server的mod_jk模块,它实现了Apache与Tomcat之间的负载均衡和通信。mod_jk允许你在Apache上部署Java应用,通过AJP协议将请求转发到Tomcat实例。配置这...

    轻松实现Apache_Tomcat集群和负载均衡

    错误更改与补充.txt文件可能是集群和负载均衡配置过程中遇到问题的记录和解决方案,建议参考其中的建议进行调整。在实际操作过程中,一定要仔细检查配置文件,避免语法错误,同时监控系统日志,以便快速定位并解决...

    ApacheTomcat整合入门级教程

    提供的文档资料如《ApacheTomcat整合教程.pdf》和《BOXIN网站系统环境搭建APACHE+TOMCAT.pdf》将更深入地指导你完成具体步骤。在学习过程中,遇到问题可参考官方文档或社区资源,不断积累经验,提高技术水平。

    疯狂的IT人整理Apache、Tomcat集群和负载均衡

    ### Apache、Tomcat集群与负载均衡详解 #### 一、引言 随着互联网技术的不断发展,用户对服务的要求越来越高,单台服务器往往无法满足高并发、高性能的需求。因此,搭建集群成为了提高系统可用性、扩展性的有效...

    apache+tomcat配置文件

    在下载的“apache+tomcat配置文件”中,可能包含了这些配置的示例或模板,可以直接使用或作为参考来配置自己的环境。确保在实际部署前,根据自身的硬件资源和应用需求进行适当的调整,以达到最佳的运行效果。在部署...

    两台服务器上做Apache2.2+Tomcat6.0+mod_jk的负载均衡

    "工具"可能指的是用于配置、监控和管理这些组件的各种工具,如Apache的HTTP服务器管理工具、Tomcat的Manager应用,或者第三方的负载均衡监控软件。 10. **博文链接**:提供的博客链接可能包含详细的步骤和示例配置...

    apache2.4+tomcat7+mod_jk.so_整合配置

    Apache 2.4 和 Tomcat 7 的整合配置主要依赖于 mod_jk 模块,这是一个 Apache HTTP 服务器的模块,用于与 Tomcat 进行负载均衡和通信。`mod_jk.so` 是该模块的动态链接库文件,用于在 Apache 和 Tomcat 之间建立连接...

    Apache Tomcat 6高级编程 pdf

    - **负载均衡方案**:探讨不同类型的负载均衡器(如硬件、软件)以及它们在高可用性集群中的应用。 - **故障转移机制**:了解如何设置故障转移策略,确保单个节点出现故障时服务不中断。 - **集群配置**:详细讲解...

    apache-tomcat-6.0.10

    9. **集群与负载均衡**:虽然Tomcat 6.0.10的集群和负载均衡功能相对较简单,但仍然允许开发者通过配置实现多个Tomcat实例间的会话复制,以提高可用性和扩展性。 10. **持续发展与更新**:Apache Tomcat项目一直...

    apache-tomcat-6.0.9.zip

    虽然Tomcat 6.0.9本身不包含内置的负载均衡功能,但可以通过第三方软件如Nginx或Apache HTTP Server进行集群配置。 9. **升级与维护** 为了保持安全性,建议定期更新Tomcat到最新稳定版,因为旧版本可能存在已知...

    Linux环境下负载均衡集群的实现.pdf

    为了提高服务器的性能,作者提出了使用 Tomcat 和 Apache 在 Linux 环境下进行集成,实现负载均衡集群。作者分析了负载均衡集群的架构,详细阐述了方案的实现过程。 负载均衡集群的实现可以分为以下几个步骤: 1. ...

    apache-tomcat-8.5.73

    4. **部署灵活性**:Tomcat可以作为独立服务器运行,也可以与Apache HTTP Server或其他Web服务器集成,通过mod_proxy_ajp模块实现负载均衡和更好的性能。 5. **易于管理**:提供了一个管理控制台,用户可以通过Web...

Global site tag (gtag.js) - Google Analytics