首页 > 代码库 > nginx+tomcat+memcached

nginx+tomcat+memcached

######### nginx+tomcat+memcache ############

实验环境
rhel6.5
3台主机iptables防火墙关闭

实验主机
172.25.8.2    nginx
172.25.8.3    tomcat memcached
172.25.8.4    tomcat memcached

实验原理
nginx在前端接受客户端请求进行负载均衡
Tomcat-1(T1)将session存储在memcached-2(T2)上。只有当M2不可用时,T1才将session存储在memcached-1上(M1是T1的failoverNode故障转移点)。使用这种配置的好处是,当T1 和M1同时崩溃时也不会丢失 session 会话,避免单点故障。

###########安装tomcat###########
在172.25.8.3和172.25.8.4主机上进行安装

1.安装包
apache-tomcat-7.0.37.tar.gz    ##tomcat安装包
jdk-7u79-linux-x64.tar.gz    ##jdk是java语言的软件开发工具包

2.安装过程
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
mv /usr/local/apache-tomcat-7.0.8 /usr/local/tomcat
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
mv /usr/local/jdk1.7.0_79 /usr/local/jdk

3.配置环境变量
vim /etc/profile  ##在文件末尾添加下列参数。用于设置环境变量必须指定否则tomcat无法启动
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile    ##刷新

echo $JAVA_HOME ;echo $PATH  ##查看环境变量是否生效
java -version    ##命令检查java版本

4.测试
 /usr/local/tomcat/bin/startup.sh     ##启动脚本。关闭的脚本是此目录下shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

5.浏览器访问http://172.25.8.3:8080可以看到猫网页

6.直接同步到172.25.8.4主机,完成tomcat的安装
1)scp -r /usr/local/jdk /usr/local/tomcat/  root@172.25.8.4:/usr/local
##将172.25.8.3的jdk和tomcat目录直接发送到172.25.8.4主机
2)scp /etc/profile root@172.25.8.4:/etc/profile    ##同步环境变量
  souce /etc/profile
3)/usr/local/tomcat/bin/startup.sh    ##启动脚本


######## memcached ###########
在172.25.8.3和172.25.8.4主机上进行安装

1.安装并开启
yum install memcached -y
/etc/init.d/memcached star    ##开启memcached


######### session的序列化方案设置############
在172.25.8.3和172.25.8.4主机

1.关闭tomcat
/usr/local/tomcat/bin/shundown.sh

2.把如下软件包放置到/usr/local/tomcat/lib 目录中
kryo-1.04.jar                                  
kryo-serializers-0.10.jar                         
memcached-session-manager-1.6.3.jar             
memcached-session-manager-tc7-1.6.3.jar   
msm-kryo-serializer-1.6.3.jar             
reflectasm-1.01.jar                       
minlog-1.2.jar
spymemcached-2.7.3.jar

2.编辑context.xml    ##用于T1-m2,T2-m1之间可以缓存
vim /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="m1:172.25.8.3:11211,m2:172.25.8.4:11211"
failoverNodes="m1"    #在 node2 上此项设置为“m2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

3.session的序列化方案介绍官方推荐的有4种
1). java serialization
2). msm-kryo-serializer
3). msm-javolution-serializer
4). msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,这次实验采用 kryo 方式。


############# nginx安装 ######################
在172.25.8.2主机上安装nginx

1.安装包
nginx-1.10.1.tar.gz
nginx-sticky-module-1.0.tar.gz

2.安装过程
1)yum install -y pcre-devel openssl-devel gcc

tar zxf nginx-1.10.1.tar.gz
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz -C nginx-1.10.1    
##nginx-sticky-module为nginx的第三方模块,使 nginx 支持sticky模式,所谓sticky模式就是指同一个用户的访问请求都被发送到同一个tomcat实例上处理。

useradd -s /sbin/nologin nginx

cd nginx-1.10.1
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/  ##./configure过程缺什么补什么

make;make install

/usr/local/nginx/sbin/nginx    ##开启ngixn
浏览器访问http//172.25.8.2    ##测试nginx安装是否成功
/usr/local/nginx/sbin/nginx -s stop  ##关闭nginx

vim  /usr/local/nginx/conf/nginx.conf    ##编辑nginx配置文件
http {
        upstream www.example.com {    ##设置负载均衡模块
         sticky;            ##sticky模式
         server 172.25.8.3:8080;    
         server 172.25.8.4:8080;
        }
      server {                ##在server段添加location段    
    location ~ \.jsp$ {        ##所有jsp页面交给 tomcat 处理,动静分离
          proxy_pass http://www.example.com;
        }


######测试 tomacat+memcache 效果######
在172.25.8.3和172.25.8.4主机上

1.##编辑测试网页
vim /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 = http://www.mamicode.com/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 = http://www.mamicode.com/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>

2.浏览器访问172.25.8.3:8080/test.jsp和172.25.8.38080/test.jsp可以看到
Server Info: 172.25.8.3 : 8080        ##对应主机
ID BEF1A4C679665595EA5180210933026F-m2    ##memcached的存储位置,T1缓存到m2
Session list 123 = 321        ##已经传的内容
name                ##要上传的name
key                ##要上传的keynamekey随意编辑
Submit Query            ##上传按键        

3.效果查看
1)在172.25.8.3主机上查看Tomcat默认生成的日志文件catalina.out
tail -n5 /usr/local/tomcat/logs/catalina.out
返回内容123 = 321    ##172.25.8.3本地储存上传过的123=321记录

2)在172.25.8.4主机上查看由T1-m2的缓存记录
telnet localhost 11211    ##11211是memcached默认端口连接查看本地的缓存记录
get BEF1A4C679665595EA5180210933026F-m2    ##get命令在telnet进入之后使用B..F-m1是刚浏览器中显示的ID
返回内容..省略..123321    ##m2中有缓存记录
quit    ##quit命令退出

telnet 172.25.8.4 11211    ##telnet IP 11211也可以进行查看

3)正常模式下T1缓存到m2T2缓存到m1

当m2被关闭之后在浏览器访问会看到已经切换到m1

##########测试nginx负载均衡的效果############
vim /etc.hosts    ##在哪个机子测试就编辑/etc.hosts
 172.25.8.2 www.example.com
【注意关闭防火强】


小结访问 http://www.example.com/test.jsp
1)不同的主机访问时会调度到不同的tomcat实例上处理
2)来自同一主机的请求会交给同一个tomcat实例处理
3)若down掉当前正在响应的tomcat实例,nginx会自动把用户的请求调度到另一个tomcat 实例上,同时session也没有丢掉。







本文出自 “12148275” 博客,转载请与作者联系!

nginx+tomcat+memcached