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(node1和node2安装)
# 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 (node1和node2安装)
# 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:8080和172.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的主要内容,如果未能解决你的问题,请参考以下文章