Apache Tomcat 整合集群 session 共享

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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服务器

1
2
cd  /usr/local/tomcat/bin
. /startup .sh

启动完成之后看看监听端口
A服务器应该至少监听以下端口

80,8080,8009,4000
B服务器应该有一下端口

8080 8009 4001

之后我们访问
http://192.168.150.7/test/index.jsp
多次刷新看看集群是否在TOMCAT1 和 TOMCAT2 之前切换
session在两台服务器应该是不变的

wKiom1VqmK7TlWtMAAD2HPlYhgI974.jpg

wKioL1VqmkahoVQiAADnZP32fPA237.jpg



如果session有变化 请检查配置文件 和查看tomcat日志

现在可以关闭其中一台TOMCAT  测试是否session会丢失或者请求


以上是通过mod_jk方式集群  还有一种是proxy代理模块
修改apache  httpd.conf文件 将以***释取消

1
2
3
4
5
LoadModule proxy_module modules /mod_proxy .so
LoadModule proxy_balancer_module modules /mod_proxy_balancer .so
LoadModule proxy_ftp_module modules /mod_proxy_ftp .so
LoadModule proxy_http_module modules /mod_proxy_http .so
LoadModule proxy_ajp_module modules /mod_proxy_ajp .so

并在末尾加入一下内容

1
2
3
4
5
6
7
8
9
ProxyRequests off
 
     ProxyPass  /test  balancer: //tomcat/
     ProxyPassReverse  /test  balancer: //tomcat/
 
     <Proxy balancer: //tomcat >
             BalancerMember ajp: //localhost :8009 /test  loadfactor=1 route=tomcat1
             BalancerMember ajp: //192 .168.150.8:8009 /test  loadfactor=1 route=tomcat2
     < /Proxy >

并将之前
Include conf/mod_jk.conf
这句注释掉


然后重启Apache  测试集群效果是一样的 session也是正确的  

还可以通过监控查看集群状态 

把如下内容

1
2
3
4
5
6
  <Location  /balancer-manager >
         SetHandler balancer-manager
         Order Deny,Allow
         Deny from all
         Allow from localhost  192.168.150.1
< /Location >

192.168.150.1 改为你当前浏览机的IP地址
加入到httpd.conf
然后重启Apache

如图

wKiom1VqmOOx_lCBAAJBizniL74896.jpg



      本文转自flyingzf  51CTO博客,原文链接http://blog.51cto.com/flyingzf/1656808:,如需转载请自行联系原作者







相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
2月前
|
Java 应用服务中间件 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
|
3月前
|
消息中间件 Kafka Linux
Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群
Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群
64 0
|
2月前
|
存储 Java 应用服务中间件
玩转Apache Tomcat
玩转Apache Tomcat
28 0
|
3月前
|
存储 消息中间件 druid
Apache Druid 的集群设计与工作流程
Apache Druid 的集群设计与工作流程
52 0
|
3月前
|
Oracle Java 关系型数据库
淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.鏈嶅姟鍣ㄧ増鏈�: Apache Tomcat/8.5.
淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.鏈嶅姟鍣ㄧ増鏈�: Apache Tomcat/8.5.
28 1
|
4月前
|
存储 Java 网络安全
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
50 0
|
4月前
|
存储 Java 网络安全
ZooKeeper【部署 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
ZooKeeper【部署 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
44 0
|
4月前
|
Java 应用服务中间件 Spring
Tomcat【部署 01】安装包版本说明+安装+参数配置+启动(JDK11+最新版apache-tomcat-10.0.12)
Tomcat【部署 01】安装包版本说明+安装+参数配置+启动(JDK11+最新版apache-tomcat-10.0.12)
61 0
|
4月前
|
Cloud Native 应用服务中间件 Apache
电子好书分享《Apache Tomcat 的云原生演进》
电子好书分享《Apache Tomcat 的云原生演进》
31 1
|
5月前
|
Cloud Native 安全 应用服务中间件
带你读《Apache Tomcat的云原生演进》——卷首语
带你读《Apache Tomcat的云原生演进》——卷首语

热门文章

最新文章

推荐镜像

更多