替换原因:
公司目前几乎全部是开源平台,而mod_weblogic是weblogic server内带的一个tomcat连接器,不提供源码,要使用不同平台的mod_weblogic必须要到不同平台的weblogic server中拿出来,可能会有商业授权的问题。而经过前期测试,mod_jk实际上已经很稳定,足以替换mod_weblogic。
替换过程:
替换过程主要有以下几步:
<!--[if !supportLists]-->1、 <!--[endif]-->选择jk版本,编译相应平台二进制文件
<!--[if !supportLists]-->2、 <!--[endif]-->修改apache配置
<!--[if !supportLists]-->3、 <!--[endif]-->修改tomcat配置
<!--[if !supportLists]-->4、 <!--[endif]-->在测试环境中调试,微调部分参数,提高性能和稳定性。
具体下面一一说明。
<!--[if !supportLists]-->一、 <!--[endif]-->选择jk版本,编译相应平台二进制文件
我们目前选择的版本是1.2.26,是jk最新的稳定版本(linux平台子版本号为偶数表示是一个稳定版本)。编译过程也比较简单,下面以我在测试平台编译过程为例。
首先下载tomcat-connectors-1.2.26-src.tar.gz包到本地,我的目录是/usr/zgl/install,然后解压到本地,生成目录tomcat-connectors-1.2.26-src,cd tomcat-connectors-1.2.26-src/native,然后:
# ./configure --with-apxs=/usr/zgl/httpd/bin/apxs
/usr/zgl/httpd是apache目录。
# make && make install
过程中不出错就ok啦,当然保险起见,到apache的modules目录下看看mod_jk.so存在与否,最好在看看生成时间,如果没有问题,编译过程就结束了。
<!--[if !supportLists]-->二、 <!--[endif]-->修改apache的httpd.conf配置
首先当然是将httpd.conf中的weblogic部分的配置注释掉(^_^)。
jk的配置可以分为两个部分:基本配置和worker配置。下面简单介绍一下我们目前使用到的配置参数以及过程中遇到的问题。
基本配置项目如下:
配置项
说明
LoadModule jk_module /usr/alibaba/httpd/modules/mod_jk.so
告诉apache如何加载jk
JkLogFile "|/usr/local/sbin/cronolog ${exodus2_output}/logs/jk_logs/mod_jk.log.%w"
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
日志设置,使用cronolog滚动日志,日志级别为error,日志日期格式等
JkOptions +ForwardURICompatUnparsed
这是最重要的设置,表示jk如何处理uri,是否需要对uri进行编码转换等。在exodus中,uri编码转换全部由webx框架处理,所以这儿选择+ForwardURICompatUnparsed,表示jk不parse uri,直接传递给tomcat。forward选项一个有4个,1.2.24后缺省是+ForwardURIProxy,这个选项会对uri进行部分重新编码,如果在apache内需要对uri进行编码转换的请使用这个选项,并严格测试。
JkOptions +ForwardDirectories
这个选项告诉apache将目录相关uri交给tomcat解析,如果设为false,apache会到其缺省目录中寻找文件。
JkMountCopy All
表示某个VirtualHost是否继承全局mount设置,如果在每个VirtualHost中设置为on,表示这个VirtualHost会复制所有全局mount设置到这个VirtualHost,这里设置为all,表示所以mount设置适用于所有VirtualHost
JkShmFile ${exodus2_output}/jk.shm
用于LoadBalance和status的共享内存设置,只适用于*nix平台,我们没有使用LoadBalance,可能可以删除这个选项。
JkMount /offer/* localnode
表示将所有/offer开始的uri映射给localnode处理,localnode是一个worker,代表一个tomcat实例。
worker配置
因为jk支持LoadBalance,一个jk可以连接多个tomcat并进行负载均衡,所以一个jk配置文件中会指定多个tomcat实例,每个tomcat实例称为一个worker,worker配置参数众多,很多都对性能有很大影响,需要仔细调试。
责任编辑:小草