nginx+tomcat7+memcached集群实现session共享

1.在server1上安装nginx

tar zxf nginx-1.14.0.tar.gz

 yum install -y gcc pcre-devel  unzip openssl-devel

2.编译

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio

 

3.make&&make install

4.配置绝对路径,启动nginx

vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/nginx/sbin

5.安装jdk测试,配置环境变量java环境

6.测试java环境

7.安装tomcat

tar zxf apache-tomcat-7.0.8.tar.gz -C /usr/local
mv /usr/local/apache-tomcat-7.0.8 /usr/local/tomcat

在tomcat下的lib下加入jar包,memcache有四种session管理,在此我们使用官方推荐的效率最高的一种:kroy。

注意,因为我用的是apache-tomcat-7.0.37的7.0版本,所以包用这个包memcached-session-manager-tc7-1.6.3.jar ,如果你是不同版本的你必须下载版本匹配的,百度tomcat+memcache jar包下载,或者这个是我看到其他人的网盘可以参考下载http://pan.baidu.com/s/1c2rNZEg,下载之后放到tomcat的lib目录下

asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar 
memcached-session-manager-tc7-1.6.3.jar   
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
spymemcached-2.7.3.jar

8.server1和server2安装memcache,并开启服务

9.修改集群各个tomcat的context.xml 文件,加入如下配置

vi /usr/local/tomcat/conf/context.xml   #对server1的配置

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
        failoverNodes="n1"   #这个参数是当出故障时访问node1结点(默认访问node2),在server2中应设置参数为n2
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
   transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

memcachedNodes:已经被监听的负载均衡服务器,多个服务器写成上面格式memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211" :ip和端口号必须和启动memcache时监听的ip和端口号一致

10.vim /usr/local/lnmp/nginx/conf/nginx.conf #配置server1中nginx配置文件http

upstream tomcat {
        sticky;    #同一个用户的访问请求都被发送到同一个 tomcat 实例上处理
        server 172.25.254.1:8080;
        server 172.25.254.2:8080;
        }

11.到这里配置完成,开始测试,编辑测试页面为

vim /usr/local/tomcat/webapps/ROOT/test.jsp 

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>

配置完页面要重新启动tomcat服务        

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh 

测试在浏览器中输入http://172.25.254.1/test.jsp,server1默认访问n2结点,在server2上安装telnet进行测试

telnet  localhost 11211,
get  AC581F1C65BF0AC9AD5BE48FC26DF5E6-n2  #就可以看到写入的session

 

当让server2上的memcache宕机,session会转移到server1结点,如下图,但是server1的session会保存,这里我们也可以查看tomcat日志里面也有这个session信息,日志位置

cd /usr/local/tomcat/logs
cat catalina.out 

 

总结:在做完这个实验之后,访问一个页面实现了seesion保持,如果一个主机故障,tomcat会把session再次发送一份给另一个memcache,session不会丢失,实现了tomcat和memcache的会话保持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现nginxtomcat一起部署springboot项目并实现tomcat集群,需要进行以下步骤: 1. 部署springboot项目到tomcat上,并启动多个tomcat实例,这些实例需要在不同的端口上运行。 2. 配置nginx作为反向代理服务器,将所有请求转发到tomcat集群中的一个实例上。可以使用upstream模块来配置tomcat集群,如下所示: ```nginx http { upstream tomcat_cluster { server tomcat1_ip:tomcat1_port; server tomcat2_ip:tomcat2_port; server tomcat3_ip:tomcat3_port; } server { listen 80; server_name example.com; location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 在上面的配置中,tomcat_cluster是一个upstream实例,包含了所有tomcat实例的IP地址和端口号。nginx会将请求转发到tomcat_cluster中的一个实例上。 3. 配置session共享,以便在tomcat集群中的不同实例之间共享用户会话信息。可以使用memcached或redis等分布式缓存来实现session共享。 4. 配置负载均衡器,以便nginx可以根据不同的负载均衡算法来分配请求到不同的tomcat实例上。可以使用nginx自带的负载均衡模块或第三方模块,如nginx-upsync-module等。 5. 测试集群的可伸缩性和容错性,以确保tomcat集群可以在高负载和节点故障的情况下正常运行。 总结来说,要实现nginxtomcat一起部署springboot项目并实现tomcat集群,需要进行反向代理、session共享、负载均衡器等多方面的配置和测试。这样可以保证项目的高可用性和可伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值