Nginx+memcached+tomcat 负载均衡配置

环境说明

操作系统:Windows7 64bit

web服务器:apache-tomcat-7.0.35两台,由于部署在同一台机器上,所以端口分别设置为8080,8081

反向代理服务器nginx-1.3.14

缓存系统:memcached-1.4.4

安装

ngixnmemcached的安装我就不说了,网上的文章很多。

同一台电脑上安装两个tomcat也不说了,端口分别设置成8080,8081

配置

重点说一下集群配置

1.修改nginx.conf分发至已经搭建好的两台服务器

upstreamlocalhost { 
     #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。 
      #同一机器在多网情况下,路由切换,ip可能不同 
      #ip_hash;
      server localhost:8080; 
      server localhost:8081;
} 

 

2.修改两个tomcat content.xml文件,新增以下内容。

<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     	memcachedNodes="n1:127.0.0.1:11211"
    	requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        sticky="false"
      	lockingMode="uriPattern:/path1|/path2"
      	sessionBackupAsync="false"  
     	sessionBackupTimeout="1000" 
     	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
        />

使用non-sticky session模式

 

 

3.拷贝jar包到两台tomcat服务器的lib目录中。

asm-3.2.jar

reflectasm-0.9.jar

kryo-1.03.jar

kryo-serializers-0.10.jar

msm-kryo-serializer-1.6.3.jar

memcached-session-manager-1.6.3.jar

memcached-session-manager-tc7-1.6.3.jar

minlog-1.2.jar

spymemcached-2.8.4.jar

注意msm-kryo-serializer版本要求与msm版本基本一致

 

 

4.编写一个测试页面session.jsp,将其放入两个tomcatwebappsROOT目录下,待会儿我们需要访问这个页面。

<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath = request.getContextPath();
StringbasePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <basehref="<%=basePath%>"> 
    <title>My JSP 'session.jsp' startingpage</title>
<metahttp-equiv="pragma" content="no-cache">
<metahttp-equiv="cache-control" content="no-cache">
<metahttp-equiv="expires" content="0">   
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description" content="This is my page">
<!--
<linkrel="stylesheet" type="text/css"href="styles.css">
-->
  </head>
  <body>
    <%
     System.out.println(session.getId());
     out.println("<br> This is(TOMCAT1|TOMCAT2), SESSION ID:" + session.getId()+"<br>");
    %>
  </body>
</html>

ok,准备工作都完成了。

分别启动memcachednginx,两台tomcat

 

在浏览器中分别输入http://localhost:8080/session.jsphttp://localhost:8081/session.jsphttp://localhost/session.jsp

页面显示的内容都是

Thisis (TOMCAT1|TOMCAT2), SESSION ID:6FBC43AD7EDC882751EE202945BE16EA-n1.tomcat1

由于我首先访问的是tomcat1,8080端口的那个,所以后面两个地址打印的内容与8080端口响应的内容一致 




 

 

总结

其实配一个session集群环境还是挺麻烦的,中间也出了很多问题,都是在网上找帖子才慢慢解决的。

http://www.iteye.com/topic/1125301

http://passover.blog.51cto.com/2431658/648182

http://www.oschina.net/question/658145_68953

http://blog.csdn.net/love_ubuntu/article/details/8464983

http://blog.sina.com.cn/s/blog_414664cc01012hfh.html

这是我参考过的文章,非常感谢他们的文章。

 

第一个问题

kryo-serializers-0.10.jar

最初在网上下的jar报是0.8的版本,启动tomcat一直报错,分析日志发现缺少一个DateSerializer的类。于是在网上找到0.9jar包,可还是不行。无赖之下找到0.10版本,这个问题终于算解决了,tomcat可以正常启动

 

第二个问题

spymemcached-2.8.4.jar

第一个问题解决后,我还以为这样就ok了,谁知道一访问session.jsp时又报了一个找不到对应方法的错

ava.lang.NoSuchMethodError:net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture;

 

后来在oschina上看到一个帖子说是能用memcached-2.5.jar,要用spymemcached-2.8.4.jar

替换之后果然好使

 

 

再贴一次所使用的jar包。我用的是kryo序列化,网上都说这种方式效率最高,我们有实际测试比较过。所以一共9个jar

asm-3.2.jar

reflectasm-0.9.jar

kryo-1.03.jar

kryo-serializers-0.10.jar

msm-kryo-serializer-1.6.3.jar

memcached-session-manager-1.6.3.jar

memcached-session-manager-tc7-1.6.3.jar 

minlog-1.2.jar

spymemcached-2.8.4.jar

 

这是我在google code上找到的,序列化方式分为4中,每种都列出了相关的依赖包

For javolution the artifactId is msm-javolution-serializer, for xstream msm-xstream-serializer and for flexjson it's msm-flexjson-serializer.

If you're not using a dependency management based on mavenrepositories these are the jars you need for the different serializers:

 

链接 <https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration>

 

 


这是我整理的所有jar包,这是我放在百度网盘的地址,需要的朋友可以去下载http://pan.baidu.com/s/1DwIw0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值