读书人

Linux Apache Tomcat环境筹建

发布时间: 2013-08-11 22:22:29 作者: rapoo

Linux Apache Tomcat环境搭建
rpm -ivh apr-devel-1.3.9-3.el6.x86_64.rpm rpm -ivh db4-cxx-4.7.25-16.el6.x86_64.rpmrpm -ivh db4-devel-4.7.25-16.el6.x86_64.rpm rpm -ivh expat-devel-2.0.1-9.1.el6.x86_64.rpm rpm -ivh cyrus-sasl-devel-2.1.23-8.el6.x86_64.rpm rpm -ivh openldap-devel-2.4.19-15.el6.x86_64.rpm rpm -ivh apr-util-devel-1.3.9-3.el6.x86_64.rpm rpm -ivh httpd-devel-2.2.15-5.el6.x86_64.rpm

?或

yum -y install httpd-devel.* 

?

2.下载:

jdk-6u45-linux-x64.binapache-tomcat-6.0.37.tar.gzapache-tomcat-6.0.37-src.tar.gz

?

将文件放入/opt谁的夹中

?

3.安装

mv tomcat-connectors-1.2.37-src.tar.gz /opt  tar -xzvf tomcat-connectors-1.2.37-src.tar.gzmv jdk-6u45-linux-x64.bin /opt  chmod u+x jdk-6u45-linux-x64.bin /opt mv apache-tomcat-6.0.37.tar.gz /opt  tar -xzvf apache-tomcat-6.0.37.tar.gzmv apache-tomcat-6.0.37 tomcat./jdk-6u45-linux-x64.binmv jdk1.6.0_45 jdk

?

在/etc/profile文件中增加以下内容

JAVA_HOME=/opt/jdkCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/libPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport JAVA_HOME PATH CLASSPATH

?

让环境变量生效可通过重新启动或执行以下命令

source /etc/profile 

?

以下转自:http://blog.csdn.net/chaijunkun/article/details/6987443

?

最近在开发的项目需要承受很高的并发量。综合各种情况,决定使用Apache+Tomcat+JK的方式实现负载均衡,并且作为一个统一的服务还要实现群集(同步Session)。

在网上找了很多资料,都是零零散散的,没有一个完整的过程。通过几天的努力,完成了从编译、部署到配置的整个过程,期间也遇到了一些问题。在接下来的文字中将这些过程记录下来,做个笔记同时也分享给大家。

为了重新演示整个过程,我新搭建了一个服务器,各项参数如下:

CPU:Intel Xeon 5506*2

内存:DDR3 4G*4

主机型号:Dell PowerEdge R710

操作系统:CentOS release 5.7?x86_64版

内核版本:2.6.18

gcc版本:4.1.2

g++版本:4.1.2

java版本:1.6.0_30

然后选择Unix版源码:

Linux Apache Tomcat环境筹建

2.下载tomcat服务器源码包

目前tomcat服务器个人还是觉得6.0比较稳定。7.0毕竟是新出的东西,需要一定的生产实践考验才能达到理想的状态。因此这里选择tomcat 6.0。

访问网址http://tomcat.apache.org/download-60.cgi,可以看到目前稳定的版本为6.0.33:

Linux Apache Tomcat环境筹建

这里强烈建议下载tar.gz格式的压缩包。在Linux下,文件访问有着严格的权限限制。一个文件是否允许以二进制或者脚本的形式执行,完全取决于其是否拥有执行缺陷,这与Windows识别文件后缀名(.exe、.bat)的方式不同。zip格式的压缩包中是不保留文件的权限信息的,而tar.gz格式的压缩包是保存有文件的权限信息的。

3.下载JK连接器源码包

作为apache与tomcat连接的桥梁,JK连接器使用C语言编写,与apache紧密结合,作为模块装载到apache服务器中,通过配置实现与特定的tomcat服务器进行通信,从而实现负载均衡的功能。

访问网址http://tomcat.apache.org/download-connectors.cgi,可以找到最新最稳定的JK连接器版本:

Linux Apache Tomcat环境筹建

这里还是推荐下载tar.gz格式的源码。原因同上。

4.解压

apache服务器、tomcat服务器和JK连接器都已经下载好了,如下图所示:

Linux Apache Tomcat环境筹建

然后将这三个包都解压出来:

Linux Apache Tomcat环境筹建

5.编译apache服务器

首先编译apache服务器。在编译之前需要执行其自带的检测配置脚本。对于不同发行版本的Linux,默认安装的库都有所差别,即便是同一个发行版本,由于用户安装软件的软件不同,也会导致系统内包含的库有所区别。因此apache作为开源服务器,在编译前需要了解系统的库安装情况,某些模块需要依赖于特定的库,如果这些库不存在,配置脚本将自动忽略这些库的编译。经过检测时候会生成合适的MakeFile文件。这里特别提醒一句,如果直接执行配置脚本,是不会编译额外的模块的,我们希望使用额外模块时,需要在运行配置脚本命令后加入参数,让其尽最大可能编译可用的库。关于这方面的介绍可以参阅我的另外一篇文章“Linux下编译apache服务器modules文件夹缺少模块(.so)的问题”(http://blog.csdn.net/chaijunkun/article/details/6977466)。下面进入apache服务器源码目录并执行配置脚本:

?

解压apr和apr-util

这里要注意一点就是Linux的防火墙问题。如果你的Linux服务器启动了防火墙,本地访问上面的网址是没有问题的,但如果其它计算机访问你的服务器有可能会连接失败。

出现这种情况的原因是防火墙将入站80端口封锁了。解决方法是将80端口加入到允许列表中:

Linux Apache Tomcat环境筹建

进入防火墙设置后,如果发现Firewall状态为Enabled,表示防火墙已启用,需要将WWW(HTTP)服务标记为信任,如果需要使用hhtps协议,还要将Secure WWW(HTTPS)服务也标记为信任。如下图所示:

Linux Apache Tomcat环境筹建

另外,此时如果有其他程序占用80端口也是会影响到apache服务器的,需要确保这个端口没有被占用。

还有我还要补充一点,在Mac OS中按照上述方法安装apache服务器是不行的。开始的时候我不想搭建Linux服务器,想到Mac OS也是类Unix的系统,操作命令什么的都一样,就先在Mac上实验了。结果安装上apache服务器后启动了,每次访问都提示505错误,service temporarily unavailable。经过查阅很多资料和尝试才发现,原来Mac系统中已经自带了apache服务器。具体应用是在“系统设置”中的“共享”功能。这个功能里有“Web共享”方式。其实现时使用的服务器就是apache。它采用的配置文件在/etc/httpd/目录中。这里的配置文件和自己安装的apache服务器配置文件冲突了,因此造成505错误。这一点需要注意。(注:我是用的Mac系统为Mac OS X Lion 10.7.2)

2011年11月23日补充:

如果你希望把apache服务器注册为系统服务,让它随着系统启动而启动,则需要在/etc/init.d/目录中建立服务管理脚本,我们将其命名为httpd:

maxSpareThreads="75" enableLookups="false" redirectPort="8443"?
acceptCount="100" debug="99" connectionTimeout="20000"?
disableUploadTimeout="true"?URIEncoding="UTF-8"?/>

但是,当使用apache + tomcat 组成群集与负载均衡系统时,apache会将servlet/jsp请求转发给Tomcat。此时是通过AJP协议来转发的,因此对应的请求实际上是被转发到Tomcat监听的AJP端口上的,所以这里针对8080的设置自然就无效了。正确的方法是进行下面的设置:

<Connector port="8009"?enableLookups="false" redirectPort="8443"
debug="0"?protocol="AJP/1.3"?URIEncoding="UTF-8"?/>

需要在群集环境中修改默认URL编码的朋友们在这里需要注意一下。

?

11.部署测试用例

将我提供的TestProject.war文件复制到两个tomcat服务器实例的webapps目录下,然后分别启动tomcat服务器,TestProject.war会自动部署上:

然后输入网址访问http://127.0.0.1/TestProject/showInfo.do来看看效果:

Linux Apache Tomcat环境筹建

然后再来刷新一下看看:

Linux Apache Tomcat环境筹建

我们看到,访问URL没有改变,但是apache把两次访问的负载平均分配给了两个tomcat服务器实例,并且SessionId是相同的。

当再次刷新页面的时候,请求又再一次交给了s1服务器。这也正好验证了之前workers.properties文件中关于两服务器的权重设置。

至此,apache服务器+tomcat服务器+JK连接器实现负载均衡与群集的操作结束。

?

2012年7月2日补充:

有网友留言询问apache的httpd.conf文件是否要严格按照文中我的示例来写,另外还提出了关于session方面的疑问,我在这里一并写上。

首先关于httpd.conf配置文件,我提供的只是一个范本,其中一些用不到的选项是可以去掉的,比方说模块加载部分。如果有些模块根本用不到,那去除了之后会使得apache工作得更高效。具体模块对应的功能还要再参看其他资料。至于session的问题,其实涉及到开发技巧了。既然使用负载均衡和动静态分离,一般都是按照大网站的架构了,因此对于会话状态的管理也就需要做出变化。我建议通过加入memcache来实现。用户登录之后,服务器端生成唯一识别号(建议再用XXTEA算法加密一下)作为用户的Token和memcache里面的key,然后把用户对象作为value存放到memcache中,利用memcache自有的失效机制来实现session功能,再加上memcache本身支持集群,多少session都能管理得过来。凡是用到session的地方就改成凭借用户Token从memcache中取出用户对象(这套东西还是写成Util类比较好)。至于用户Token你怎么得到,随你喜好。可以写在Cookie中,也可以写在页面的每一个链接中(你可以看一下网易163、126的邮箱,登进去看访问地址就明白了),后者这样做的好处是浏览器可以禁用Cookie,对于这样的用户,在每一个URL中嵌入token=XXXXXX这样的参数就不会出现问题。

?

参考文献:

httpd.conf (4) 详解,http://hi.baidu.com/prince_zyb/blog/item/685b0901939db70f1c958307.html

Pro Apache Tomcat 6, Matthew Moodie, Kunal Mittal著,Apress公司出品。

ISBN-13 (pbk): 978-1-59059-785-9
ISBN-10 (pbk): 1-59059-785-0

读书人网 >UNIXLINUX

热点推荐