A.参考文献
……
……
互联网
写在前面的话:
由于本人也是
JBOSS
的初级用户,
JBOSS
又很强大,在工作中也是摸索积累的过程,因此总结难免有所错误或纰漏,但已经是尽我的努力,力求正确,如有错误或纰漏,敬请指正。
文档作者:周怀进
联系方式
:
目 录
1 .Apache2.0及连接器jk1.2的编译部署
我们需要软件及其版本说明:
a)
apache服务器:
httpd-2.0.54
b)apache/tomcat连接器:jk1.2.14,这里选用1.2.*版本,虽然有jk2.0,但据相关文档介绍,jk2.0已不再开发,而jk1.2.*版本使用范围很广,久经考验了,稳定性有保障.两个版本系列对应的配置也有很大的变化,故而这里选用jk1.2系列
下载地址:
安装apache本文档依据的版本是
httpd-2.0.54,下载Unix Source,下文介绍主要以linux OS为主,间或会介绍一点windows下安装的细节。
我们的目标是用apache来做前端的web服务器,后端用jboss3.2.6,实现负载均衡。
下载完源程序包之后,放到一个临时目录中,如 /home/software/:
#cd /home/software/
#tar zxvf httpd-2.0.54.tar.gz
#cd /home/software/httpd-2.0.54
#./configure --enable-MODULE=shared --enable-so --with-mpm=worker
#make
#make install
参数解释:
--enable-
MODULE
=shared
:该参数是使得相关的模块编译为可动态加载模块(DSO模式),如果不选用该选项,apache默认的选项是:
--enable-
MODULE
=static,
表示将相关的模块静态编译。
两者的区别是:前者使得可以需要更新、重编译某模块
(
核心模块不受限于这种模式,如
core
、
mod_so)
时,只需单独编译该模块即可,而不需重新编译整个
apache source code
,做到单独升级。前者弊端是导致
apache
启动时慢
20
%左右,在运行阶段慢
5
%左右
,
另外
DSO
模式不是所有
OS
都支持的,和软件环境有关系。
--enable-so
:
该参数表示支持用
mod_so
模块提供的功能
,
用
LoadModule
在
httpd.conf
文件或包含的
conf
文件中动态加载某个模块。
--with-mpm=worker
:该参数是配置apache将以何种模式编译的。Apache网站文档指出不同操作系统下的不同的默认模式.
BeOS
| |
Netware
| |
OS/2
| |
Unix
| |
Windows
|
在安装完
apache
后,在类
unix OS
下,可以在
./bin
目录下用
./httpd –l
来看到编译时指定的
mpm
参数,他们对应着不同的
.c
模块。
在
windows
环境下,可以用
./bin/Apache –l
来查看相关被编译的模块。
Win
环境下默认是
mpm_winnt,
则可以看到
:
C:\Apache Group\Apache2\bin>apache -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
各模式的区别,更具体的描述请参见
http://httpd.apache.org/docs/2.0/mpm.html
,下面只简单说明一下,
worker
模式是以
process/thread
混和模式运行的,如果
WEB
服务器的期望负载较大的话,则推荐使用
worker
模式,如果需要一个稳定性考虑为优先的服务器的话,推荐使用
prefork
模式
,
同样的负载条件下,
prefork
模式的
apache
占用的内存会大很多。
默认安装的路径为
: /usr/local/apache2/,
如果要指定安装路径,则用参数
./configure --prefix=
PREFIX
来指定安装路径,
PREFIX
为指定的绝对路径。
可以用
PREFIX
/bin/apachectl start
来测试是否可以正常启动服务。
可以用
PREFIX/bin/httpd –t
来测试
http.conf
的语法是否合法。
下载完源程序包之后,放到一个临时目录中,如 /home/software/:
1、#cd /home/software/
2、#tar zxvf jakarta-tomcat-connectors-1.2.14.1-src.tar.gz
3、#cd /home/software/jakarta-tomcat-connectors-1.2.14.1-src/jk/native
4、# ./configure --with-apxs=/usr/local/apache2/bin/apxs
5、#make
6、# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules
查看…/native目录,会看到有apache-1.3以及apache-2.0目录,在第4步,用--with-apxs参数来指定扩展程序apxs的位置,make程序会根据提供的apxs的版本来辨别需要针对apache的哪个版本来生成mod_jk.so,如本文所示例,程序将知道需要为apache2.0生成mod_jk.so,因此编译工作将会在...jk/native/apache-2.0中进行,浏览编译日志信息会看到这些信息。
第6步是将编译后的so拷贝至apache的安装路径的modules目录中,应该根据安装路径去调整上述脚本中的路径。
另外可以将mod_jk.so静态连接到apache2.0中,然后再一次编译apache2.0,在上述脚本中加上参数:
./configure --with-apache=/home/software/httpd-2.0.54
具体请参阅:
以上工作就算结束了编译、安装工作,下面将进行参数调整,部署工作。
该文件的路径位于$APACHE-HOME/conf
上述编译过程中我们选用的
worker
模式,因此我们将修改
worker
模块的配置
<IfModule worker.c>
StartServers
4 #
最初建立进程的数量
ServerLimit
24 #
进程建立的最大数量,硬限制
ThreadLimit
128
#
每一进程能创建线程的最大数量,硬限制,该参数建议
#
和
ThreadsPerChild
一致,如果
ThreadLimit > ThreadsPerChild
的话,会造成不
##
必要的内存消耗。
MaxClients
3072 #
同时可以得到处理的客户端的最大数量
MinSpareThreads
100 #
所有进程中空闲线程的总数最小数值
MaxSpareThreads
200
#
所有进程中空闲线程的总数最大数值
ThreadsPerChild
128 #
每个子进程可以建立的固定数量的线程
MaxRequestsPerChild 0
#
用于控制服务器建立和结束进程的频率
,
为
0
表示没有
#
限制,但在
solaris OS
下该值可能会出错,可以设置为
1000
或
2000
。根据系统
#
的并发负载吧。
</IfModule>
在httpd.conf文件的最后一行加上:
Include conf/mod_jk2.conf
另外还需修改
#ServerName www.example.com:80为
ServerName 127.0.0.1:80
1.4.2.mod_jk2.conf的所有内容
新建该文件,并将该文件置于$APACHE-HOME/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.
#
以下命令意味着所有的图片将由
APACHE
解析
JkUnMount /*.jpg loadbalancer
JkUnMount /*.gif loadbalancer
JkUnMount /*.swf loadbalancer
JkUnMount /*.bmp loadbalancer
JkUnMount /*.png loadbalancer
在上述配置中,是配置所有图片由
APACHE
来解析,因此我们需要将项目中的所有图片均拷贝到
$APACHE-HOME/htdocs/
下,如果你的部署的项目
(
应用
)
,在访问时需要输入前缀
,
如
http://www.DDD.com/TestCrm/login.do
,则请注意,在
$APACHE-HOME/htdocs/
下需要建一个目录“
TestCrm
”
,
然后按照你项目中图片所在的路径,连同路径中所有目录一并考入
TestCrm
目录,例如你的图片位于
…./TestCrm.war/images/1.jpg,
那么为了
APACHE
能找到图片,则你在
APACHE
中的图片位置应是
$APACHE-HOME/htdocs/TestCrm/images/1.jpg
。
新建该文件,并将该文件置于$APACHE-HOME/conf
请注意:下列配置中的
server105,
server106
等紫色的斜体字符串都是根据部署的
jboss
的信息来部署的
,
其中
server105,
server106
需要在
jboss
的相关配置中修改,具体详见下文介绍。对应的
IP
地址应改为
JBOSS
所在的
server IP
。
#以下为
workers2.propertie的内容
worker.list=loadbalancer,server105,server106
# Define the first node...
worker.server105.port=8009
worker.server105.host=192.10.12.105
worker.server105.type=ajp13
worker.server105.lbfactor=1
#worker.server105.local_worker=1
worker.server105.cachesize=100
# Define the 2nd node...
worker.server106.port=8009
worker.server106.host=192.10.12.106
worker.server106.type=ajp13
worker.server106.lbfactor=1
#worker.server106.local_worker=1
worker.server106.cachesize=100
# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=server105,server106
worker.loadbalancer.sticky_session=1
说明:
worker.loadbalancer.sticky_session=1
参数的设定,意味着一旦用户通过
APACHE
连接到某台
JBOSS SERVER(
创建了
session)
,则只要在该台
JBOSS
服务正常的情况下,该用户所有的请求都将会发送至该
JBOSS SERVER
。
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
如果启动时报错,提示80端口被绑定,请注意有可能是在装linux OS时选装了apache并且启动了服务,请直接在命令行用apachectl stop ,停止原先的服务,其存在路径一般为/usr/sbin/apachectl
2.JBOSS3.2.3/3.2.6部署及配置修改
$JBOSS-HOME/server/
下有
3
个目录,
all/default/minimal
,它们是表示
3
种配置,全部的配置、默认配置、最小配置,我们在启动
JBOSS
服务时,可以指定
run –c all
表示是启动
all
配置
(
将会加载所有服务
)
;
run
表示是以默认配置启动
;
run –c mimimal
表示是启动
mimimal
配置。这三者所加载的服务数量不同,具体区别可查阅
JBOSS
相关文档,你还可以自己定义一个配置,如
test
,属于高手去为了性能上的考虑了,那这份文档对你的帮助不会太大了。
如果你确定了
JBOSS
服务启动的配置,那么你的应用及相关配置就需要部署在对应的目录下的相关的路径下,如
all/
,
default/
,
minimal/
下。
为了描述方便,以下描述将以
JBOSS3.2.6
版本,
default
配置为例,如果你以别的配置启动,则在对应的目录下寻找或配置相关文件。
1
、相关
DTD
定义文件位于
$JBOSS-HOME/docs/dtd
,在其下的文件中可以查阅某个
XML
配置文件中某个元素或属性的意义。
2
、数据源配置文件的路径,
$JBOSS-HOME/server/default/deploy
,文件格式必须是
*-ds.xml
的样式。不同的数据库配置参数可参考
$JBOSS-HOME/docs/examples/jca/
下的示例文档。有关参数的细节在下面会有一定的描述。
3
、公共的
jar
包我们可以放在
$JBOSS-HOME/server/default/lib
下,如数据库的
JDBC jar,log4j.jar
等,如果这些
JAR
已经在该
lib
下放置了,那么我们的应用
WEB-INF/lib
下不应该再放置,否则
JBOSS
也会将他们再一次加载,白白占用内存。
4
、配置日志的文件,
log4j.xml
位于
$JBOSS-HOME/server/default/conf
下,具体配置下文还会有一点介绍
5
、
$JBOSS-HOME/server/default/work
下存放的是
JSP
编译后的
.java
及
.class
文件
,
如果调试
JSP
时出错了,可以到该目录下
(
一级级去翻吧
)
去找对应的文件,调试问题。还有个小
TIPS
,有时我们明明把一个
JSP
更新到对应的目录里了,可是去刷新页面时,内容还是旧的,为了解决该问题,我们可以到
work
目录下,将对应的
.java
及
.class
文件删了,再刷新即可,这个原因不好推测,有时可以自动刷新,有时不行。单个的
TOMCAT
都能自动刷新,不知为何集成到
JBOSS
里却有时不行。还需注意的事,你在清除旧的
java
、
class
文件时,不能为了省事,而直接删除目录,否则刷新时会报错的,等着你的就是要重启
JBOSS
服务了。
6
、
$JBOSS-HOME/server/default/log
下存放的是日志文件,默认的
log4j.xml
配置是将日志输出到该文件夹下的
server.log
文件,可以去查看信息进行调试。
7
、我们的应用一般部署在
$JBOSS-HOME/server/default/deploy/jbossweb-tomcat50.sar/
下,建个
TestCrm.war
目录,把我们的整个应用部署在该
.war
目录下,这样
JSP
、
Servlet
将由
tomcat
引擎来解析处理。
8
、配置应用的
WEB
服务的端口号及参数。
JBOSS3.2.6
是在
…./ deploy/jbossweb-tomcat50.sar/server.xml
中,自己找
8080,
修改为你想设定的端口即可。
JBOSS3.2.3
是在
…/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml
中配置。
2.2.1配置负载均衡,调整参数
需要修改配置文件以适应
apache
中配置的“
session sticky
配置
”。如下:
Jboss3.2.3
修改
:
%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat41.sar/META-INF/ jboss-service.xml
修改
<Engine name="MainEngine" defaultHost="localhost">
为
<Engine name="MainEngine"
jvmRoute="
server106
"
defaultHost="localhost">
与上述
workers2.properties
定义的内容一致。
Jboss3.2.6
修改
:
%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat50.sar/server.xml
修改
<Engine name="jboss.web" defaultHost="localhost">
为:
<Engine name="jboss.web"
jvmRoute="
server106
"
defaultHost="localhost">
与上述
workers2.properties
定义的内容一致。
Jboss4.0
的修改和
Jboss3.2.6
的一致。
如上配置后,就可以实现
apache+jboss
的负载均衡。
2.2.2配置集群(Clustering),调整参数
如果我们要想使得几台JBOSS应用服务器互为备份(仅限于SESSION),在群内一台JBOSS服务器down掉的时候,用户不受影响,继续以登陆用户身份进行工作,则我们需要配置Clustering,并启动相关服务。下面将描述相关配置项:
1)、修改应用APP的web.xml:
Jboss3.2.6:
../default/deploy/jbossweb-tomcat50.sar/Test.war/WEB-INF/web.xml
Jboss3.2.3
:
../default/deploy/jbossweb-tomcat41.sar/Test.war/WEB-INF/web.xml
修改内容如下:
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd ">
<web-app>
…….
…..
….
<distributable/>
</web-app>
2)、需要启动一个服务cluster-service.xml
如果是以run -c all 来启动jboss服务,则默认是将cluster服务启动,无需做什么配置工作,只需确认相关文件是否存在即可。
确认…/server/all/deploy/下存在cluster-service.xml文件;
确认…/server/all/lib/下存在jgroups.jar文件,如果没有则重新安装jboss。
如果应用程序部署在default配置下,则需将上述的两个文件分别拷入
…/server/default/deploy/、…/server/default/lib/目录下。
配置完毕,如有异常,请查看日志。更详细的信息请参阅JBOSS.com上提供的admin.pdf。
2.2.3配置数据源,调整参数
各种类型的数据库,都可以根据
%JBOSS_HOME%/docs/examples/jca/
下的示例文档配置,更详细的参数配置可参阅
JBOSS.com
上的文档或
…/docs/dtd/
下的
dtd
定义来配置。
下面以
oracle
为例,提供我们在生产机环境的配置。
该
xml
文件需要被部署在
%JBOSS_HOME%/server/all(or default)/deploy/
下,对应的数据库驱动程序
jar
需
copy
至部署的配置的
lib
下,如
…all/lib/
或
…default/lib/
下。
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/TestDataSource</jndi-name>
<connection-url>jdbc:oracle:thin:@192.168.1.2:1521:test</connection-url>
<!--<connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>-->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>test</user-name>
<password>test</password>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
<!-- Checks the Oracle error codes and messages for fatal errors -->