现在的位置: 首页 > 综合 > 正文

基于MSM构建tomcat集群

2013年12月02日 ⁄ 综合 ⁄ 共 2135字 ⁄ 字号 评论关闭

构建集群的基本结构

这里采用的是nginx作为前端负载均衡。Apache同nginx原理是一样的。

整个集群机器情况如下:

 

主机ip

安装软件

说明

192.168.179.130

Nginx

前端负载

192.168.179.131

Tomcat1

Web服务

Memcache1

缓存

192.168.179.132

Tomcat2   

Web服务

Memcache2

缓存

 

Nginx配置负载均衡

Nginx主要作用是负载均衡,编辑nginx/conf/nginx.conf文件。

在修改如下内容

 http{

         ……….

 

         upstream192.168.179.130{

                   ip_hash;

                  server 192.168.179.131:8030;

                  server 192.168.179.132:8030;

         }

Server{

    ………….

              location/ {

           root   html;

           index  index.html index.htm;

                     proxy_pass http://192.168.179.130;

       }

    …………..

}

 

         ………….

}

 

这里的upstream 主要是配置了后端的tomcat集群。所以,upstream就可以理解成一个tomcat集群。

如果是采用了sticky session的方式,应该加上ip_hash。是否ip_hash应该去掉。

什么是sitcky session??

简单来说就是同一个客户端发过来的请求总是定向到同一个tomcat服务器上。有多重实现方式。这里简单说一下ip_hash原理,他是对客户端的请求解析获得客户端ip地址,对于同一个ip地址来说,ip的hash值总是一样的,对于ip进行hash计算之后相同的值总是定向到同一个tomcat上。Apache 上也由sticky session的配置项。

 

Proxy_pass是将请求转发到名为“192.168.179.130” 的upstream上。

 

Tomcat的配置

 这里主要配置的是tomcat/conf/context.xml文件

<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    sticky="false"

   memcachedNodes="n1:192.168.179.131:11211n2:192.168.179.132:11211"

    failoverNodes=""

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

    sessionBackupAsync="false"

    sessionBackupTimeout="100"

           transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

   />

其实对于tomcat jvmRoute其实没有必要进行配置了。

 

按照这个步骤配置完成之后,按理说应该是好用的,但是测试的时候出现了问题。

需要debug信息打印出来进行调试。配置如下

  1. Add the following to $CATALINA_HOME/bin/catalina.sh:

CATALINA_OPTS="-Dnet.spy.log.LoggerImpl=net.spy.memcached.compat.log.SunLogger"

  1. Add this to $CATALINA_HOME/conf/logging.properties:

# A handler'slog level threshold can be set using SEVERE, WARNING, INFO, CONFIG, FINE,FINER, FINEST or ALL
net.spy.memcached.level
= WARNING
# To makeonly the MemcachedConnection less verbose:
#net.spy.memcached.MemcachedConnection.level= WARNING

查看打印信息之后,发现session存储到了memcache中,但是很快过期。一看系统时间比当前时间早大约9个小时。调整系统时间之后集群成功。

 

PS:这里也有一点疑惑,客户端发送请求到服务器端的时候,是没有带时间的,即便是他们之间有时间差距,也不会影响到客户端会话cookie。Session在服务器端应该不会产生session过期失效的问题。但是http响应头有过期信息Expires: Thu, 21 Mar 2013 06:47:56 GMT 这个过期信息可能会导致会话cookie的失效么?正常的会话cookie应该是浏览器不关闭就不会失效啊。关于这个问题,还希望有牛人给解释下。

抱歉!评论已关闭.