自己在研究时,也Google了很多文章,要么写得不详细,要么按照说明进行配置有测试不成功。因此自己
测试通过写了篇详细说明,以帮助像我一样的人。
本文将使用mod_jk来实现负载均衡。我也有试过使用proxy_module,但总测试不成功,不知道原因。
另外按照网上文章进行集群配置也没成功。郁闷!
1. 软件准备
l Apache 2.2: 到 http://httpd.apache.org 下载apache_2.2.14-win32-x86-openssl-0.9.8k.msi,并进行安装。
l Tomcat6:需要2个Tomcat。
l jk_mod:mod_jk-1.2.28-httpd-2.2.3.so。1.2.28是jk的版本号,2.2.3指的是匹配Apache的版本号。jk_mod到http://tomcat.apache.org中,tomcat-connector分类里面下载,下载时注意版本号要对应Apache的版本号。将mod_jk-1.2.28-httpd-2.2.3.so拷贝到apache安装目录modules目录下。
l Web应用:写一个test.jsp(往session写入内容,并显示)。将应用部署到两个tomcat服务器中,并保证两个应用的上下文路径(contextPath)相同。
1.1 Linux下安装
以下为在linux下面安装apache和mod_jk的方法,安装好后,配置方法跟在windows下面是一样的.
解压apache:
# tar -xvf httpd-2.2.14.tar.gz
安装apache:
# cd httpd-2.2.14
# ./configure --prefix=/usr/local/Apache 指定安装主目录
# make
# make install
安装mod_jk:
# tar -xvf tomcat-connectors-1.2.28-src.tar.gz
# cd tomcat-connectors-1.2.28-src/native
# ./configure --with-apxs=/usr/local/Apache/bin/apxs
# make
# cp ./apache-2.0/mod_jk.so /usr/local/Apache/modules/
Linux下注意路径和目录名的大小写。
接下来的配置不区分操作系统,配置都是一样的。
2. 修改配置
2.1 Apache配置
修改安装目录/conf/httpd.conf,在文件末尾增加一行:
Include conf/mod_jk.conf #引入jk模块的配置文件。
在httpd.conf同目录下,新建文件mod_jk.conf,其内容为:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller
在httpd.conf同目录下,新建文件workers.properties,其内容为:
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8011 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8012 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=true #实现集群全局session复制,此处值要设置成false。
注意:第1行的controller,tomcat1,tomcat2要同下面配置的名称要对应(类似log4j.properties)。其中tomcat1,tomcat2,还要同tomcat/conf/server.xml中配置的jvmRoute名称相同,port,host也要同server.xml中的配置对应起来(后面还会讲到)。
2.1.1 非必要配置
如果没有特殊原因,此部分可以不做修改。
修改httpd.conf:
因为apache安装默认是80端口,如果80端口给其他程序占用,修改端口。
#把Listen 80 修改为Listen IP:port或 Listen port
Listen 9090 # 或者Listen 12.34.56.78:9090 #ip是本机ip地址。
#修改默认页面:
<IfModule dir_module>
DirectoryIndex default.html
</IfModule>
#修改默认域名,如果没有域名,也可指定ip地址。ServerName domain:port
ServerName apollo.company.com.cn:80
2.2 Tomcat配置
如果两个tomcat是在一台机器上,server.xml中一些端口要修改,以免冲突。
分别对两个Tomcat/conf/server.xml进行上述修改。
3. 完成并测试
先启动两个Tomcat,再启动Apache。打开两个IE,访问http://localhost/contextPath/test.jsp,查看Tomcat后台打印信息。发现两个IE分别访问两个Tomcat。关闭一个Tomcat再试,两个IE访问的是同一个Tomcat了,被断了服务的那个IE请求被转到另一个Tomcat,并重新创建了session。
作者:Apollo 2009.12.08 百度空间: http://hi.baidu.com/apollo47