Nginx+memcached+tomcat 负载均衡配置

本文详细介绍了如何在Windows7环境下,使用nginx、apache-tomcat、memcached等组件搭建分布式session集群,包括安装配置步骤及遇到的问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境说明

操作系统: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.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值