本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7652295
建立时间:2006年5月29日




[Apache(jakarta)]利用Solaris10中的Apache2与Tomcat结合实现负载均衡
软件技术

lhwork 发表于 2006/11/27 11:31:53

一、说在前头 在 为ISV提供Solaris10 移植过程中发现有些ISV的应用是使用Apache和Tomcat结合实现负载均衡的J2EE web应用。那么在Solaris10中具体怎么实现这种负载均衡方式呢?本文将给出一个参考实现。本文中多数操作是在Solaris10 B Shell下进行的。 二、本文中实现负载均衡的拓扑图 500)this.width=500'> 此拓扑图只是本文中的实现,如果没有这样的条件也可以简化这些。把Apache和两个Tomcat都安装在一台主机上。也可以利用一台主机利用Solaris10提供的Zone功能来划分多个zone模拟多个主机。 三、实现负载的步骤 验证 Apache2 是否能正常工作。 1.1生成初始配置文件 httpd.conf #cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf 1.2初次启动 Apache #/usr/apache2/bin/apachectl start 1.3查看 Apache 进程是否已经启动 #ps –ef|grep httpd 如果出现下面的情况则表示 Apache 没成功的启动。   500)this.width=500'> 1.4查看没有启动成功的原因 #more /var/apache2/logs/error_log 发现如下 500)this.width=500'>   可以看出是因为 apache 在启动的时候要把 PID 的信息写入到一个文件 httpd.pid 时候发生了问题,原因是 /var/run/apache2 这个目录不存在。现在用下面的命令把这个目录建立起来。 #mkdir –p /var/run/apache2 1.5第二次启动 Apache 为了查看本次启动中产生的错误欣,先删除原有的 error _ log 文件 #rm /var/apache2/logs/error_log 接着启动 apache #/usr/apache2/bin/apachectl start 1.6第二次查看apache的启动情况 #ps –ef|grep httpd 如果出现了下面的情况则说明启动成功。 500)this.width=500'> 也可以通过浏览器验证 Apache 是否启动成功,如果浏览器出现如下信息则说明已经启动成功。 500)this.width=500'> 否则就是没有 Apache 没有成功启动,重复执行 1.4-1.6直到成功为止。再去 error_log 中看一下有什么信息。 #more /var/apache2/logs/error_log 500)this.width=500'> 可以看出已经没有错误产生了。 安装 mod_jk Mod_jk 是连接 Apache 与 Tomcat 的接口。其工作方式如下: 500)this.width=500'>   Apache 在接收到用户请求的 JSP 和 servlet 的时候会通过 mod_jk 把他们转发给 tomcat,tomcat 处理完成后在将结果通过 mod_jk 返回给 apache 。之后 apache 将结果呈现给用户。 2.1获得 mod_jk 在 tomcat 的官方网站提供了两种下载,一种是编译好的二进制文件 “ .dll” 或者“ .so ”。另外一种是源码下载,需要在本地编译。因为没有看到有 SOLARIS10 版本的“ .so ”文件,在这里使用其源码进行编译。 源码下载地址: http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.15/jakarta-tomcat-connectors-1.2.15-src.tar.gz 二进制下载地址: http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/ 2.2编译 mod_jk 因为要用到 Solaris 的编译工具,所以要先安装 Sun Studio11。Sun Studio 11 安装程序和安装手册在 Sun 的网站可以免费下载而且安装方式是“下一步 ”型的,在这里就不多说了。接着要把下载的文件进行解压: #gunzip jakarta-tomcat-connectors-1.2.15-src.tar.gz #tar xvf jakarta-tomcat-connectors-1.2.15-src.tar #cd jakarta-tomcat-connectors-1.2.15-src 设置环境变量: PATH,LD_LIBRARY_PATH 等 #export PATH=$PATH: /usr/ucb:/usr/ccs/bin (含有编译工具和 make) #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/lib:/etc/lib (含有可能用到的库) 开始编译 mod_jk #cd jk/native 相对于 jakarta-tomcat-connectors-1.2.15-src #./configure –with-apxs=/usr/apache2/bin/apxs #make 在 make 的过程中产生了下面的错误信息,这是由于在生成了 mod_jk.so 文件后要拷到 apache的特定路径的过程中发生了错误。没有关系,最有用的 mod_jk.so 已经生成了。存放在相对于 jakarta-tomcat-connectors-1.2.15-src 目录的下的 jk/native/apache-2.0/.libs 目录中。 500)this.width=500'>   编译 mod_jk 比较繁琐而且也容易出问题,现在将编译好的文件放在网上。需要的朋友可以直接下载使用(但不保证任何机器都能使用)。 For Solaris10 sparc:http://www.cublog.cn/u/15296/upfile/060316125507.gz For Solaris10 x86 :http://www.cublog.cn/u/15296/upfile/060316121254.gz 配置 mod_jk 到 Apache 3.1先把 mod_jk.so (在 jk/native/apache-2.0/.libs 目录 )文件拷贝到 Apache 的 libexec 目录下面。 #cp mod_jk.so /usr/apache2/libexec/. 3.2接着修改 Apache 的配置文件,使 Apache 能够将需要 tomcat 处理的文件通过 mod_jk 进行转发。有三处需要修改,见图。 #vi /etc/apache2/httpd.conf 并在 LoadModule 模块的最后加入一行 LoadModule jk_module libexec/mod_jk.so 500)this.width=500'> 找一个合适的位置(任何地方),将下面的信息添加上去 500)this.width=500'> 还要把需要转发的文件类型和路径配置好。具体的位置是在 DocumentRoot 指示器下。如下面已 JkMount 开头的两行。 500)this.width=500'> 3.3编写 workers.properties 文件 这个文件用力定义与 Apache 进行交互的 Tomcat 的配置信息。具体如下: 500)this.width=500'> 可以看出 worker1 和 worker2 用来配置 tomcat 的信息, loaderbalancer 用来配置负载均衡信息。下面的表格对涉及到的属性进行了说明。更多的属性说明可以参见 worker文件的文档。 500)this.width=500'> 3.4验证安装 mod_jk 之后 Apache 仍然可用。 按照 1.5,1.6 中的方式进行验证即可。 配置 Tomcat ,实现负载均衡 4. 1Tomcat 的获取和安装 本文使用了从 tomcat 官方网站上提供的二进制文件打包 http://apache.roweboat.net/tomcat/tomcat-5/v5.5.16/bin/apache-tomcat-5.5.16.tar.gz 。将其拷贝的各个 worker 主机的安装目录并进行如下操作就算安装完成。 #gunzip apache-tomcat-5.5.16.tar.gz #tar xvf apache-tomcat-5.5.16.tar #mv apache-tomcat-5.5.16 tomcat551 4.2创建一个空测试 web 应用并创建一个文件测试 JSP 页面放在其下: #mkdir –p $TOMCAT_HOME/webapps/testload 其中 $TOMCAT_HOME 是 Tomcat 的安装目录。 #vi $TOMCAT_HOME/webapps/testload/index.jsp 分别填写如下 worker1 的 index.jsp 源代码 <html> <body bgcolor="red"> Session ID:<%=request.getSession().getId()%> </body> </html> Worker2 的 index.jsp 源代码 <html> <body bgcolor="blue"> Session ID:<%=request.getSession().getId()%> </body> </html> 4.3修改 Tomcat 的配置文件,以便与 Apache 进行请求转发 #vi $TOMCAT_HOME/conf/server.xml 修改其中的几处,如下图 500)this.width=500'> 将其中的 port 分别改为“ 10008 ”和“ 10010 ”并将下面的这段注释掉(即将这段代码放在 <!-- --> 之间)。 500)this.width=500'> 配置 Tomcat 中 Ajp13 参数,将 port 分别改为“ 10009 ”和“ 10011 ”。 500)this.width=500'> 配置 Tomcat 中的 AJP Engine 。 500)this.width=500'> 将上面图中的信息分别修改为 500)this.width=500'> 500)this.width=500'> 将测试 web 应用的加到 Context 中(在文件的尾部, </Host> 前面) 500)this.width=500'> 4.4验证负载均衡 按前面的方法先启动 Apache ,之后分别启动 Tocmat (别忘了先设置 JAVA_HOME) #$TOMCAT_HOME/bin/startup.sh 用 #ps –ef|grep java 查看一下 Tomcat 是否已经启动 在不同的机器打开几个浏览器查看 http://IP:Port/ index .jsp,Apache 将会把请求转发给这两个 Tocmat 进行处理。如下图,可以看出对用户的请求是由多个 Tomcat 分担完成的。其中红色表明用户的请求是由 worker1 进行处理和响应的,蓝色则表明用户的请求是由 worker2 负载响应的。页面中也打印出了请求的 SessionId ,可以用刷新来看看是否会变( 在 Session 没有过期, Tomcat 或 Tomcat 中的 Context 没有刷新的情况下这个值是不能变化的 )。这样就可以验证这种负载均衡方式是不是能保持 Session (也可以打开新的浏览器来看一下是否有相同的 SessionId 产生)。 500)this.width=500'> 500)this.width=500'> 参考资料: Mod_jk 文档: http://tomcat.apache.org/connectors-doc/index.html Workers 文件说明: http://tomcat.apache.org/connectors-doc/config/workers.html Tomcat5.5 文档: http://tomcat.apache.org/tomcat-5.5-doc/index.html Apache2 的文档: http://httpd.apache.org/docs/2.0/


阅读全文(1910) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.723 second(s), page refreshed 144808617 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号