Apache Tomcat集群安装配置

来源:互联网 发布:互联网数据存在哪里 编辑:程序博客网 时间:2024/05/18 17:59

Apache Tomcat集群安装配置

1、    安装环境及软件:
Centos5.5操作系统
jdk1.6.0_14
Apache httpd
Apache Tomcat
Apache mod_jk
Mysql数据库

前端采用Apache mod_jk实现负载平衡
后端使用JDBC存储的永久会话管理器实现session共享,数据库为mysql。
笔者的安装环境为一台Centos服务器,所以对于Tomcat下有许多端口要做修改,以免发生商品冲突。如果两个Tomcat是分别在两台机器上则修改端口的步骤可以省略。

2、    JDK安装
JDK使用的版本为jdk1.6.0_14,我不喜欢使用系统自带的openJDK随然有人说openJDK性能也不错,但我遇到过一次使用openJDK则不能正带运行java脚本的事件,弄的我们几个人在晚上12点多找了好几个小时的原因。
JDK的安装就不在这里说了,安装过程是丰常简单的,网上到处都有教程。
3、    Apache httpd安装
Apache httpd使用yum来安装,

 

yum install -y httpd httpd-devel
#下载mod_jk.so要下载与httpd相对应的版本的。

下载地址:http://tomcat.apache.org/download-connectors.cgi

我下载的版本是

tomcat-connectors-1.2.30-src.tar.gz

然后时行编译

tar -xzvf tomcat-connectors-1.2.30-src.tar.gz

cd tomcat-connectors-1.2.30-src/native

./configure --with-apxs=/usr/sbin/apxs

make

make install

 

 

#修改httpd.conf文件
cd /etc/httpd/conf
vim httpd.conf

#添加几个字段

#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
#指定workers.properties文件路径
JkWorkersFile conf/workers.properties
#告知mod_jk将自己日志写到哪里
JkLogFile logs/mod_jk_cluster.log
#控制日志级别,info为正常的日志级别,error和debug级别将提供更多的日志细节
JkLogLevel debug
#记录Tomcat worker名称、网址、和每个请求的时间
JkRequestLogFormat "%w %U %T"
#其它的变量还有"[%a %b %d %U %H:%M:%S %w %R %Y] "
#指定那些请求交给tomcat处理,controller为在workers.propertise里指定的负载分配控制器
JkMount /* ball
JkMount /jkstatus/ stat1

#在conf目录下新建一个workers.properties文件内容为
worker.list =ball,stat1  #server 列表
#========tomcat1========      
worker.tomcat1.type=ajp13            #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址 在一台机器上配置时。

#有时写logalhost也可以那是因为centos默认的主机名是locahost,如果更改过主机名则必须改成对就的主机名或是ip地址,建议直接改成对应的ip地址。
worker.tomcat1.port=7001
worker.tomcat1.lbfactor = 10         #server的加权比重,值越高,分得的请求越多
#========tomcat2======= 
worker.tomcat2.type=ajp13            #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.port=7002
worker.tomcat2.lbfactor = 10         #server的加权比重,值越高,分得的请求越多
#====================== 
worker.ball.type=lb
worker.ball.sticky_session=1         #默认为1,表示同样的tomcat服务实例将服务来自同样会话的请求
worker.ball.balance_workers=tomcat1,tomcat2
worker.stat1.type=status

 

httpd启动时如果会提示:

启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

你需要修改一下你http的配置文件.找到ServerName这一行,
ServerName new.host.name:80改成http服务器的IP或者域名:80

 

 

4、    Apache Tomcat安装
Tomcat是在其官网(http://tomcat.apache.org/)上下载的最新版本apache-tomcat-6.0.26-src.tar.gz
这个版本解压之后就可以使用。
下载地址:http://tomcat.apache.org/download-60.cgi
我使用的是Core版本的
http://apache.etoak.com/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz
下载后放置到相应的位置
我放置的位置为
cd /usr/local/
tar -xzvf apache-tomcat-6.0.26.tar.gz
#解压压缩包
mv apache-tomcat-6.0.26 tomcat1
cp -r tomcat1 tomcat2
#复制另一份tomcat2
cd tomcat1/conf/
vim server.xml
#修改Tomcat1的配置文件。


<Engine name="Catalina" defaultHost="localhost">

改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">


#jvmRoute="tomcat1"其中tomcat1是这台机器的唯一标识。该属性ID必须与workers.properties文件中唯一的jvmRoute ID一一对应。

#另外由于本环境是在一台机器上部署两个Tomcat所以要修改几个端口,如果是在两台机器上分别部署Tomcat则不用修改。

 

<Server port="8005" shutdown="SHUTDOWN">
改为

<Server port="6001" shutdown="SHUTDOWN">

#----------------------------------------------------------------
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
改为
 <Connector port="8001" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
#-----------------------------------------------------------------

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改为

<Connector port="7001" protocol="AJP/1.3" redirectPort="8443" />

#相应的修改Tomcat2下的配置文件
cd /usr/local/tomcat2/conf/
vim server.xml

 

 

#修改Tomcat2的配置文件。


<Engine name="Catalina" defaultHost="localhost">

改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">


#jvmRoute="tomcat1"其中tomcat1是这台机器的唯一标识。该属性ID必须与workers.properties文件中唯一的jvmRoute ID一一对应。

#另外由于本环境是在一台机器上部署两个Tomcat所以要修改几个端口,如果是在两台机器上分别部署Tomcat则不用修改。

 

<Server port="8005" shutdown="SHUTDOWN">
改为

<Server port="6002" shutdown="SHUTDOWN">

#----------------------------------------------------------------
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
改为
 <Connector port="8002" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
#-----------------------------------------------------------------

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改为

<Connector port="7002" protocol="AJP/1.3" redirectPort="8443" />

 

 

 

 

配置Web.xml文件
     在每一个tomcat实例webapps下的应用程序的WEB-INF/web.xml添加distributable属性
     只要加一个
     <distributable/>
     即可。(但是貌似不加也行)

配置元素
  向每个位于webapps/应用程序名/META-INF 目录(如果这个目录不存在,则创建它)下的集群节点添加一个context.xml文件,文件内容如下

<Context>
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:mysql://localhost/wroxtomcat?user=empro&amp;password=empass"
driverName="com.mysql.jdbc.Driver"
sessionIdCol="session_id"
sessionValidCol="valid_session"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionTable="tomcat_sessions"
sessionAppCol="app_context"
sessionDataCol="session_data"
/>
</Manager>
</Context>

 

其中wroxtomcat为数据库名称,empro为数据库的用户名,empass为数据库的密码。
如果数据库不在本机的话将localhost改为对应的数据库服务器的IP地址。

另外还要将mysql和tomcat的连接jar包放到tomcat下的lib文件下

我下载的版本是

mysql-connector-java-5.1.6.jar

 

5、mysql数据库配置
数据库的安装我就不写了。Centos一般默认带mysql数据库直接起动就可以用
进入数据库后要添加新的用于存放sessions的库、表和对应登录的用户名密码。
create database wroxtomcat;
#创建数据库
use wroxtomcat;
create table tomcat_sessions(
  session_id varchar(100) not null primary key,
  valid_session char(1) not null,
  max_inactive int not null,
  last_access bigint not null,
  app_context varchar(255),
  session_data mediumblob,
  KEY kapp_context(app_context)
);
#创建数据表。

GRANT SELECT,INSERT,UPDATE,DELETE ON wroxtomcat.tomcat_sessions TO
'empro'@'localhost'IDENTIFIED BY 'empass';

6、关于集群的web项目
项目中需有对要存入sessions的java类进行序列代。使该类实现接口Serializable即可。
该接口为一个空的接口只要加上
implements java.io.Serializable
就可以接口内没有任何方法。

注:由于本例是在同一个系统内安装多个tomcat所以不能对tomcat的环境变量进行全局声明。