本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置。
Apache
Apache 是 http 服务器,我们利用其对 Tomcat 进行负载均衡。目前最新版本为 2.2.17 ,下载地址为 http://httpd.apache.org/download.cgi#apache22 。如下图:
目前已经出现 Apache2.3.11 ,但是为 beta 版本,所以没有使用。
下载后直接安装 msi 即可,如果没有其他的 http 服务器 ( 如 iis) 则应该可以成功安装,端口即为 80 ,能够访问 http://localhost/ 说明安装成功。
Tomcat
Tocmat7 目前已经出现稳定版本的 7.0.12 , Tomcat6 则为 6.0.32 。经我测试,这 2 个版本的 Apache 负载均衡配置过程都是一样的,因此下面的配置在 Tomcat6 或 7 集群是通用的。但是按照下面的配置,集群中 Tomcat 不能既有 Tomcat6 又有 Tomcat7 ,否则虽能够负载均衡,但不能进行 session 复制 ,不知其他方式配置的集群是否可以。
Tomcat 就不用怎么介绍了。既然在本地需要多个节点,那么需要下载 ZIP 版本的 Tomcat 。
JK
JK 是 Tomcat 提供给 http 服务器的插件 ( 个人理解的 ) ,下载地址为 http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/ 。如下图:
这里选择的是 mod_jk-1.2.31-httpd-2.2.3.so ,如果 http 服务器是 Apache2.0.X 版本,则必须选择 mod_jk-1.2.31-httpd-2.0.52.so ,页面下方有英文的说明,大家可以看下。
其实我也在网上看到 Apache2.2 已经集成 Tomcat 插件模块了,可以不用 JK 插件就可以实现 Tomcat 负载均衡,但也需要一些配置,而 JK 这个配置相比也不复杂,就先记录下来。
下面就直接写过程了,我也是网络上学习的,只是总结下过程并且利用最新的 Apache 和 Tomcat 测试了下,还是与网络上有些不同的。
修改 Apache 配置
1、 修改 httpd.conf
我的 Apache 安装在 D:\Program Files\Apache Software Foundation\Apache2.2 ,找到 conf 目录下的 httpd.conf ,在文件的最后一行添加
include "D:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
2 、新建 mod_jk.conf 文件,内容如下:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/workers.properties
# 指定那些请求交给 tomcat 处理 ,"controller" 为在 workers.propertise 里指定的负载分配控制器名
JkMount /*.jsp controller
3、 将下载的 JK 插件 mod_jk-1.2.31-httpd-2.2.3.so 复制到 Apache 安装目录的 modules 目录下。
4、 新建并编辑 workers.properties 文件,内容如下:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=11009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=12009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========tomcat3========
worker.tomcat3.port=13009
worker.tomcat3.host=192.168.0.80 // 在我的虚拟机中的,可以算远程的吧
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor = 1
#========controller, 负载均衡控制器 ========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
这里可以配置任意多个 Tomcat ,此处配置了 3 个 Tomat 服务器, 2 个本地, 1 个远程,所以为了它们都能够顺利启动起来,本地的服务器端口都是不同的,如果 Tomcat 不再同一机器上,没必要改端口的。
配置 Tomcat
配置 3 个 Tomcat 服务器,将 Tomcat 解压后复制 3 份,我将每个文件夹分别命名为 Tomcat1 , Tomcat2 和 Tomcat3 ,修改每一份的 server.xml 配置,将 Tomcat1 中修改部分如下图:
Tomcat2 中以上部分的 server.xml 为:
Tomcat3 中以上部分的 server.xml 为:
因为 Tomat3 在远程服务器,所以没必要改端口的,而我先进行的本地集群测试后将 Tomcat3 复制到远程服务器,所以这 3 个 Tomcat 端口都不同。
AJP13 的 connector 的 poat 和 jvmRoute 名称和 workers.properties 中配置对应。
由于截图面积有限,还需要保证本地 2 个本地 Tomcat 配置 server 的 port , connector 为 http1.1 的 port 都不相同。