系统实施文档
Nginx+Tomcat+MemCached 集群配置手册
目 录
1.1 目标
互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架构时会应用很多高性能的产品, 本文主要描述互联网架构中门户应用的集群的配置工作,最终用以指导系统实施。
1.2 预期读者
本文档用于指导系统工程师进行系统实施工作,架构师和系统工程师应该通读本文档,选择适当版本用于自己的系统架构。
第2章 产品介绍
2.1 Nginx介绍
Nginx是一个高性能的 HTTP 和 反向代理服务器;Nginx 支持简单的负载均衡和容错;Nginx支持作为基本 HTTP 服务器的功能。
2.2 Memcached介绍
Memcached 是一个高性能的分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
第3章 配置Session共享
3.1 环境说明
一、准备两台虚拟机,虚拟机上安装CentOS5.4版本;
A服务器IP:192.168.134.135
B服务器IP:192.168.134.136
A机上安装nginx-1.2.0和apache-tomcat-6.0.33
B机上安装memcached-1.4.10和apache-tomcat-6.0.33
二、除此之外,我们还需要一些MSM相关的jar包:
javolution-5.4.3.1.jar
memcached-2.4.2.jar
memcached-session-manager-1.5.1.jar
memcached-session-manager-tc6-1.5.1.jar
msm-javolution-serializer-1.5.1.jar
msm-kryo-serializer-1.5.1.jar
msm-xstream-serializer-1.5.1.jar
以上jar包在http://code.google.com/p/memcached-session-manager/downloads/list中下载。
3.2 配置Session共享
一、将上面所述的MSM的jar包拷贝至Tomcat安装目录lib文件夹中;
二、编辑context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1: 192.168.134.136:11211" requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false"/>
三、重启两个Tomcat。
3.3 配置Nginx负载均衡
一、Nginx安装完毕后,修改配置文件conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream web_server {
#ip_hash;
server 192.168.134.135:8080 max_fails=3 fail_timeout=30s;
server 192.168.134.136:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location ~ .*\.jsp$ {
proxy_pass http://web_server;
proxy_redirect default ;
}
location / {
root html;
index index.html index.htm;
}
}
}
二、重启Nginx
3.4 测试
3.4.1 测试页面
在两个Tomcat的webapps目录下创建test目录,在test目录下,创建test_session.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><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> <br>"); 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_session.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>
3.4.2 测试步骤
先启动memcached
然后启动niginx和两个Tomcat。
打开浏览器,输入http:// 192.168.134.135/test/test_session.jsp
填写name和key,提交后看以看到
关闭192.168.134.135上的Tomcat,再刷新,如果ID的值相同且Session List中值也存在,说明Session是被共享的。