前段时间因为一点关系,接触到apache动态进负载均衡的实验,很自然想到apache配合其他软件使用完成需求,网上找了下,还是比较多的apache整合tomcat的。所以我就将做到这个实验从头到尾思路都写出来,分享下心得,也希望各位大拿们指导下~
因为生产环境不可能随时变化,所以管理员们只能不断去优化,所以在真不改变硬件的情况下最大程度利用资源就会导致许多新的技术诞生,apache整合tomcat也是就是其中之一。
目的:现有硬件条件下实现更大的负载
选用的原因:
Apache优势有:
--功能强大:apache为模块化的设计,通过扩展模块可以扩展很多功能。
--配置简单:apache的配置文件也比较简单易懂
--速度较快:处理静态页面效率搞,并且应对大规模并发连接请求
--性能稳定:apache在搞负载请求下性能表现依旧不俗。
但是apache的缺点:
--只能支持静态页面,对jsp,php等不支持
但是作为市场份额超过半数的选择,选择apache并不奇怪。
Tomcat的优势:
--作为apache软件基金会和sun支持的项目,有着最纯真的sun更新代码的体现, serlet和jsp的容器,对于动态页面支持非常好
--跨平台性非常好,只要有JDK的支持就可以运行
Tomcat缺点:
--支持静态页面效率不如apache
--可配置型,稳定性都不如apache
综上将apache和tomcat整合起来应该是优势互补。况且本身apache和tomato还都是apache软件基金会的子项目呢,
整合原理:apache本身和tomcat都是开源的,可单独作为web服务器的软件,所以整合他们需要另外一些东西进行二者之间通信,相对于apache来说等同扩展功能,所以开源爱好者开发出了可利用的模块,这里主要介绍的有4个模块。
--mod_jk2.so:早期的连接器,在动静态页面过滤上使用正则表达式,配置较灵活,但是现在已经没有开发人员的支持了,版本就此停止了。
--mod_jk.so:上面的取代版本,支持apache 1.x和2.x版本,大多都是用这个模块
--http-proxy:apache2.2版本出现后出现,可以实现双向代理,功能强大,只要打开tomcat的http功能,然后用apache的proxy代理功能将动态请求交给tomcat处理,静态自己处理即可
--proxy-ajp:专门针对tomcat整合开发,ajp协议专门代理对tomcat请求,执行效率最高。
介绍完了之后进行操作步骤了,首先看下环境
环境:RHEL 5.4
Httpd-2.2.17.tar.gz
Apache-tomcat-5.5.33.tar.gz
tomcat-connectors-1.2.31-src.tar.gz
JDK-6u25-dlj-linux-i586.bin
下面就是具体的安装步骤啦
1/首先上传相应的软件包到服务器上
2/下面就是安装相应的辅助软件包,包括gcc编译器,libtool
3/下面就进行apache的安装,安装过程就不截图了,这里把步骤送上
[root@mail ~]#tar -zxvf httpd-2.2.17.tar.gz
[root@mail ~]#cd httpd-2.2.17
[root@mail ~]#./configure --prefix=/usr/local/apache \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so
[root@mail ~]#make ;make install
这里有加载模块的选项解释下,prefix是安装路径,--enable-modules=most是动态加载大多数模块静态编译到apache的二进制文件中,--enable-mods-shard=all表示动态加载所有模块,这两个选项是可选的,但是最后一个—enable-so是必须要有的,是一个加载模块的开关。这里感谢南非蚂蚁的文档的帮助。。。谢谢
4/安装完成之后当然是安装tomcat,我们修改下目录名称,不影响的
[root@mail ~]#cd /usr/local
[root@mail local]# tar -zxvf apache-tomcat-5.5.33.tar.gz
[root@mail local]#mv apache-tomcat-5.5.33 tomcat5.5.33
这里因为tomcat默认解压缩的时候已经是二进制可执行文件了,就不用编译安装了,直接拷贝到我们的目录下就可以了
5/因为tomcat基于Java的环境,所以需要安装jdk,并修改环境变量
[root@mail ~]#cd /usr/local
[root@mail local]#chmod u+x jdk-6u15-linux-i586.bin
[root@mail local]#./jdk-6u15-linux-i586.bin
安装过程根据提示操作即可完成。安装完成会生成一个jdk1.6.0_25目录
下面需要修改环境变量来满足tomcat的运行环境,在文件最后添加,因为jdk安装在/usr/local下,所以才会配置如此,如果位置不同只需修改JAVA_HOME路径即可
#Vim /etc/profile
export JAVA_HOME="/usr/local/jdk1.6.0_25"
export PATH="$PATH :$JAVA_HOME/bin:$JAVA_HOME/jre/bin:"
export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
如果正确完成之后是可以用java –version来查看版本的
6/因为要让apache和tomcat进行通信,所以当然要安装一个连接器,或者叫插件,
[root@mail ~]# cd /usr/local/
[root@mail local]#tar xzvf jakarta-tomcat-connectors-1.2.31-src.tar.gz
[root@mail local]# cd jakarta-tomcat-connectors-1.2.31-src/native
[root@mail native]# ./buildconf.sh
[root@mail native]# --with-apxs=/usr/local/apache2/bin/apxs \
--with-java-home=/usr/local/jdk1.6.0_25
话不多说,奉上截图
最后检查下模块是否正确的生成
7、到此安装的步骤已经全部结束,下面就开始进行相应的整合操作!
Tomcat是一个服务于web server等执行servlet/jsp的tomcat实例,所以需要在apache的配置文件下添加相关的配置文件来让apache和tomcat来进行通讯,在这里需要添加2个文件,一个是mod_jk.conf和workers.properties,
#cd /usr/local/apache2/conf
#vim mod_jk.conf
添加如下内容:
###### 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /usr/local/apache2/conf/workers.properties
###### Where to put jk logs
JkLogFile /usr/local/apache2/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"
###### 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1
JkMount /*.do worker1
这里说明一下,比较重要的就是最后两行了,因为这里是告诉apache如何判断用户的请求哪些该法往tomcat,这里我只写了讲servlet和jsp页面的请求发往tomcat,其余的就是apache自身来处理,这里有一个匹配原则,apache优先匹配静态资源,一旦静态匹配不成功,再来检查这里的文件,满足就转发给tomcat
8、然后添加,指定和tomcat通信的apache进程实例的一些模式,包括协议,端口啊等
Vim workers.properties
####### Defining a worker named worker1 and of type ajp13
worker.list=worker1
####### Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
9、最后配置apache服务器配置文件,让apache加载mod_jk.so模块和读取mod_jk.conf文件
#vim httpd.conf
在相应的位置添加上
LoadModule jk_module modules/mod_jk.so
Include /usr/local/apache2/conf/mod_jk.conf
这里还可以修改下服务器名称,这里方便我就改成自身的IP,监听端口等
还要增加主页对JSP页面的支持
到此apache全部配置就基本结束了,下面我们来配置tomcat整合要做哪些设置
10、tomcat整合必须修改主配置文件添加一部分内容即可
#vim /usr/local/tomcat/conf/server.xml
在
debug="0" reloadable="true" crossContext="true"/>
这里我用红色的颜色标记了网页的存放路径一定要和apache里指向同一个地方
到此tomcat其实也就设置完成了,但是这里给个小提示。Tomcat默认也可以单独作为web服务器的,所以他也有自己监听的端口,默认是8080,配置文件里说明了
我们为了安全考虑可以修改为以下
redirectPort="8443"
protocol="AJP/1.3“ />
11、最后重启apache和tomcat即可完成
Apache的启动:
#/usr/local/apache/bin/apachectl start
Tomcat的启动:
#/usr/local/tomcat/bin/startup.sh start
这里能看到8080端口是因为我没有将tomcat的默认端口关闭。这样恰好可以看到tomcat是启动了的,而且ajp13也是监听在,这样整合就成功了,下面我们来进行检测
12检测
--首先我们看下默认纯apache是否支持jsp页面
这里我用默认的jsp一个简单的页面,结果apache返回给我源代码,说明apache不支持jsp页面
--看整合之后的是否支持呢
看到是支持的,但是有人会怀疑这是不是tomcat解析出来的,并不是整合的效果,那好,这里告诉各位额,我们都知道apache有自己独有的报错页面,也就是你访问错误的网页时候apache返回的页面是可以判断这就是apache在处理相关的信息,同样的tomcat也有独有的报错页面,下面我们就来看看
这就是apache访问不到默认页面返回的报错页面
下面这就是访问不到默认tomcat的页面返回信息,这样才知道是哪个响应了我们的请求,到此,我们的整合实验算是基本完成了,通过这次我学习到了不少,也看了一些相关朋友的文章,这里要再次感谢 51CTO上南飞蚂蚁的博文,我引用他的一些博文上的原理内容等,再次感谢