最近学习apache+tomcat将网络上、书上和API上看到进行了一下整理,做了个小测试,算做入门学习总结吧,具体内容如下:
下载需要的文件。这里假定你已经正确安装配置好了JDK。
例如:chmod 777 jdk-6u37-linux-i586.bin
./jdk-6u37-linux-i586.bin 安装jdk
mv 命令移动到指定路径下
配置环境变量
root用户,编辑 etc/profile文件,修改JAVA_HOME路径如下
#Java environment
export JAVA_HOME=/usr/local/jdk1.6.0_37
export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
并使之生效,执行
source /etc/profile
到Apache官方网站下载所需要的文件:
httpd-2.4.3.tar.gz
apache-tomcat-6.0.36.tar.gz
tomcat-connectors-1.2.37-src.tar.gz
其中httpd和jakarta-tomcat-connectors为源码包,apache-tomcat为二进制包。
代码:
# tar zxvf httpd-2.4.3.tar.gz
# cd httpd-2.4.3
# ./configure --prefix=/usr/local/apache2
# make
# make install
# ln -s /usr/local/apache2/ apache
备注1:安装过程中提示需要gcc支持,解决方法如下
yum -y install gcc
yum -y install gcc-c++
备注2:安装过程中提示提示APR not found 解决方法如下
下载apr安装包:
http://apache.etoak.com//apr/apr-1.4.6.tar.gz
tar zxvf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/usr/local/apr
make && make install
下载apr-util安装包:
http://mirror.bjtu.edu.cn/apache//apr/apr-util-1.5.1.tar.gz
tar zxvf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
make && make install
下载pcre安装包:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.zip
unzip pcre-8.32.zip
cd pcre-8.32
./configure --prefix=/usr/local/pcre
make && make install
安装httpd包:
tar zxvf httpd-2.4.3.tar.gz
cd httpd-2.4.3
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre/bin/pcre-config
make && make install
代码:
# tar -zxvf apache-tomcat-6.0.36.tar.gz
# mv apache-tomcat-6.0.36 /usr/local/tomcat6
# ln -s /usr/local/tomcat6/ tomcat (建立连接这一步可以不需要)
配置两个tomcat做负载均衡,tomcat1、tomcat2:
首先注意修改两个tomcat的端口配置,修改server.xml:
redirectPort="8443" /> redirectPort="8443" /> 然后在server.xml中去掉 在host标签下添加Context标签,例如:(两个tomcat配置一样) crossContext="true"/> 在每个tomcat目录下的conf\Catalina\localhost目录下建立一个ROOT.xml,如下: antiJARLocking="false" distributable="true"> 修改web.xml文件添加元素 编辑apache配置文件 httpd.conf: 打开如下模块的注释: LoadModule proxy_module modules/mod_proxy.so #引入ajp模块 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #引入ajp模块 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #用于监控界面 在最后添加以下内容: #用于监控界面 ProxyRequests Off ProxyPass / balancer://mycluster/ stickysession=JSESSIONID ProxyPassReverse / balancer://mycluster/ stickysession=JSESSIONID BalancerMember ajp://10.25.1.151:8009/ route=tomcat1 loadfactor=1 BalancerMember ajp://10.25.1.151:9009/ route=tomcat2 loadfactor=1 #用于监控界面 SetHandler balancer-manager 注意如下几个地方: Listen 80 #不要添加IP或者localhost ServerName localhost:80 #如果使用域名,需要配置本机的windows中host文件 编辑一个jsp文件用于测试 注意,针对 session处理,tomcat集群有两种方式: sticky模式(黏性会话模式):同一个用户的访问请求都被派送到同一个tomcat实例上。 好处:无须在多台服务器之间实现session共享了 缺点:不能实现 failureover了,一但用户访问的机器挂掉,那么其session就会丢失。 session复制模式:同一用户的SESSION会被拷贝到各TOMCAT实例上。 好处:解决failureover的问题,即使某一台web服务器挂掉了,用户请求会被负载到其他web服务器上,且session也被复制了,对用户而言就像是在同一台机器上操作一样。 缺点:session复制需要系统资源和网络的开销,尤其是当web服务器多的时候或session里存储的数据量大的时候,这点将会比较的明显(未做极限测试)。 针对这两种方式的优缺点,可以将两种模式结合的方式来达到更好的效果,那就是sticky+session复制模式。用户的请求按照 sticky方式被分发到同一个web服务器上,同时tomcat在后台做异步复制(非同步)session到其他web服务器,这样我们使用 sticky的简便性,同时又有了一定的容错能力。 编译生成mod_jk文件 代码: # tar -zxvf tomcat-connectors-1.2.37-src.tar.gz # cd tomcat-connectors-1.2.37-src/native/ # ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk1.6.0_37/ # make # cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/ //如果直接下载的是.so的tomcat连接文件的话,只需将名称改为mod_jk.so,然后放在modules目录下就可。 注意:编译工程出现该情况是由于c++编译器相关package没有安装,用超级用户登陆,在终端上执行: #yum install glibc-headers #yum install gcc-c++ 注意:如果需要重新生成so文件尽量把../native/apache-2.0中多余的文件删除掉,我的做法是重新解压缩了一次tomcat-connectors-1.2.37-src.tar.gz 配置/usr/local/apache2/conf/httpd.conf 文件,添加如下代码: LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log JkLogLevel warn
注意如下几个地方: Listen 80 #不要添加IP或者localhost ServerName localhost:80 #如果使用域名,需要配置本机的windows中host文件 创建并配置/usr/local/apache2/conf/workers.properties文件,内容如下: worker.list=wlb,jkstatus worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 # Define preferred failover node for tomcat1 #worker.tomcat1.redirect=tomcat2 worker.tomcat2.port=9009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 # Disable tomcat2 for all requests except failover #worker.tomcat2.activation=disabled worker.wlb.type=lb worker.wlb.balance_workers=tomcat1,tomcat2 worker.jkstatus.type=status #以上注释掉的两行如果开启,则worker2成为worker1的备用,在worker1不可用的情况下才会向worker2请求 创建并配置/usr/local/apache2/conf/uriworkermap.properties,内容如下: /admin/*=wlb /manager/*=wlb /jsp-examples/*=wlb /servlets-examples/*=wlb /examples/*=wlb /*.jsp=wlb /*=wlb !/servlets-examples/*.jpeg=wlb /jkmanager=jkstatus !/*.gif=wlb !/*.jpg=wlb !/*.png=wlb !/*.css=wlb !/*.js=wlb !/*.htm=wlb !/*.html=wlb 配置两个tomcat做集群负载均衡,tomcat1、tomcat2: redirectPort="8443" /> redirectPort="8443" /> connectionTimeout="20000" redirectPort="8443" /> connectionTimeout="20000" redirectPort="8443" /> Context标签两个tomcat配置是一样的 crossContext="true"/> Cluster标签两个tomcat的配置是一样的: expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> address="127.0.0.1" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/>
修改应用程序的web.xml文件: 在 之前加上 可以进行测试了~ 5、mod_jk.so方式整合配置