以一个apache2.2前端,2个tomcat6后端为例,tomcat服务器在内网,apache服务器具有内网和外网接口。本文使用JK模块实现负载均衡。
一、建立tomcat负载均衡
1.修改tomcat的conf目录下的server.xml文件,
去掉对jvmRoute这一行的注释,并且把jvmRoute的值改为例如tomcat1这样容易记忆的字符。
1. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
把2个tomcat服务器上的上述文件都作修改。
2.在apache的conf目录下建立workers.properties文件,内容如下
1. # The advanced router LB worker
2. worker.list=router
3. # Define a worker using ajp13
4. worker.worker1.port=8009
5. worker.worker1.host=192.168.56.3
6. worker.worker1.type=ajp13
7. worker.worker1.lbfactor=1
8. # Define preferred failover node for worker1
9. worker.worker1.redirect=worker2
10. worker.worker1.route=tomcat1
11. # Define another worker using ajp13
12. worker.worker2.port=8009
13. worker.worker2.host=192.168.56.4
14. worker.worker2.type=ajp13
15. worker.worker2.lbfactor=1
16. # Disable worker2 for all requests except failover
17. #worker.worker2.activation=disabled
18. worker.worker2.route=tomcat2
19.
20. # Define the LB worker
21. worker.router.type=lb
22. worker.router.balance_workers=worker1,worker2
23. #worker.router.sticky_session_force=1
24. # Add the status worker to the worker list
25. worker.list=jkstatus
26. # Define a 'jkstatus' worker using status
27. worker.jkstatus.type=status
# The advanced router LB worker worker.list=router # Define a worker using ajp13 worker.worker1.port=8009 worker.worker1.host=192.168.56.3 worker.worker1.type=ajp13 worker.worker1.lbfactor=1 # Define preferred failover node for worker1 worker.worker1.redirect=worker2 worker.worker1.route=tomcat1 # Define another worker using ajp13 worker.worker2.port=8009 worker.worker2.host=192.168.56.4 worker.worker2.type=ajp13 worker.worker2.lbfactor=1 # Disable worker2 for all requests except failover #worker.worker2.activation=disabled worker.worker2.route=tomcat2 # Define the LB worker worker.router.type=lb worker.router.balance_workers=worker1,worker2 #worker.router.sticky_session_force=1 # Add the status worker to the worker list worker.list=jkstatus # Define a 'jkstatus' worker using status worker.jkstatus.type=status
其中的
1. worker.worker1.route=tomcat1
worker.worker1.route=tomcat1
中的tomcat1对应第1个tomcat服务器中上述server.xml中的jvmRoute的内容。
同样的,
1. worker.worker2.route=tomcat2
worker.worker2.route=tomcat2
中的tomcat2对应第2个tomcat服务器中上述server.xml中的jvmRoute的内容。
3.在apache的conf目录下的httpd.conf文件末尾添加如下内容
1. # Load mod_jk module
2. # Update this path to match your modules location
3. LoadModule jk_module modules/mod_jk.so
4. # Declare the module for <IfModule directive> (remove this line on Apache 2.x)
5. #AddModule mod_jk.c
6. # Where to find workers.properties
7. # Update this path to match your conf directory location (put workers.properties next to httpd.conf)
8. JkWorkersFile conf/workers.properties
9. # Where to put jk shared memory
# Load mod_jk module # Update this path to match your modules location LoadModule jk_module modules/mod_jk.so # Declare the module for <IfModule directive> (remove this line on Apache 2.x) #AddModule mod_jk.c # Where to find workers.properties # Update this path to match your conf directory location (put workers.properties next to httpd.conf) JkWorkersFile conf/workers.properties # Where to put jk shared memory
4.为了能够在运行时查看jk的状态,在上述内容末尾再添加如下内容
1. # Update this path to match your local state directory or logs directory
2. JkShmFile logs/mod_jk.shm
3. # Where to put jk logs
4. # Update this path to match your logs directory location (put mod_jk.log next to access_log)
5. JkLogFile logs/mod_jk.log
6. # Set the jk log level [debug/error/info]
7. JkLogLevel info
8. # Select the timestamp log format
9. JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
10. # Send everything for context /examples to worker named worker1 (ajp13)
11. JkMount /examples/* router
12. # Add the jkstatus mount point
13. JkMount /jkmanager/* jkstatus
14. # Enable the JK manager access from localhost only
15. <Location /jkmanager/>
16. JkMount jkstatus
17. Order deny,allow
18. Deny from all
19. Allow from 127.0.0.1
20. </Location>
# Update this path to match your local state directory or logs directory JkShmFile logs/mod_jk.shm # Where to put jk logs # Update this path to match your logs directory location (put mod_jk.log next to access_log) JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the timestamp log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # Send everything for context /examples to worker named worker1 (ajp13) JkMount /examples/* router # Add the jkstatus mount point JkMount /jkmanager/* jkstatus # Enable the JK manager access from localhost only <Location /jkmanager/> JkMount jkstatus Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
5.需要注意的是,JK模块的默认配置是支持session黏性的,即用户的session在其生命周期内始终保存在一个tomcat服务器上。
关于如何设置为非sessin黏性等,请参考tomcat官方文档:LoadBalancer HowTo http://tomcat.apache.org/connectors-doc/generic_howto/loadbalancers.html
二、配置session复制
1.修改tomcat的conf目录下的server.xml文件,
去掉对这一行的注释,即可使tomcat服务支持session复制。
1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
2.修改希望复制session的应用的WEB-INF目录下的web.xml文件,
在末尾增加一行
1. <distributable/>
<distributable/>
以使该应用支持session复制。
把2个tomcat服务器上的希望实现session复制的应用中的上述文件都作修改。
3.分别先后启动2个tomcat服务,你会发现启动信息中增加了一些session复制的信息。当第1个tomcat启动完毕,在启动第2个tomcat服务时,log里面会记录寻找可作session复制的第1个tomcat的信息。即寻找簇内服务器的过程。
当停止任何一个tomcat服务后,也会在正在运行的tomcat服务的log中看到有那个tomcat服务停止了的消息。
4.如果想实现更复杂的sessioin复制功能,可以参考tomcat官方文档:
Clustering/Session Replication HOW-TO http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
2012年3月10日 10:36
相关推荐
【标题】:“Tomcat集群配置” 在Web应用的高可用性和可扩展性需求日益增长的今天,Tomcat集群成为了一个重要的解决方案。Tomcat集群能够通过负载均衡和故障转移来提高服务的稳定性和性能。以下是对Tomcat集群配置...
Apache+Tomcat集群配置,Apache+Tomcat集群配置,Apache+Tomcat集群配置
Apache + Tomcat 集群配置 Apache + Tomcat 集群配置是指将 Apache 服务器与 Tomcat 服务器集成,以提高服务器的性能和可扩展性。本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器...
当我们需要处理高并发、负载均衡或提高应用可用性时,单个Tomcat实例可能无法满足需求,这时就需要进行Tomcat集群配置。本资料包包含了“tomcat集群配置”的程序及文档,提供了现成的例子,帮助我们理解和实践Tomcat...
Tomcat7 集群配置 Tomcat7 集群配置是指将多个 Tomcat 服务器组合成一个集群,以提高系统的可用性和可扩展性。在这个配置中,Session 复制机制是一个非常重要的部分,它可以确保在集群中的每个节点都可以访问到同一...
当我们谈论“tomcat集群配置文件”时,我们指的是将多个Tomcat实例组织成一个集群,以提高应用程序的可用性和可伸缩性。在集群环境中,负载均衡、故障转移和资源共享是关键特性。 首先,要配置Tomcat集群,你需要...
**二、Tomcat集群配置步骤** 1. **安装多个Tomcat实例**:首先,你需要在不同的服务器上或同一服务器的不同端口上安装并启动多个Tomcat实例。 2. **配置共享目录**:为确保集群内的节点共享session信息,需要设置...
Apache+Tomcat集群配置续Apache+Tomcat集群配置续Apache+Tomcat集群配置续Apache+Tomcat集群配置续
【标题】:“Tomcat集群配置”是指在多台服务器上部署和管理多个Tomcat实例,以实现负载均衡、高可用性和容错性。这通常涉及将应用部署在多个Tomcat服务器上,通过一个前端负载均衡器(如Apache HTTP Server或Nginx...
3. **配置Tomcat集群**: - **复制应用**:确保每台Tomcat服务器都有相同的应用部署。 - **共享session**:为了在不同服务器之间同步用户状态,需要配置session复制或使用像Redis这样的外部存储。 - **配置集群...
### Apache和Tomcat集群配置详解 #### 一、软件准备 在进行Apache和Tomcat集群配置之前,首先需要准备所需的软件资源。 - **Apache 2.2**: - Windows平台: 从官方网站 [http://httpd.apache.org/download.cgi]...
### Tomcat集群配置详解 #### 1. 配置方案 在描述中提到了三种配置方案: 1. **使用Apache2.2中的mod_ajp集成Tomcat5.5**:这种方案通过Apache的mod_ajp模块,使Apache能够与Tomcat通过AJP协议通信,从而实现请求...
本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...
资料备份(tomcat集群配置),在tomcat集群配置中,各个文件的版本不太好找,且不同版本之间的操作方式也有点不一样,现整理一下做个备份
#### 五、Apache与Tomcat集群配置 1. **Apache的JK2配置文件workers2.properties**: - 该文件位于Apache安装目录下的`conf`目录中,若不存在则需要新建。 - 文件内容包括了共享内存配置、第一个Tomcat的连接配置...
#### 三、Apache+Tomcat集群配置步骤 **步骤1:环境准备** - 安装Apache。 - 安装两个Tomcat实例,并在各自的`webapps`目录下部署测试项目。 **步骤2:JK插件配置** - 将`mod_jk.so`复制到`<apache_home>/...