免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5236 | 回复: 1
打印 上一主题 下一主题

[tomcat] jboss/tomcat动静分离技术实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-04 10:57 |只看该作者 |倒序浏览
本文由foway完成于2007年.欢迎转载,但请保留本文连接.谢谢.

所谓动静分离技术,是互联网上常用的一种优化技术。将变化不频繁的资料如图片文件称为静态;将时常变化资料如通过JDBC/ODBC等驱动程序调用数据库的动作称为动态。动态一般是不能被squid缓存下来的,静态的是可以被squid缓存的。
如果将静态的资料由处理静态文件速度快的apache等服务器来执行,动态的资料由j2ee服务器来执行,如此速度就会快很多了。所以J2EE服务器优化除了j2ee本身服务配置参数调整之外还需要跟apache集成。
那么有没有办法实现呢?
每个j2ee产品都支持动静分离技术:主要是跟apache协同实现的。如jboss/tomcat 利用mod_jk.so模块与apache协同工作来实现动静分离;weblogic通过mod_wl_2.so模块与apache协同工作来实现动静分离.

Mod_JK 动静分离技术

mod_jk.so的动态加载到apache是需要指令apxs的,由于RHEL5中自带apache2没有apxs,所以我们需要重新编译一个apache.
假设下载的软件在:
http://apache.mirror.phpchina.co ... s-1.2.26-src.tar.gz
http://java.sun.com/javase/downloads/index_jdk5.jsp
http://apache.mirror.phpchina.co ... omcat-5.5.26.tar.gz
http://apache.mirror.phpchina.com/httpd/httpd-2.2.8.tar.gz
http://downloads.sourceforge.net ... 094131&big_mirror=1

[root@foway ~]#ls /var/ftp/pub/download
httpd-2.2.8.tar.gz
tomcat-connectors-1.2.26-src.tar.gz
[root@foway ~]#cd /var/ftp/pub/download
[root@foway ~]#tar xzvf httpd-2.2.8.tar.gz
[root@foway ~]#tar xzvf tomcat-connectors-1.2.26-src.tar.gz
[root@foway ~]#cd httpd-2.2.8
[root@foway ~]#./configure \
--prefix=/usr/local/apache2 --enable-so --enable-ssl
[root@foway ~]#make&&make install
[root@foway ~]#cd ../tomcat-connectors-1.2.26-src/native
[root@foway ~]#./configure \
--with-apxs=/usr/local/apache2/bin/apxs
[root@foway ~]#make&&make install
[root@foway ~]# ls /usr/local/apache2/modules/
httpd.exp  mod_jk.so

当看到mod_jk.so在apache模块目录下时,则编译的mod_jk已成功.
下面是配置mod_jk了.
[root@foway ~]#echo “Include conf/extra/mod_jk.conf” >>/usr/local/apache2/conf/httpd.conf
[root@foway ~]#cd /usr/local/apache2/conf/extra
编辑如下内容到mod_jk.conf文件中
[root@foway ~]#vi mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers2.properties
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkMount /* loadbalancer#apache will serve the static picture.
JkUnMount /*.jpg loadbalancer
JkUnMount /*.gif loadbalancer
JkUnMount /*.swf loadbalancer
JkUnMount /*.bmp loadbalancer
JkUnMount /*.png loadbalancer
保存退出.
[root@foway ~]# cd /usr/local/apache2/conf
编辑如下内容到workers2.properties文件中
[root@foway ~]#vi workers2.properties
worker.list=loadbalancer
#set properties for loadbalancer (ajp13)
worker. loadbalancer.type=ajp13
worker. loadbalancer.host=localhost
worker. loadbalancer.port=8009
worker. loadbalancer .lbfactor=1
#worker. loadbalancer.cachesize=10
#worker. loadbalancer.cache_timeout=600
worker. loadbalancer.socket_keepalive=1
#worker. loadbalancer.reclycle_timeout=300
保存退出.
[root@foway ~]#
cp /home/tomcat-connectors-1.2.26-src/conf/uriworkermap.properties ./
[root@foway ~]#/etc/init.d/httpd stop
[root@foway ~]#/usr/local/apache2/bin/apachectl start

到此mod_jk配置已完成.下面是配置j2ee服务器了:tomcat/jboss
Tomcat:
[root@foway ~]#ls /home/jdk*
/home/jdk-1_5_0_07-linux-i586-rpm.bin
[root@foway ~]#/home/ jdk-1_5_0_07-linux-i586-rpm.bin
按照提示安装即可
[root@foway ~]#ls /usr/java/
jdk1.5.0_07
这个是jdk1.5.0_07的rpm安装后的jdk所在路径.
[root@foway ~]#ls /home/apache-tomcat-5.5.26.tar.gz
/home/apache-tomcat-5.5.26.tar.gz
[root@foway ~]#cd /home;tar xzvf apache-tomcat-5.5.26.tar.gz
[root@foway ~]#mv /home/apache-tomcat-5.5.26 /var/tomcat5
[root@foway ~]#head /var/tomcat5/bin/startup.sh
#!/bin/sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
#
# $Id: startup.sh 385888 2006-03-14 21:04:40Z keith $
# -----------------------------------------------------------------------------
export JAVA_HOME=/usr/java/jdk1.5.0_07
# Better OS/400 detection: see Bugzilla 31132

红色部分就是需要你添加到startup.sh中的内容,其他默认不改变.
添加完成后:
[root@foway ~]#/var/tomcat5/bin/startup.sh
Using CATALINA_BASE:   /var/tomcat5
Using CATALINA_HOME:   /var/tomcat5
Using CATALINA_TMPDIR: /var/tomcat5/temp
Using JRE_HOME:       /usr/java/jdk1.5.0_07
好,看到这个信息则tomcat安装已成功了.

测试:
图形界面中打开mozilla访问:
http://127.0.0.1
即可看到与http://127.0.0.1:8080看到的一样的内容.
恭喜你:apache+mod_jk+tomcat动静分离已实现了.
Jboss:
[root@foway ~]#ls /home/jboss*
/home/jboss-4.2.2.GA.zip
[root@foway ~]#cd /home;unzip jboss-4.2.2.GA.zip
[root@foway ~]#mv jboss-4.2.2.GA /var/jboss4
[root@foway ~]#head /var/jboss4/bin/run.sh
#!/bin/sh
### ====================================================================== ###
##                                                                          ##
##  JBoss Bootstrap Script                                                  ##
##                                                                          ##
### ====================================================================== ###
export JAVA_HOME=/usr/java/jdk1.5.0_07
### $Id: run.sh 64199 2007-07-23 15:57:38Z cazzius $ ###

DIRNAME=`dirname $0`

红色部分就是需要你添加到run.sh中的内容,其他默认不改变.
添加完成后:
先关闭tomcat服务,然后启动jboss服务
[root@foway ~]#head /var/tomcat5/bin/shutdown.sh
#!/bin/sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
#
# $Id: shutdown.sh 385888 2006-03-14 21:04:40Z keith $
# -----------------------------------------------------------------------------

export JAVA_HOME=/usr/java/jdk1.5.0_07
# resolve links - $0 may be a softlink
PRG="$0"
确认有红色部分在shutdown.sh中后执行
[root@foway ~]# /var/tomcat5/bin/shutdown.sh
[root@foway ~]#/var/jboss4/bin/run.sh start
当看到如下信息
14:00:13,775 INFO  [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
14:00:15,336 INFO  [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
14:00:15,424 INFO  [Server] JBoss (MX MicroKernel) [4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)] Started in 2m:58s:65ms

表示jboss已经启动起来了.
测试: 图形界面中打开mozilla访问:
http://127.0.0.1
即可看到与http://127.0.0.1:8080看到的一样的内容.
恭喜你:apache+mod_jk+jboss动静分离已实现了.

上面的都是在单机上实现的,也就是说还没有做j2ee集群,如果是j2ee集群,mod_jk.so又该如何配置呢?

Mod_jk动静分离集群配置:
要实现集群,首先要规划好集群成员,与调度服务器,假设我们已刚才所配置的单机为母机,新增2台服务器作为运行j2ee程序的成员. 除此之外我们首选jboss作为jsp程序的解析中间件服务器.
那么我们目前需要对新的2台按照母机一样的配置apache+mod_jk+jboss了.
配置完成后每个j2ee成员只需要修改一个文件: workers2.properties即可.
假设3台的主机为:stu10.uplooking.com stu11.uplooking.com stu12.uplooking.com
那么修改3台主机中的workers2.properties文件为如下内容:
[root@foway ~]#cat /usr/local/apache2/conf/workers2.properties
worker.list=loadbalancer,server10,server11,server12
# Define the first node...
worker.server10.port=8009
worker.server10.host=192.168.0.10
worker.server10.type=ajp13
worker.server10.lbfactor=1
#worker.server10.local_worker=1
worker.server10.cachesize=100
# Define the 2nd node...
worker.server11.port=8009
worker.server11.host=192.168.0.11
worker.server11.type=ajp13
worker.server11.lbfactor=1
#worker.server11.local_worker=1
worker.server11.cachesize=100
# Define the 3nd node...
worker.server12.port=8009
worker.server12.host=192.168.0.12
worker.server12.type=ajp13
worker.server12.lbfactor=1
#worker.server12.local_worker=1
worker.server12.cachesize=100
# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=server10,server11,server12
worker.loadbalancer.sticky_session=1

修改完成后就可以启动集群了,操作如下:
分别在3台上启动httpd服务
Stu10:
[root@foway ~]#/usr/local/apache2/bin/apachectl start
Stu11:
[root@foway ~]#/usr/local/apache2/bin/apachectl start
Stu12:
[root@foway ~]#/usr/local/apache2/bin/apachectl start
分别在3台上启动jboss集群服务:
Stu10:
[root@foway ~]#/var/jboss4/bin/run.sh –c all
Stu11:
[root@foway ~]#/var/jboss4/bin/run.sh –c all
Stu12:
[root@foway ~]#/var/jboss4/bin/run.sh –c all

测试:
在可以访问到stu10-stu12的电脑上:
访问如下网址:
http://stu10.uplooking.com
http://stu11.uplooking.com
http://stu12.uplooking.com
看到的都是jboss的欢迎页面
在测试:
关闭stu10上的jboss服务后
在可以访问到stu10-stu12的电脑上:
访问如下网址:
http://stu10.uplooking.com
http://stu11.uplooking.com
http://stu12.uplooking.com
看到的都是jboss的欢迎页面

关闭stu11上的jboss服务后
在可以访问到stu10-stu12的电脑上:
访问如下网址:
http://stu10.uplooking.com
http://stu11.uplooking.com
http://stu12.uplooking.com
看到的都是jboss的欢迎页面

一定要仔细测试只要有一个jboss服务在运行,3台电脑上的http://ip:80看到的都是jboss的欢迎页面则恭喜你:mod_jk动静分离集群ajp协议层配置已成功了.下面是对http协议做集群处理了:
http协议的集群可以采用lvs或haproxy或mod_proxy_http或F5等来实现.
到此一个完整的apache+jboss的集群全部配置好了.

当然在实际的生产应用中,你还需要将apache的
”DocumentRoot” 指定的目录
与jboss中的j2ee程序工作目录相一致.以方便程序与图片的布局,同时也方便程序员调试.
注意:
在集群默认的jboss4.2.2.GA的j2ee程序工作目录:
/var/jboss4/server/all/deply/jboss-web.delpoyer/ROOT.war/

注意:本文操作都是在RHEL5.2上.如果在RHEL4上操作可能你需要将httpd的版本改用2.0的版本。

论坛徽章:
0
2 [报告]
发表于 2008-08-25 09:25 |只看该作者
不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP