一、环境
Win7 + Apache2.2.4 + Tomcat6.0
二、实践
1、利用mod_jk
(1)修改apache配置文件httpd.conf,在最后加一行
(2)在conf文件夹下创建一个mod_jk.conf文件,文件内容如下
(3)在conf文件夹下创建workers.properties和uriworkermap.properties文件。workers.properties是
描述Tomcat实例的,uriworkermap.properties是描述请求映射关系的。
(4)配置Tomcat。将tomcat拷贝一份,这里把原先的tomcat叫做t1,拷贝后的tomcat叫做t2。由于是在同一台机器上,所以需要修改t2的一些端口设置。
(5)部署项目到tomcat,这里做测试的项目很简单,就是一个表单,里面一个文本框,提交之后,打印SESSION_ID和文本框的值。将其部署到两个tomcat上。
(6)首先启动两个tomcat,然后启动apache。
打开火狐浏览器,输入http://localhost/test
依次输入A,B, C提交,我们在9009端口的tomcat控制台看到
然后打开360浏览器,依次在文本框中输入D、E,F提交,在8009端口的控制台看到
疑问:为什么不是两个tomcat控制台交替输出A、B、C、E、F呢?
答:因为默认负载均衡器的sticky_session属性值为True,表示相同session的请求会派发到同一个tomcat实例进行处理。这里,我开了两个浏览器。
2、利用mod_proxy
(1)取消httpd.conf文件中对mod_proxy的注释
这里,由于用的http,所以没有价值mod_proxy_ajp.so
(2)在httpd.conf最后增加如下配置
(3)启动tomcat,启动apache测试,不再赘述
附:
前面的例子中使用sticky session,即相同session的请求发发到同一个tomcat上进行处理。这种方式有一个问题,如果其中一个tomcat出现故障,那么这个tomcat正在处理的请求就断了,再也找不回来了。为了提供不间断的服务,我们需要session复制。
(1)修改workers.properties文件,设置session模式
(2)修改tomcat配置文件server.xml,启动集群
这里只是简单的使用tomcat提供的默认的集群设置,这种方式适合于数量比较少的集群,因为默认的这种设置是只要session修改了,tomcat把这个session共享给集群内的所有节点,即使这个节点没有发布任何应用。
(3)在web应用的web.xml文件中增加<distributable/>
(4)测试
这次在同一个浏览器中测试