Java开发|Apache-Tomcat负载平衡配置方法

为了提高系统的高可用性及系统性能,我们常常会用到负载平衡,下面我们介绍一个经常用到的架构,使用ApacheTomcat进行负载平衡的方法。



系统架构图如下:Java开发|Apache-Tomcat负载平衡配置方法
文章图片



主机Apache作为前端负载平衡服务器,对用户请求进行分配,由后端不同的Tomcat服务器最终处理请求。其中根据侧重点的不同,可以有两种不同的配置:

1. 增加系统可用性。

针对这一需求,可以维持三台Tomcat之间Session的同步,确保三台Tomcat服务器中任何两台党机都不影响系统运行,提高系统的可用性。但三台ServerSession的同步将消耗系统性能,并且每台Server都需要单独保持所有Session,对Server的内存有较高要求,且对系统性能提高不大。

2. 提高系统性能。

在负责负载平衡的Apache主机上记录每一请求的Session ID及回应这一SessionTomcat Server的对应关系,在下一个请求到来时,先判断是否有Session ID,如果有,表明为已有连接,则查找响应Tomcat Server,并转发请求;如果没有Session ID,则表明为新建连接,可根据Tomcat Server状态分配一个Tomcat Server响应请求,并记录Session IDTomcat Server关系。

这样则不需要在三台Tomcat Server间同步Session,且可由三台Tomcat Server分担全部负荷,但是,党一台Server党掉以后,该Server所对应的连接将得不到响应,直到超时并丢失Session,对系统的可用性有影响。



初步构思可以将两种方法结合,可在提高可用性的同时提高系统性能,但是费用将非常之高,这里不作讨论。下面对这两穜方法进行介绍。
★所需软件


JRE(JDK) 6u3

https://sdlc1d.sun.com/ECom/EComActionServlet; jsessionid=C24D6C542EBA5DBDEC0403E98C7206FE

Tomcat 6.0.14

http://tomcat.apache.org/download-60.cgi#6.0.13

Apache 2.2.6

http://httpd.apache.org/download.cgi

Jk-2.2.4

http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.25/mod_jk-apache-2.2.4.so



★硬件要求

四台PC,安装Xp操作系统,或用虚拟机。


Host Name

IP Address

Tomcat1

192.168.1.1

Tomcat2

192.168.1.2

Tomcat3

192.168.1.3

Apache

192.168.1.4



★软件安装

JRE安装,因只需调试程序,因此可以只安装JRE,也可安装JDK,安装方法不做解释,但须配置JAVA_HOMEPATHCLASSPATH等环境变量。具体方法参考http://blog.csdn.net/sunshinestation/posts/1782349.aspx ,在Tomcat1Tomcat2Tomcat3安装Tomcat,在Apache上安装Apache,具体安装方法不做介绍,以下以%JAVA_HOME%%TOMCAT_HOME%%APACHE_HOME%分别代表JRETomcatApache的安装路径。

★配置Tomcat

打开Tomcat上的%TOMCAT_HOME%/conf/server.xml,找到以下代码:
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

并将注释部分 打开,并修改jvmRoute=”tomcat1”,修改后代码如下:


Java开发|Apache-Tomcat负载平衡配置方法
文章图片

同样修改Tomcat2Tomcat3两台Tomcat Server,使其jvmRoute分别为tomcat2tomcat3

Tomcat测试代码

在三台Tomcat Server%TOMCAT_HOME%/webapps/下新增lbtest.war活页夹,并在该活页夹下新增必须的WEB-INF活页夹和index.jsp文件,代码如下:

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
< html >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
< head >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
< title > Insert title here
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
< body >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
This is responsed by < font color ="red" > < br >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Host Name : < font color ="red" > < br >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Time : < font color ="red" > < br >
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
用于显示响应服务器的HostNameIPAddress,启动Tomcat,确认三台Tomcat服务器都可以正常运行,测试路径为:http://tomcat1:8080/lbtest/index.jsp http://tomcat2:8080/lbtest/index.jsp http://tomcat3:8080/lbtest/index.jsp ,测试正确结果页面如下:Java开发|Apache-Tomcat负载平衡配置方法
文章图片

★配置Apache,实现负载平衡

将jk-2.2.4解压得到的mod_jk-apache-2.2.4.so放到Apache Server的%APACHE_HOME%/ modules活页夹下,并改名为mod_jk.so,打开%APACHE_HOME%/conf/httpd.conf,在其中添加如下代码:


Java开发|Apache-Tomcat负载平衡配置方法
文章图片
LoadModule jk_module modules/mod_jk.so#load the mod_jk module
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
# Where to find workers.properties
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
JkWorkersFile conf/workers.propertie#set the path to load workers.propertie file
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
# where to find the log file
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
JkLogFile logs/mod_jk.log#set the path to log the jk info
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
# set the log level
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
JkLogLevel info#set the log level
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
# map to the status server
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
JkMount /private/admin/mystatus mystatus#mount the status server
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
# router the request to the right host
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
JkMount /* balance#mount other request to the balance worker
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

然后,在%APACHE_HOME%/conf/下新增workers.propertie文件,修改其内容如下:
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.list = balance , mystatus
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
#defaine a worker for apache
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.tomcat1.type = ajp13
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat1.host = tomcat1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat1.port = 8009
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat1.lbfactor = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat1.socket_timeout = 30
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat1.socket_keepalive = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.tomcat2.type = ajp13
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat2.host = tomcat2
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat2.port = 8009
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat2.lbfactor = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat2.socket_timeout = 30
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat2.socket_keepalive = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.tomcat3.type = ajp13
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat3.host = tomcat3
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat3.port = 8009
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat3.lbfactor = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat3.socket_timeout = 30
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker. tomcat3.socket_keepalive = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.balance.type = lb
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.balance.balance_workers = tomcat1 , tomcat2 , tomcat3
Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.balance.sticky_session = 1
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

Java开发|Apache-Tomcat负载平衡配置方法
文章图片
worker.mystatus.type = status
Java开发|Apache-Tomcat负载平衡配置方法
文章图片

其中设置一个名为balance的lb(Load Balance)类型的worker,用来对tomcat1,tomcat2,tomcat3进行负载平衡,并设置一个status类型的worker用来监控Apache Load Balance的状态。Note:worker.tomcat1.type中的tomcat1必须和tomcat中配置的jvmRoute相同,才可以使用Apache的Sticky session功能。

★测试负载平衡结果

在四台机器中的任何一台上打开http://apache/lbtest/ ,可以看到lb首次将请求分配给Tomcat1,页面如下:

Java开发|Apache-Tomcat负载平衡配置方法
文章图片

然后再刷新页面,会发现请求分别由Tomcat2Tomcat3响应,至此负载平衡配置成功,可将三台Tomcat Server中的任何一台关闭,再刷新察看情况,会发现请求将转发至其它Tomcat Server响应,但系统仍可访问。访问页面http://apache/private/admin/mystatus,可以访问Load Balance状态,页面如下:Java开发|Apache-Tomcat负载平衡配置方法
文章图片

另外,在此页面也可在线调节各worker状态,这里不作详细介绍。



以上介绍都是提高系统性能,但是要提高系统的可用性,就需要对三台Tomcat Server间进行Session的同步,以确保三台中的任何一台机器都能保存所有用户的状态,以后再作介绍。



【Java开发|Apache-Tomcat负载平衡配置方法】以上内容在Windows环境下操作。

    推荐阅读