基于tomcat集群会话保持

基于tomcat集群会话保持

环境:

一台nginx:ip 172.17.13.136

一台tomcat1:ip 172.17.13.134

一台tomcat2:ip 172.17.13.135

一、tomcat上操作:

1、下载jdk并安装

lftp 172.17.0.1

cd pub/Sources/7.x86_64/jdk

mget jdk-8u144-linux-x64.rpm

rpm -ivh jdk-8u144-linux-x64.rpm

注意:安装完成后,都要配置JAVA_HOME环境变量,指向java的安装路径;

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_144

export JRE_HOME=$JAVA_HOME/jre

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

chmod +x /etc/profile.d/java.sh

source /etc/profile.d/java.sh

查看版本:Java -version

2、下载tomcat并解压:

(1)、从官网下载tomcat二进制安装包(http://tomcat.apache.org/)

#wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat- 8/v8.5.11/bin/apache-tomcat-8.5.11.tar.gz

或者ftp上下载(lftp 172.17.0.1;cd /pub/Sources/7.x86_64/tomcat/;mget apache-tomcat-7.0.78.tar.gz )

(2)、解压

tar xvf apache-tomcat-7.0.78.tar.gz -C /usr/local/

查看解压后的目录:

ll /usr/local/ | grep tomcat

3、为方便管理,创建软链接,或者直接mv改名。

ln -s /usr/local/apache-tomcat-7.0.78/ /usr/local/tomcat

4、PATH环境配置:

vim /etc/profile.d/tomcat.sh

export CATALINA_BASE=/usr/local/tomcat

export PATH=$CATALINA_BASE/bin:$PATH

赋予执行权限:

chmod +x /etc/profile.d/tomcat.sh

加载环境配置:

source /etc/profile.d/tomcat.sh

5、启动tomcat

catalina.sh start

查看tomcat是否正常启动(ss -ntl 查看端口8080)

6、测试是否正常:curl -I 127.0.0.1:8080

通过浏览器访问:http://172.17.13.135:8080

http://172.17.13.134:8080

可访问到tomcat页面如下

实现会话保持:

1、vim server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">  #jvmRoute表示唯一表示本机,所以不同主机的是不同的。这个参数非必须

<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="228.14.14.4" port="45564" frequency="500" dropTime="3000"/>  #多播地址应该是224~239,同一组里的多播地址相同

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="172.17.13.134" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/>  #address为本机能够向外通信的地址

<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="/"/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

2、vim /usr/local/tomcat/conf/web.xml  给应用程序加<distributable/>标签,使其能够实现复制。在web-app字段加 <distributable/>。

将web.xml放在对应的项目目录下:

mkdir /usr/local/tomcat/webapps/test/WEB-INF

cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/

重启服务:catalina.sh stop

catalina.sh start

如果不能启动,查看日志logs/catalina.out信息如下(不能加入到组播) :

那么添加到达组播的路由即可:route add -host 228.14.14.4 dev eth0

二、Nginx服务器上操作:

1、vim /etc/nginx/nginx.conf

upstream tomcat {            在http段配置

server 172.17.13.136:8080;

server 172.17.13.137:8080;

}

index index.jsp index.html;         server段

location /{

proxy_pass http://tomcat;

}

2、测试页面:在tomcat1和tomcat2上编辑测试页面,tomcat1内容为A,tomcat2内容为B

Vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatB</title></head>

<body>

<h1><font color="blue">TomcatB </h1>

<table border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("abc","abc"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

3、访问nginx服务器进行验证:http://172.17.13.136/test/

可发现两台机器显示的session ID相同

三、tomcat结合memcached实现seesion共享:

在所有的tomcat节点上:两台主机既做tomcat也做memcached

下载五个jar包,将jar包放在/usr/local/tomcat/lib:

1、cd /usr/local/tomcat/lib;

lftp 172.17.0.1

>cd /pub/Sources/7.x86_64/msm

>mget javolution-5.4.3.1.jar

memcached-session-manager-1.8.3.jar

memcached-session-manager-tc7-1.8.3.jar

msm-javolution-serializer-1.8.3.jar

spymemcached-2.11.1.jar

>exit

2、在host段定义一个用于测试的context容器,并在其中创建一个会话管理器。

vim server.xml     删除之前的那一大段cluster配置,再在host中加入下面一段

<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:172.16.100.9:11211,n2:172.16.100.10:11211"   #如果只有一个,可以只写个ip,而且下一行failoverNodes不需要写

failoverNodes="n1"   表示备用的,当n2坏了才会用n1.

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

/>

</Context>

重启服务:

catalina.sh stop

catalina.sh start

3、下载memcached,启动服务

yum install memcached -y

systemctl start memcached

4、测试页面及测试效果同上

时间: 2024-10-04 05:13:30

基于tomcat集群会话保持的相关文章

实现基于tomcat集群会话保持

1.实验环境 我们需要准备两台虚拟机,把这两台虚拟机组成集群,实现会话保持. 2.配置server1 2.1 修改nginx配置文件 [[email protected] ~]# vim /etc/nginx/nginx.conf upstream tomcat_cluser { #ip_hash; server 192.168.37.111:8080 weight=1; server 192.168.27.122:8080 weight=2; } location / { #index ind

基于tomcat集群做session共享

前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomcat,请参考前面的文章) 首先查看下tomcat的webapps目录架构: [[email protected] tomcat-instance]# pwd/usr/local/tomcat-instance[[email protected] tomcat-instance]# ll总用量 24-

19.Tomcat集群架构

1.Nginx+Tomcat集群架构介绍 2.Nginx+Tomcat集群架构实战 [[email protected] conf.d]# cat proxy_zrlog.cheng.com.conf upstream zrlog { server 172.16.1.7:8080; server 172.16.1.8:8080; } server { listen 80; server_name zrlog.cheng.com; location / { proxy_pass http://zr

基于Tomcat构建LNMT架构的网站并实现Session保持

简介 LNMT=Linux+Nginx+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选: 架构需求 Tomcat实现JSP动态请求解析的基本架构 说明:由后端Tomcat负责解析动态jsp请求,但为了提高响应性能,在同一主机内配置Nginx做反向代理,转发所有请求至tomcat即可: 完整的LNMT架构设计 说明:本篇博客主要讲解单台Hapro

Apache反向代理结合Tomcat集群来实现负载均衡(一)

好的博文一般都能做到"望题知文",看下标题就知道下边要讲的内容,写这个标题时犹豫了一下,本来要将标题定位apache+tomcat实现负载均衡,可是又觉得这样显得比较模糊,后来想了一下,觉得利用Apache做负载均衡底层结合的是tomcat的集群功能,所以便用了这个标题. 首先先做下集群与负载均衡的概念区分,很多人一直都不理解这两个概念,不知道该如何区分这两个概念,又觉得这两个概念仿佛是一个技术的两个术语,其实不然,下边介绍下这两个概念: 什么是集群(Cluster) 所谓集群是指一组

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据: 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据. Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的

Centos下Apache+Tomcat集群--搭建记录

一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内存,50G硬盘. yum源已更换为阿里源(如何更换可参考博客的另外一篇文章) 2.软件:development tools,jdk-7u9-linux-x64.rpm;源码编译软件apr-util-1.5.4.tar.gz,apr-1.5.2.tar.gz,tomcat-connectors-1.2.40-s

tomcat集群机制剖析及其生产部署选型

为什么要使用集群? 为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不足以处理如此多且复杂的逻辑,于是需要增加若干台机器使整个服务处理能力得到提升. 集群难点在哪? 如果说一个web应用不涉及会话的话,那么做集群是相当简单的,因为节点都是无状态的,集群内各个节点无需互相通信,只需要将各个请求均匀分配到集群节点即可.但基本所有web应用都会使用会话机

Apache+Tomcat集群配置

本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache[下载地址] 企业框架源码 Apache是http服务器,我们利用其对Tomcat进行负载均衡.目前最新版本为2.2.17,下载地址为http://httpd.apache.org/download.cgi#apache22.如下图: 目前已经出现Apache2.3.11,但是为beta版本,所以没有使用. 下载后直接