Apache+Tomcat负载均衡

一、环境

Win7 + Apache2.2.4 + Tomcat6.0

二、实践

1、利用mod_jk

(1)修改apache配置文件httpd.conf,在最后加一行

wKiom1R-lJXgT1kfAAAlVcyeED4473.jpg

(2)在conf文件夹下创建一个mod_jk.conf文件,文件内容如下

wKiom1R-lD2iViFaAADTOw02QXw782.jpg

(3)在conf文件夹下创建workers.properties和uriworkermap.properties文件。workers.properties是

描述Tomcat实例的,uriworkermap.properties是描述请求映射关系的。

wKiom1R-lADS6NE4AAGvA9laPLQ631.jpg


wKiom1R-lNuSg73aAABlUNANcSQ238.jpg

(4)配置Tomcat。将tomcat拷贝一份,这里把原先的tomcat叫做t1,拷贝后的tomcat叫做t2。由于是在同一台机器上,所以需要修改t2的一些端口设置。

wKioL1R-l8ySxCcaAAG5epGph5g376.jpg

(5)部署项目到tomcat,这里做测试的项目很简单,就是一个表单,里面一个文本框,提交之后,打印SESSION_ID和文本框的值。将其部署到两个tomcat上。

(6)首先启动两个tomcat,然后启动apache。

打开火狐浏览器,输入http://localhost/test

wKiom1R-mGySmnfbAAAQvf7AWeE438.jpg

依次输入A,B, C提交,我们在9009端口的tomcat控制台看到

wKioL1R-qXeAQD_yAAE7vc6JLBE059.jpg


然后打开360浏览器,依次在文本框中输入D、E,F提交,在8009端口的控制台看到

wKioL1R-qY-yBXY-AAFewZbPY3o385.jpg


疑问:为什么不是两个tomcat控制台交替输出A、B、C、E、F呢?

答:因为默认负载均衡器的sticky_session属性值为True,表示相同session的请求会派发到同一个tomcat实例进行处理。这里,我开了两个浏览器。


2、利用mod_proxy

(1)取消httpd.conf文件中对mod_proxy的注释

wKiom1R-nwrwkVBUAAGwA4HW7pU407.jpg这里,由于用的http,所以没有价值mod_proxy_ajp.so

(2)在httpd.conf最后增加如下配置

wKioL1R-oMSQOLrIAADo9BaGKW8471.jpg

(3)启动tomcat,启动apache测试,不再赘述



附:

    前面的例子中使用sticky session,即相同session的请求发发到同一个tomcat上进行处理。这种方式有一个问题,如果其中一个tomcat出现故障,那么这个tomcat正在处理的请求就断了,再也找不回来了。为了提供不间断的服务,我们需要session复制。

(1)修改workers.properties文件,设置session模式

wKiom1R-xTPxp8PWAAAzamRqhwk925.jpg

(2)修改tomcat配置文件server.xml,启动集群

wKiom1R-xV3RNvfaAAGwbFKS8yI732.jpg

这里只是简单的使用tomcat提供的默认的集群设置,这种方式适合于数量比较少的集群,因为默认的这种设置是只要session修改了,tomcat把这个session共享给集群内的所有节点,即使这个节点没有发布任何应用。

(3)在web应用的web.xml文件中增加<distributable/>

(4)测试

这次在同一个浏览器中测试

wKiom1R-xnHjlMolAAOjsYCJlD4278.jpg


你可能感兴趣的:(tomcat,负载均衡)