nginx+tomcat+memcached

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+tomcat+memcached相关的知识,希望对你有一定的参考价值。

*********** nginx+tomcat+memcached ************

系统环境:    rhel6 x64 selinux and iptables disabled

主机角色:    node1: 172.25.62.2:nginx tomcat memcached

node2: 172.25.62:3:tomcat memcached

软件下载:    http://www.nginx.org

http://code.google.com/p/memcached-session-manager/

<T1>  <T2>

  . \/  .

  .  X  .

  . /\  .

<M1>  <M2>

    

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 (M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。

以下步骤在 node1 与 node2 上实施:

安装apache-tomcat

1).安装jdk(node1node2安装)

# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local

# ln -s /usr/local/jdk1.7.0_79/  /usr/local/java

# vim /etc/profile

export JAVA_HOME=/usr/local/java

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin

# source /etc/profile

# echo $PATH

# echo $CLASSPATH

技术分享


测试:

# vim test.java

public class test {

public static void main(String[] arge) {

System.out.println("Hello World!");

}

}

# javac test.java        ##编译

# java test

Hello World!

技术分享


2).安装tomcat (node1node2安装)

# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local

# ln -s /usr/local/apache-tomcat-7.0.37/  /usr/local/tomcat

cd /usr/local/tomcat/bin/

# ./startup.sh     ##开启tomcat

技术分享

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

the time is:<%=new java.util.Date() %>

技术分享

测试:172.25.7.2:8080172.25.7.2:8080/test.jsp

技术分享

技术分享


172.25.62.1端:

# /etc/init.d/php-fmp start

# vim /usr/local/lnmp/nginx/conf/nginx.conf

 19 http {

 20 

 21         upstream westos {

 22         #ip_hash;

 23         server 172.25.7.2:8080 ;

 24         server 172.25.7.3:8080;

 25         #server 172.25.7.1:8000 backup;

 26         }

 89         location ~ \.jsp$ {

 90                 proxy_pass http://westos;

 91         }

技术分享


# nginx -t 

# nginx -s reload

技术分享


到此配置完成,可以测试了:

以下为测试页面,在172.25.62.2和172.25.62.3上保存以下内容到 /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>

</body>

</html>

技术分享


访问 http://172.25.7.1/test.jsp,不同的主机访问时会调度到不同主机172.25.7.2或172.25.7.3的 tomcat 实例上处理来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。

技术分享


当轮询时:T1上的数据存储在T2上,T2存储的数据在T1上。

技术分享

技术分享

技术分享

当ip_hash时,在同一主机上存储。

技术分享

技术分享

######  memcached 安装 ##########

在172.25.7.2和172.25.7.3上:

# yum install memcached -y

# service memcached start

# vim /usr/local/tomcat/conf/context.xml

<Context>

......

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

memcachedNodes="n1:192.168.0.91:11211,n2:192.168.0.92:11211"

failoverNodes="n1"

#在 node2 上此项设置为“n2”

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

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

/>

</Context>

技术分享

 

# cp jar/* /usr/local/tomcat/lib/

# cd /usr/local/tomcat/lib/

# rm -fr memcached-session-manager-tc6-1.6.3.jar

# bin/shutdown.sh

# bin/startup.sh

当重新设置后要重启:

技术分享


在172.25.62.2上存储数据时存到172.25.62.3上。

技术分享

# telnet localhost 11211

技术分享

技术分享

# tail -f /usr/local/tomcat/logs/catalina.out

技术分享


当172.25.62.2挂掉后,172.25.62.3存储的数据存到本机上:

技术分享

技术分享


技术分享


以上是关于nginx+tomcat+memcached的主要内容,如果未能解决你的问题,请参考以下文章

整合Nginx和Tomcat

Nginx + Tomcat

nginx + tomcat配置负载均衡

搭建Nginx+Tomcat 负载均衡

nginx怎么知道哪台tomcat挂了?

Nginx+Tomcat简单集群