您的位置:首页 > 数据库 > Memcache

nginx+tomcat+memcached

2014-03-06 14:35 411 查看
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);
}
%&
ea1a
gt;
<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: