apache2+tomcat

Linux下apahe和tomcat的整合(第二版)

Linux下apahe和tomcat的整合(第二版)
[文章作者:擦肩而过 最后修改:2009.07.30  
转载请注明原文链接:http://bbs.yahunet.com/thread-9856-1-1.html]


    前言:本文是我撰写的关于搭建“linux下整合apache和tomcat”Web服务器的第2篇文章。比第一版没有什么大的变化,增加了GD库、Zend、eaccelerator加速等,测试了一些PHP和JSP的知名开源程序,sablog、shopex、phpcms、discuz、ucenter_home、lybbs等都可以正常运行。
    Apache和Tomcat同是Apache基金会下面的两个项目。
    一个是HTTP WEB服务器,另一个是servlet容器(servlet container)。在我们生产的环境中,往往需要Apache做前端服务器,Tomcat做后端服务器。此时我们就需要一个连接器,这个连接器的作用就是把所有Servlet/JSP的请求转给Tomcat来处理。在Apache2.2之前,一般有两个组件可选择:mod_jk和mod_jk2。后来 mod_jk2没更新了,转而更新mod_jk,所以现在一般都使用mod_jk做Apache和Tomcat的连接器。
不过,自从Apache2.2出来后,你又多了种选择,那就是proxy-ajp。大家知道Apache里的proxy模块,可以实现双向代理功能,功能非常强大。其实从连接器的实现原理上来说,用proxy模块来实现是非常自然的。proxy模块的功能无非就是把相关的请求发给特定的主机再返回结果。那连接器的功能需求就是要把所有对Servlet/JSP的请求都转给后台的Tomcat。

安装步骤
系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 4.7,另在RedHat AS4上也安装成功

一、获取相关开源程序:
所需软件
引用:
eaccelerator-0.9.5.2.tar.bz2
gd-2.0.35.tar.gz
httpd-2.2.9.tar.gz
mysql-5.0.67.tar.gz
php-5.2.6.tar.gz
ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
jdk-6u7-linux-i586-rpm.bin
apache-tomcat-6.0.14.tar.gz
apr-1.3.3.tar.gz
apr-util-1.3.4.tar.gz
eaccelerator-0.9.5.2.tar.bz2
-----------------------------------------------------------------------------------------------------------------------


安装之前要确保系统中安装了以下这些包。
我们可以用rpm -qa |grep 来查看系统是否装
引用:
bzip2-devel
zlib-devel
libjpeg-devel
libpng-devel
libtiff-devel
freetype-devel
openssl-devel
libxml2-devel
gettext-devel
这些包一般都安了,除了最后一个,我们可以在光盘里找到用rpm -ivh 来安装上.

二、安装JDK
引用:
# pwd
/usr/local
# chmod a+x jdk-6u7-linux-i586-rpm.bin
# ./jdk-6u7-linux-i586-rpm.bin
# ln -s /usr/java/jdk1.6.0_07 /usr/local/java
设置环境变量

# vi profile
末尾增加如下内容
引用:
JAVA_HOME=/usr/java/jdk1.6.0_07
CLASSPATH=/usr/java/jdk1.6.0_07/lib/dt.jar:/usr/java/jdk1.6.0_07/lib/tools.jar
PATH=/usr/java/jdk1.6.0_07/bin:$PATH
export PATH JAVA_HOME CLASSPATH
保存退出
引用:
# source /etc/profile
验证:
引用:
#  java -version
三、安装MYSQL
引用:
# tar -zxvf mysql-5.0.67.tar.gz
# cd mysql-5.0.67
# groupadd mysql
# useradd -g mysql -s /sbin/nologin -M mysql
# ./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charset=all --enable-thread-safe-client
# make && make install
# cp support-files/my-medium.cnf  /etc/my.cnf
# chown -R mysql.mysql /usr/local/mysql/
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R root.root /usr/local/mysql/
# chown -R mysql.mysql /usr/local/mysql/var/
启动数据库服务,并添加到自启动
引用:
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
# netstat -ant             查 看3306端口
加入自动启动服务队列:
引用:
#cp  support-files/mysql.server  /etc/rc.d/init.d/mysqld
#chmod  755  /etc/rc.d/init.d/mysqld
#chkconfig --add mysqld
#chkconfig  --level  345  mysqld  on
添加root密码
引用:
# /usr/local/mysql/bin/mysqladmin -u root password "123456"
测试一下:
引用:
# /usr/local/mysql/bin/mysql -u root -p
输入密码:123456,看能不能进入到数据

配置库文件搜索路径
引用:
# echo "/usr/local/mysql/lib/mysql">>/etc/ld.so.conf
# ldconfig
# ldconfig -v
#echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
#source /etc/profile
四、安装Apr和Apr-util
引用:
# tar -zxvf apr-1.3.6.tar.gz
# cd apr-1.3.6
# ./configure  --prefix=/usr/local/apr
# make
# make install
# tar -zxvf apr-util-1.3.8.tar.gz
# cd apr-util-1.3.8
# ./configure  --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make
# make install
五、安装GD2
引用:
# tar -jxvf gd-2.0.35.tar.bz2
# cd gd-2.0.35
# ./configure --prefix=/usr/local/gd --with-png --with-freetype --with-jpeg --with-zlib --with-fontconfig
#make
#如果GD报错:configure.ac:64: warning: macro `AM_ICONV' not found in library
你就make clean一下,然后再make
#make install
六、安装Apache
引用:
# tar xzvf httpd-2.2.9.tar.gz
# cd httpd-2.2.9
# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-proxy --enable-proxy-ajp --enable-proxy-balancer --enable-proxy-connect --enable-proxy-http --with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
# make
# make install
# /usr/local/apache/bin/apachectl start
添加到自启动
引用:
# cp /usr/local/www/bin/apachectl /etc/rc.d/init.d/httpd
然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)
引用:
# chkconfig: 2345 10 90
# description: Activates/Deactivates Apache Web Server
最后,运行chkconfig把Apache添加到系统的启动服务组里面:
引用:
# chkconfig --add httpd
# chkconfig httpd on
七、安装Tomcat
引用:
# cp apache-tomcat-6.0.20.tar.gz /usr/local/
# cd /usr/local/
# tar xzvf apache-tomcat-6.0.20.tar.gz
# ln -s apache-tomcat-6.0.20 tomcat
#vi /usr/local/tomcat/bin/catalina.sh
加入一行:
引用:
JAVA_HOME=/usr/java/jdk1.6.0_14
# /usr/local/tomcat/bin/startup.sh
启动服务后访问本地的8080端口可以看到对应apache tomcat页面了

把Tomcat加到自启动:
引用:
vi /etc/rc.d/rc.local
在里面加入如下代码:
引用:
export JDK_HOME=/usr/java/jdk1.6.0_14
export JAVA_HOME=/usr/java/jdk1.6.0_14
/usr/local/tomcat/bin/startup.sh
八、安装PHP
引用:
#tar zxvf php-5.2.5.tar.gz
#cd php-5.2.5
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-gd=/usr/local/gd --with-config-file-path=/usr/local/php --enable-mbstring=all
# make
# make install
# cp php.ini-recommended /usr/local/php.ini
整合apache与php
引用:
# vi /usr/local/apache/conf/httpd.conf
找到AddType application/x-gzip .gz .tgz在其下加以下内容
引用:
AddType application/x-httpd-php .php
查找:(设置WEB默认文件)
引用:
DirectoryIndex index.html
改成:
引用:
DirectoryIndex index.php index.jsp index.html index.htm
保存退出
引用:
service httpd restart
然后在目录中建一个文件用来测试php情况
在htdocs目录下建一个测试页
引用:
vi index.php
<?php
phpinfo();
?>
保存退出
重启apache


九、安装Zend
引用:
# tar zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
# cd ZendOptimizer-3.3.0a-linux-glibc21-i386
# ./install.sh
出现一个界面
OK点回车
安装协议直接回车
YES回车

然后问你php的配置文件,我们前面已经知道是在/etc下所以直接回车
问你是用apache服务器吗,当然用选YES
问apche的控制命令在哪 /usr/local/apache/bin/apachectl
然后开始装有进度条但很快,然后到一个有/etc/php.ini-zend_optimizer.bak备份的界面选OK
go on "OK"
问你是否重新启动apache选YES
提示apache启动成功点"OK"
安装完成
我们再输入IE看那个测试页Zend是否加载成功。
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies
没有zend之前是这样的:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies就是这样的。


十、安装eaccelerator加速软件

eaccelerator是php的加速软件,使用后php的执行效率会有很大幅度的提升。目前eaccelerator0.9.5.2已经和ZendOptimizer-3.3.0能够基本上兼容啦。
引用:
# tar jxvf eaccelerator-0.9.5.2.tar.bz2
# cd eaccelerator-0.9.5.2
# /usr/local/php/bin/phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
# make
# make install
编译安装后我们会看到屏幕提示的eaccelerator.so所在的目录,php5.2.x系列是在/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/,记住这个路径,待会要用到。

修改php.ini(安装完zend之后,php.ini存入于/usr/local/Zend/etc)
引用:
# vi /usr/local/zend/etc/php.ini
安装php扩展
在文件最后,[zend]之前,注意,这部分内容务必放在[zend]之前,不然可能会出现不可预期的服务器问题。添加下列信息:
引用:
[eaccelerator]
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
重启apache然后在IE还是那个php测试页,zend哪又有没有变化如没有,说明这种方法没有好用。
然后
引用:
# mkdir /tmp/eaccelerator
# chmod 777 /tmp/eaccelerator
在浏览器中打开phpinfo()那个测试页,如果出现以下内容,证明安装成功!

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies
最后就可以把网站工程放在/usr/local/htdocs目录下进行测试了。
OK~~全部结束!!!!


十一、Tomcat 与Apache 的整合

十一、Tomcat 与Apache 的整合

# vi httpd.conf
在文件末尾增加一下两行 引用:
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/这里要注意的是如果没有虚拟主机的话在http.conf中直接加以上两行如果有就不加了。
如果做虚拟主机的话如果是JSP 加其它不加
例:
vi /usr/local/apache/conf/http.conf
把:
#Include conf/extra/httpd-vhosts.conf
去掉注释保存
然后vi /usr/local/apache/conf/extra/httpd-vhosts.conf

把: 引用:

NameVirtualHost :80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
<VirtualHost :80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>改成: 引用:

NameVirtualHost   192.168.1.100:80
<VirtualHost 192.168.1.100:80>
ServerName bbs.yahunet.com
DocumentRoot "/usr/local/apache/htdocs/bbs"
ErrorLog /usr/local/apache/htdocs/yahunet/error_log
CustomLog /usr/local/apache/htdocs/yahunet/access_log common
</VirtualHost>
<VirtualHost 192.168.1.100:80>
ServerName www.syitren.com
DocumentRoot "/usr/local/apache/htdocs/syitren"
ErrorLog /usr/local/apache/htdocs/syitren/error_log
CustomLog /usr/local/apache/htdocs/syitren/access_log common  
</VirtualHost>注:加这两行日志要注意就是在相应的路径下一定要建
ServerAlias 是别名也就是域名这里需注意的是在不是JSP工程时虚拟主机只改httpd-vhosts.conf加上就可以而JSP工程不但在这得加还要在server.xml中也要加具体方法看下面的。
以上是PHP的但如果是JSP 引用:
<VirtualHost 192.168.1.100:80>
ServerName bbs.syitren.com
DocumentRoot "/usr/local/tomcat/webapps/wz"
ErrorLog /usr/local/apache/htdocs/syitrenbbs/error_log
CustomLog /usr/local/apache/htdocs/syitrenbbs/access_log common
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
</VirtualHost>这里就得加这两行而且还得在tomcat配置文件server.xml中也得做虚拟主机目录和这个要一致。
server.xml中这么加: 引用:
<Host name="www.syitren.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false"   xmlNamespaceAware="false">
   <Context path="" docBase="/usr/local/apache/htdocs/syitren/" debug="0" reloadable="true" crossC/>  
   <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www_5sai_log." suffix=".txt"
timestamp="true"/>
</Host>OK,最后就是用工程测试了。

 

 

[others] apache2+tomcat5.5集群+session同步

本文来自: IT运维专家网(LinuxTone.Org) 作者: 守住每一天 日期: 2008-11-18 18:35 阅读: 20964打印 收藏
原文链接:http://bbs.linuxtone.org/thread-1195-1-1.html IT运维专家网--"自由平等,互助分享!"
apache2+tomcat5.5集群+session同步
作者:刘宇 liuyu.blog.51cto.com
msn群:mgroup49073@hotmail.com (linuxtone)

说明:借前人之鉴,写一篇关于tomcat集群及session同步的问题,首先介绍tomcat集成及做集群的原因和必要性,session同步的作用。然后包括各软件的安装配置。

原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低。承受并发小(1000左右)。但目前有不少网站或者页面是JSP的。并采用了tomcat做为WEB,因此只能在此基础上调优。
目前采取的办法是Apache + Mod_JK + tomcat 来解决一部分请求,用户访问的是apache,但有jsp页面的时候才会去请求tomcat。如果量一大,那么tomcat无法承受,那么只能做tomat集群,Apache + Mod_JK 就是负载均衡器了。
Mod_JK2负载均衡 可以把不同的jsp请求转发到不同的tomcat服务器,还可以侦测服务器存活。如果有条件可以给Mod_JK2做一个HA因为做完集群后压力就在JK上了。
      
简单拓仆图:

ATjk.jpg

一、测试环境及软件安装:-----如果已经安装过的可以省略这步
linux 2.6 内核  centos 5.2
本例二台tomcat 不在同一机器。

先安装了所需的程序
  1. yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel
复制代码
下载源码包:(本文不安装PHP)
apache2 和tomcat5都可以在 apache.org 下载
tomcat5需要JDK1.5的版本。
JK本文用的源码包tomcat-connectors

Apache 安装:
# tar zxvf httpd-2.2.8.tar.gz
#cd httpd-2.2.8
# ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so
# make && make install

/usr/local/apache2/bin/apachectrl start
看到apache就配置成功了。


JDK的安装
#chmod 755 jdk-1_5_0_16-linux-i586.bin
#./jdk-1_5_0_16-linux-i586.bin
# mv jdk-1_5_0_16 /usr/local/
到此JDK已经安装完成

到/usr/bin目录下,把原用的java,javac文件删除:
#rm -rf java
#rm –rf javac
在/usr/bin 下建立 软连接 java
  1. # ln -s /usr/local/jdk-1_5_0_16/bin/java /usr/bin/java
     
  2. # ln -s /usr/local/jdk-1_5_0_16/bin/javac /usr/bin/javac
     
  3. # java –version
     
  4. # javac -version
     
  5. java version "1.4.2_08"
     
  6. Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
     
  7. Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
复制代码
为了方便下在的工作建立两个软链接:
ln -s /usr/local/jdk-1_5_0_16  /usr/local/jdk
ln -s /usr/local/jdk-1_5_0_16/jre /usr/local/jre


Tomcat的安装
#tar -zxvf apache-tomcat-5.5.27.tar.gz
# mv apache-tomcat-5.5.27 /usr/local/tomcat
设置环境变量:
  1. #Set  Environment  by NetSeek
     
  2. JAVA_HOME=/usr/local/jdk
     
  3. export JAVA_HOME
     
  4. JRE_HOME=/usr/local/jre
     
  5. export JRE_HOME
     
  6. CLASSPATH=/usr=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jre/lib
     
  7. export CLASSPATH
     
  8. PATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jre/bin
     
  9. export PATH
     
  10. TOMCAT_HOME=/usr/local/tomcat
     
  11. export TOMCAT_HOME
复制代码
启动tomcat以检查是否存在错误:
#cd /usr/local/tomcat/bin
#./startup.sh
http://IP地址:8080 可以看到猫头:)成功了。

在另一台机器上也安装tomcat 并配置好。

JK 安装 (整合apache tomcat)
# tar zxvf tomcat-connectors-1.2.27-src.tar.gz
#cd tomcat-connectors-1.2.27-src/native
# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
# make && make install

在/usr/local/apache2/modules/ 下会产生mod_jk.so
修改apache配置文件:
  1. LoadModule jk_module modules/mod_jk.so
     

  2.  
  3. JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties   JK配置文件 负载的配置
     
  4. JkShmFile logs/mod_jk.shm
     
  5. JkLogFile /usr/local/tomcat/logs/mod_jk.log  相关日志的设置
     
  6. JkLogLevel info
     
  7. JkMount /*.jsp controller  将jsp的请求转发给 controller(负载均衡控制器)
复制代码
修改DoucmentRoot 与tomcat的目录一致。
本文修改为:/usr/local/tomcat/webapps/

二、调度器JK的配置
建立JK配置文件:
#vi /usr/local/tomcat/conf/jk/workers.properties
  1. workers.tomcat_home=/usr/local/tomcat    #指定tomcat的目录――如果2个tomcat在同一台机器该选项去掉
     
  2. workers.java_home=/usr/local/jdk         #指定jdk的目录
     
  3. ps=/                                    
     
  4. worker.list=controller                   #指定负载名,这个可以随便起,与下面的 worker.controller.type=lb要对应
     

  5.  
  6. #========tomcat1======== 第一台tomcat的配置
     
  7. worker.tomcat1.port=8009
     
  8. worker.tomcat1.host=localhost   #这里也可以写IP
     
  9. worker.tomcat1.type=ajp13      
     
  10. worker.tomcat1.lbfactor=1       #权量 数值越大,分配的机率就最小
     

  11.  
  12. #========tomcat2===========
     
  13. worker.tomcat2.port=8009
     
  14. worker.tomcat2.host=192.168.19.81 (tomcat2的IP)
     
  15. worker.tomcat2.type=ajp13
     
  16. worker.tomcat2.lbfactor=1
     

  17.  
  18. #========controller,负载均衡器=======
     
  19. worker.controller.type=lb
     
  20. worker.controller.balance_workers=tomcat1,tomcat2  # server.xml配置文件里的jvmRoute="tomcat1"指定的名字
     
  21. worker.controller.sticky_session=1
复制代码
三、tomcat集群配置,session 同步配置:
1、tomca1 tomcat 2 在同一台机器
Tomcat 1  (IP: 192.168.19.199)
  1. A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
     
  2. B、去掉<Cluster>  <\Cluster> 的注释符
     
  3. C、修改Cluster 节点信息
     
  4. <Membership              
     
  5. className="org.apache.catalina.cluster.mcast.McastService"               
     

  6.  
  7. mcastBindAddress="192.168.19.199"               
     
  8. mcastAddr="224.0.0.1"               
     
  9. mcastPort="45564"   
     
  10. mcastFrequency="500"               
     
  11. mcastDropTime="3000"/>
     
  12.       <Receiver         
     
  13. className="org.apache.catalina.cluster.tcp.ReplicationListener"               
     

  14.  
  15. tcpListenAddress="192.168.19.199"               
     
  16. tcpListenPort="4001"               
     
  17. tcpSelectorTimeout="100"               
     
  18. tcpThreadCount="6"/>
复制代码
Tomcat 2  (IP: 192.168.19.81)
  1. A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
     
  2. B、去掉<Cluster>  <\Cluster> 的注释符
     
  3. C、修改Cluster 节点信息
     
  4. <Membership      
     
  5. className="org.apache.catalina.cluster.mcast.McastService"
     
  6. mcastBindAddress="192.168.19.199"
     
  7. mcastAddr="224.0.0.1"
     
  8. mcastPort="45564"
     
  9. mcastFrequency="500"
     
  10. mcastDropTime="3000"/>
     
  11. <Receiver         
     
  12. className="org.apache.catalina.cluster.tcp.ReplicationListener"         
     
  13. tcpListenAddress="192.168.19.199"
     
  14. tcpListenPort="4002" 一定要改
     
  15. tcpSelectorTimeout="100"
     
  16. tcpThreadCount="6"/>
     
  17. D、将8080 8009 8082三个节点的端口改为
     
  18.    9080 9009 9082 避免 与tomcat1端口冲突
     
  19. 注:这里的IP也可以不改
复制代码
2、tomca1 tomcat 2 在不同机器上
Tomcat 1  (IP: 192.168.19.199)

  1.  
  2. A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
     
  3. B、去掉<Cluster>  <\Cluster> 的注释符
     
  4. C、修改Cluster 节点信息
     
  5. <Membership           
     
  6. className="org.apache.catalina.cluster.mcast.McastService"
     
  7. mcastBindAddress="192.168.19.199"               
     
  8. mcastAddr="224.0.0.1"               
     
  9. mcastPort="45564"               
     
  10. mcastFrequency="500"
     
  11. mcastDropTime="3000"/>
     
  12. <Receiver         
     
  13. className="org.apache.catalina.cluster.tcp.ReplicationListener"
     
  14. tcpListenAddress="192.168.19.199"               
     
  15. tcpListenPort="4001"               
     
  16. tcpSelectorTimeout="100"               
     
  17. tcpThreadCount="6"/>   
复制代码
Tomcat 2  (IP: 192.168.19.81)
  1. A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
     
  2. B、去掉<Cluster>  <\Cluster> 的注释符
     
  3. C、修改Cluster 节点信息
     
  4. <Membership
     
  5. className="org.apache.catalina.cluster.mcast.McastService"               
     
  6. mcastBindAddress="192.168.19.81"               
     
  7. mcastAddr="224.0.0.1"               
     
  8. mcastPort="45564"     mcastFrequency="500"               
     
  9. mcastDropTime="3000"/>
     
  10. <Receiver         
     
  11. className="org.apache.catalina.cluster.tcp.ReplicationListener"           
     

  12.  
  13. tcpListenAddress="192.168.19.81"               
     
  14. tcpListenPort="4001"               
     
  15. tcpSelectorTimeout="100"               
     
  16. tcpThreadCount="6"/>
复制代码
修改web应用里面WEB-INF目录下的web.xml文件,加入标签
<distributable/>
直接加在</web-app>之前就可以了
做tomcat集群必须需要这一步,否则用户的session就无法正常使用。

注意事项:1、mcastAddr="224.0.0.1"  这主广播地址因此需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
分别在各机器上运行
2、查看端口情况:
Netstat –antl |grep 4001 同步监听的端口
tomcat1
net-199.jpg
tomcat2
net-81.jpg
3、测试广播
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
如果不报错则能正常广播
tomcat-replication.jar 下载:http://cvs.apache.org/~fhanik/tomcat-replication.jar
如果是二台机器,可以用tcpdump 抓取包


五、测试 集群及session同步
在webapps 下新建test 目录
目录下建WEB-INF目录下的web.xml文件
  1. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     
  4.     version="2.4">
     
  5.        <display-name>TomcatDemo</display-name>
     
  6.        <distributable/>
     
  7. </web-app>
复制代码
再在webapps 下 建立print.jsp   test.jsp
Print.jsp :
  1. <%
     
  2.    System.out.println("www.linuxtone.org   liuyu.blog.51cto.com");
     
  3. %>
复制代码
test.jsp
  1. <%@ page contentType="text/html; charset=GBK" %>
     
  2. <%@ page import="java.util.*" %>
     
  3. <html><head><title>Cluster App Test</title></head>
     
  4. <body>
     
  5. Server Info:
     
  6. <%
     
  7. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
     
  8. <%
     
  9.   out.println("<br> ID " + session.getId()+"<br>");
     
  10.   String dataName = request.getParameter("dataName");
     
  11.   session.setAttribute("myname","session?");
     
  12.   if (dataName != null && dataName.length() > 0) {
     
  13.      String dataValue = request.getParameter("dataValue");
     
  14.      session.setAttribute(dataName, dataValue);
     
  15.   }
     
  16.   out.print("<b>Session P±?b>");
     
  17.   Enumeration e = session.getAttributeNames();
     
  18.   while (e.hasMoreElements()) {
     
  19.      String name = (String)e.nextElement();
     
  20.      String value = session.getAttribute(name).toString();
     
  21.      out.println( name + " = " + value+"<br>");
     
  22.          System.out.println( name + " = " + value);
     
  23.    }
     
  24. %>
     
  25.   <form action="index.jsp" method="OST">
     
  26.     &ucirc;&sup3;?<input type=text size=20 name="dataName">
     
  27.      <br>
     
  28.     ?:<input type=text size=20 name="dataValue">
     
  29.      <br>
     
  30.     <input type=submit>
     
  31.    </form>
     
  32. </body>
     
  33. </html>
复制代码
重启所有的服务。

访问 http://192.168.19.199/test/print.jsp
如图可以看出tomcat 集群配置完成
199-t1-t2.jpg
Session 复制的查看
在同一窗口,输入名称和值,
在日志可以看到如下结果. 这种结果表明成功了
tomcat1
x1.jpg
tomca2
x2.jpg


错误总汇:
skipping state transfer. No members active in cluster group."
mcastBindAddress 没有添加或添加得不对

?Unknown default host: ajp13
 



[本日志由 hotfish 于 2010-04-20 05:04 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 48
发表评论
你没有权限发表评论!