Apache Tomcat 整合集群
所需软件
1
2
3
4
5
6
7
|
CentOS6.5 64
Apache2.2.15
Tomcat7.0.62
JDK 1.8.0_45
tomcat-connectors 1.2.40
MySQL<可选>
PHP<可选>
|
一 安装
A服务器安装 IP 192.168.150.7
1
2
3
4
5
|
apache php mysql
yum
install
httpd httpd-devel php php-devel php-gd php-mysql php-mbstring mysql mysql-devel mysql-server mysql-libs
service httpd start
//
启动HTTPD
service mysqld start
//
启动MYSQL
/usr/bin/mysqladmin
-u root password
'new-password'
//
修改MYSQL密码
|
1
2
3
|
java & jdk
yum list java*
yum
install
java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk-headless.x86_64
|
装完之后测试java javac命令是否可用 并查看版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@serv ~]
# java -version
openjdk version
"1.8.0_45"
OpenJDK Runtime Environment (build 1.8.0_45-b13)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)
[root@serv ~]
#
tomcat tomcat-connectors
cd
/usr/local
wget http:
//mirrors
.cnnic.cn
/apache/tomcat/tomcat-7/v7
.0.62
/bin/apache-tomcat-7
.0.62.
tar
.gz
wget http:
//apache
.dataguru.cn
/tomcat/tomcat-connectors/jk/tomcat-connectors-1
.2.40-src.
tar
.gz
tar
xvzf apache-tomcat-7.0.62.
tar
.gz
mv
apache-tomcat-7.0.62 tomcat
tar
xvzf tomcat-connectors-1.2.40-src.
tar
.gz
cd
tomcat-connectors-1.2.40-src
cd
native
.
/configure
--with-apxs=
/usr/sbin/apxs
make
cd
apache-2.0/
cp
mod_jk.so
/etc/httpd/modules
|
B服务器安装 IP 192.168.150.8
1
2
3
4
5
6
7
|
yum list java*
yum
install
java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk-headless.x86_64
cd
/usr/local
wget http:
//mirrors
.cnnic.cn
/apache/tomcat/tomcat-7/v7
.0.62
/bin/apache-tomcat-7
.0.62.
tar
.gz
tar
xvzf apache-tomcat-7.0.62.
tar
.gz
mv
apache-tomcat-7.0.62 tomcat
|
二 配置
A服务器 IP 192.168.150.7
先配置HTTP服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
cd
/etc/httpd/conf
touch
mod_jk.conf
//
新建mod_jk.conf文件 注意要在
/etc/httpd/conf
目录新建
vi
mod_jk.conf
//
编辑mod_jk.conf文件 并加入以下内容 后保存退出
LoadModule jk_module
/etc/httpd/modules/mod_jk
.so
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat
"%w %V %T"
JkWorkersFile
/etc/httpd/conf/workers
.properties
JkMount /*.jsp controller
JkMount /*.
do
controller
JkMount /*.jar controller
JkMount /*.class controller
JkMount
/application/
* controller
JkMount /*
/servlet/
* controller
touch
workers.properties
//
新建workers.properties文件 注意 要在
/etc/httpd/conf
目录新建
vi
workers.properties
//
编辑workers.properties文件 并加入以下内容 后保存退出
workers.tomcat_home=
/usr/local/tomcat
//tomcat
安装目录
worker.list=controller,tomcat1,tomcat2
//
集群的tomcat服务器 后面会说
#========tomcat1======== //第一台Tomcat设置
worker.tomcat1.port=8009
//AJP
端口 默认8009无需修改 因为我们的实验在不通的服务器
worker.tomcat1.host=localhost
//IP
地址 本机无需修改
worker.tomcat1.
type
=ajp13
worker.tomcat1.lbfactor=1
//
轮训次数 越大越多
#========tomcat2========
worker.tomcat2.port=8009
//
第二台Tomcat设置
worker.tomcat2.host=192.168.150.8
//
第二台TomcatIP 因我们的TOMCAT在另一台服务器上 要写IP地址
worker.tomcat2.
type
=ajp13
worker.tomcat2.lbfactor=1
worker.controller.
type
=lb
worker.controller.balance_workers=tomcat1,tomcat2
//
轮训的tomcat列表
worker.controller.sticky_session=0
worker.controller.sticky_session_force=0
worker.jkstatus.
type
=status
|
然后修改httpd.conf文件
修改一下ServerName
在末尾加入
1
|
Include conf
/mod_jk
.conf
|
tomcat session配置 192.168.150.7 192.168.150.8 都做相同配置
1
|
cd
/usr/local/tomcat/conf
|
注意修改之前备份一下源文件
1
2
|
cp
server.xml server.xml.bak
vi
server.xml
|
将
1
|
<!-- Engine name="Catalina" defaultHost="localhost" -->
|
修改为
1
|
<
Engine
name
=
"Catalina"
defaultHost
=
"localhost"
jvmRoute
=
"tomcat1"
>
|
在<Engine> 节点中加入如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<
Cluster
className
=
"org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions
=
"8"
>
<
Manager
className
=
"org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown
=
"false"
notifyListenersOnReplication
=
"true"
/>
<
Channel
className
=
"org.apache.catalina.tribes.group.GroupChannel"
>
<
Membership
className
=
"org.apache.catalina.tribes.membership.McastService"
address
=
"224.0.0.0"
port
=
"45564"
frequency
=
"500"
dropTime
=
"3000"
/>
<
Receiver
className
=
"org.apache.catalina.tribes.transport.nio.NioReceiver"
address
=
"192.168.150.7"
port
=
"4000"
autoBind
=
"100"
selectorTimeout
=
"5000"
maxThreads
=
"6"
/>
<
Sender
className
=
"org.apache.catalina.tribes.transport.ReplicationTransmitter"
>
<
Transport
className
=
"org.apache.catalina.tribes.transport.nio.PooledParallelSender"
/>
</
Sender
>
<
Interceptor
className
=
"org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"
/>
<
Interceptor
className
=
"org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"
/>
</
Channel
>
<
Valve
className
=
"org.apache.catalina.ha.tcp.ReplicationValve"
filter
=
".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"
/>
<
Valve
className
=
"org.apache.catalina.ha.session.JvmRouteBinderValve"
/>
<
ClusterListener
className
=
"org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"
/>
<
ClusterListener
className
=
"org.apache.catalina.ha.session.ClusterSessionListener"
/>
</
Cluster
>
|
在Host节点加入以下内容
1
2
3
4
5
|
<
Deployer
className
=
"org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir
=
"/tmp/war-temp/"
deployDir
=
"/tmp/war-deploy/"
watchDir
=
"/tmp/war-listen/"
watchEnabled
=
"false"
/>
|
注意在B服务器上 也就是192.168.150.8 以上加的内容 其中
1
|
<
Engine
name
=
"Catalina"
defaultHost
=
"localhost"
jvmRoute
=
"tomcat1"
>
|
这一行tomcat1修改为tomcat2
1
2
3
4
5
6
|
<
Receiver
className
=
"org.apache.catalina.tribes.transport.nio.NioReceiver"
address
=
"192.168.150.7"
//这里修改为 B机器的IP地址 192.168.150.8
port
=
"4000"
// 这里第一台服务器不用修改 150.8修改为4001
autoBind
=
"100"
selectorTimeout
=
"5000"
maxThreads
=
"6"
/>
|
至此集群和session恭喜基本配置完成 下面我们做测试
在两台服务器上分别新建如果先文件
1
2
3
4
|
cd
/usr/local/tomcat/webapps
mkdir
test
cd
test
touch
index.jsp
//
新建index.jsp文件 并加入如下内容
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<b>当前SessionID:</b>
<br />
<%
String sessionID = session.getId();
out.println(sessionID);
System.err.println(
"sessionID = "
+ sessionID);
// 如果有新的 Session 属性设置
String dataName = request.getParameter(
"dataName"
);
if
(dataName !=
null
&& !dataName.isEmpty()) {
String dataValue = request.getParameter(
"dataValue"
);
session.setAttribute(dataName, dataValue);
}
%>
<br />
<br />
<b>Session属性列表:</b>
<br />
<%
Enumeration<String> e = (Enumeration<String>) session
.getAttributeNames();
while
(e.hasMoreElements()) {
String name = e.nextElement();
String value = (String) session.getAttribute(name);
out.println(name +
" = "
+ value +
"<br>"
);
System.err.println(name +
" = "
+ value);
}
%>
<form method=
"POST"
>
<ul style=
"list-style-type: none;"
>
<li><label
for
=
"dataName"
>键:</label><input size=
"20"
id=
"dataName"
name=
"dataName"
></li>
<li><label
for
=
"dataValue"
>值:</label><input size=
"20"
id=
"dataValue"
name=
"dataValue"
></li>
<li><input type=
"submit"
value=
"提交"
/></li>
</ul>
</form>
|
1
2
3
|
mkdir
WEB-INF
//
新建WEB-INFI文件夹
cd
WEB-INF
touch
web.xml
//
新建web.xml文件 并加入以下内容
|
1
2
3
4
5
6
7
|
<
web-app
xmlns
=
"http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>"
version="2.4">
<
distributable
/>
<
display-name
>TomcatDemo</
display-name
>
</
web-app
>
|
注意<distributable/> 这一句一定要加 不然session无法共享
还有注意
1
2
3
4
5
|
<
Membership
className
=
"org.apache.catalina.tribes.membership.McastService"
address
=
"224.0.0.0"
port
=
"45564"
frequency
=
"500"
dropTime
=
"3000"
/>
|
上面server.xml文件里的这句配置里的 address="224.0.0.0"
对于windows系统,广播地址(这里用到224.0.0.0和240.0.0.0)默认开放,
对于linux则需要通过命令开放地址。
1
|
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
然后通过route -v命令查看
1
2
3
4
5
6
7
|
[root@serv WEB-INF]
# route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.150.0 * 255.255.255.0 U 0 0 0 eth0
link-
local
* 255.255.0.0 U 1002 0 0 eth0
224.0.0.0 * 240.0.0.0 U 0 0 0 eth0
//
已经有了
default 192.168.150.1 0.0.0.0 UG 0 0 0 eth0
|
这句最好加到/etc/rc.d/rc.local文件里面开机启动
以上内容两台服务器设置完成之后我们回到192.168.150.7 A服务器上
把刚才/usr/local/tomcat/webapps/test目录 复制到Apache的根目录
1
|
cp
-R
/usr/local/tomcat/webapps/test
/var/www/html
//
不复制也行
|
复制完成之后我们启动服务器
A服务器
1
2
3
|
service httpd restart
cd
/usr/local/tomcat/bin
.
/startup
.sh
|
B服务器