nginx+tomcat+memcached
<TI> <T2>
. \ / .
. X .
. / \ .
<M1> <M2>
Tomcat-1 (T1) 将session存储在memcached-2 (T2)上。只有当M2不可用时,T1才将session存
储在memcached-1上(M1是T1failoverNode)。使用这种配置的好处是,当T1和M1同时崩
溃时也不会丢失session会话,避免单点故障
我们需要准备两个节点(nginx1,nginx2)
首先配置java运行环境
参见http://blog.csdn.net/zhangxc73912/article/details/20550077
安装apache-tomcat
[root@nginx1~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
[root@nginx1~]# mv /usr/local/apache-tomcat-7.0.37/ /usr/local/tomcat
[root@nginx1~]# cd /usr/local/
tomcat/bin/
[root@nginx1bin]# ./startup.sh
//启动tomcat ./shutdown.sh 关闭tomcat
[root@nginx1~]# cd /usr/local/tomcat/webapps/ROOT
[root@nginx1ROOT]# vi test.jsp
<%@page contentType="text/html; charset=GBK" %>
<%@page import="java.util.*" %>
<html><head><title>ClusterApp Test</title></head>
<body>
ServerInfo:
<%
out.println(request.getLocalAddr()+ " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br>ID " + session.getId()+"<br>");
StringdataName = request.getParameter("dataName");
if(dataName != null && dataName.length() > 0) {
StringdataValue = request.getParameter("dataValue");
session.setAttribute(dataName,dataValue);
}
out.print("<b>Sessionlist</b>");
Enumeratione = session.getAttributeNames();
while(e.hasMoreElements()) {
Stringname = (String)e.nextElement();
Stringvalue = session.getAttribute(name).toString();
out.println(name + " = " + value+"<br>");
System.out.println(name + " = " + value);
}
%>
<formaction="test.jsp" method="POST">
name:<inputtype=text size=20 name="dataName">
<br>
key:<inputtype=text size=20 name="dataValue">
<br>
<inputtype=submit>
</form>
</body>
</html>
此测试也可显示ip,可观测到服务器为那台,为后面做memcache做铺垫,同时也可以测出我的安装的tomcat是否成功。
安装nginx
yuminstall -y pcre-devel openssl-devel
[root@nginx1nginx]# tar zxf nginx-1.4.2.tar.gz
[root@nginx1nginx]# cd nginx-1.4.2
[root@nginx1nginx]#vi /mnt/nginx/nginx-1.4.2/auto/cc/gcc
#CFLAGS="$CFLAGS-g"
[root@nginx1nginx-1.4.2]# ./configure
[root@nginx1nginx-1.4.2]# make && make install
[root@nginx1~]# useradd nginx
[root@nginx1~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx1~]# vi /usr/local/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 2;
events{
useepoll;
worker_connections 1024;
}
http{
upstreamtomcatcluster{
server192.168.0.40:8080;
server192.168.0.41:8080;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server{
listen 80;
server_name localhost;
location/ {
root html;
index test.jsp index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location= /50x.html {
root html;
}
location~ \.jsp$ {
proxy_passhttp://tomcatcluster;
//凡是访问*.jsp转至8080端口由tomcat处理
}
}
}
[root@nginx1~]# nginx -t //检测配置文件是否正确
[root@nginx1~]# curl -I localhost
HTTP/1.1200 OK
Server:zhangxc-nginx/1.4.2
Date:Wed, 05 Mar 2014 05:00:23 GMT
Content-Type:text/html
[root@nginx1~]# nginx -s reload
可当我们刷新网页之后
解决方案,添加粘制位
所以我们需要重新加载ngnx模块
[root@nginx1nginx]# tar zxf nginx-sticky-module-1.0.tar.gz
[root@nginx1nginx-1.4.2]#make clean
[root@nginx1nginx-1.4.2]# ./configure --prefix=/usr/local/nginx/--with-http_ssl_module –add-module=/mnt/nginx/nginx-sticky-module-1.0
[root@nginx1nginx-1.4.2]#make && make install
[root@nginx1nginx-1.4.2]#vi /usr/local/nginx/conf/nginx
upstreamtomcatcluster{
sticky; //其他和上面的文件内容相同
server192.168.0.40:8080;
server192.168.0.41:8080;
[root@nginx1nginx-1.4.2]# nginx -s
[root@nginx1nginx-1.4.2]# nginx
然后就ok了一台,这样就一台服务器将会对于一个ip客户服务到底
于此同时也就出现一个问题,就是数据安全问题,虽然有服务器进行接替但是用户的数据丢失了。
所以在此我们整合memcached,解决这样的问题。
[root@nginx1~]# yum install -y memcached
[root@nginx1~]# /etc/init.d/memcached start
[root@nginx1~]# cd /usr/local/tomcat/lib/
添加如下包
asm-3.2.jar kryo-1.04.jar
memcached-session-manager-tc6-1.6.3.jar reflectasm-1.01.jar
kryo-serializers-0.10.jar minlog-1.2.jar
memcached-session-manager-1.6.3.jar msm-kryo-serializer-1.6.3.jar
然后在编辑
/usr/loacl/tomcat/conf/context.xml
添加如下
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.0.40:11211,n2:192.168.0.41:11211"
failoverNodes="n1" //另个节点为n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
这样就ok我们可以进行测试了
节点2和节点1的安装tomcatmemcached,其配置和节点1的相同。
注释:由于一些图片显示不了,建议大家下在文档进行查看http://yunpan.cn/Q42wcN6vgcaIu