nginx + tomcat + memcached

安装memcahed:

yum install memcached -y
/etc/init.d/memcached start
memcached 默认开启11211 端口:
netstat -anple | grep :11211

tomcat安装与配置:

  • tomcat的安装需要java环境,所以先配置java环境
tar zxf jdk-7u79-linux-x64.tar.gz 
mv jdk1.7.0_79/ /usr/local/ 
cd /usr/local/ 
ln -s jdk1.7.0_79/ java

配置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 /etc/profile

JAVA_HOME 后跟上面jdk解压目录
我将解压包移到/usr/local下 并创建了名为java的软连接,所以写/usr/local/java

查看路径:

echo $JAVA_HOME
echo $CLASSPATH
echo $PATH 
which java 
which javac

环境配好之后就开始安装tomcat:

tar zxf apache-tomcat-7.0.37.tar.gz 
mv apache-tomcat-7.0.37 /usr/local/ 
cd /usr/local/ 
ln -s apache-tomcat-7.0.37/ tomcat 

在网上下载下面几个包,放到lib下(不用解压):

asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc6-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
spymemcached-2.7.3.jar

启动tomcat:
bin/startup.sh

tomcat默认发布目录:
webapps/ROOT/

在浏览器访问 localhost:8080 测试tomcat
这里写图片描述

配置tomcat:
vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.5.1:11211,n2:172.25.5.4:11211"
failoverNodes="n1"  ##在server2 上设置为n2 
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

两个节点:
n1:172.25.5.1:11211
n2:172.25.5.4:11211
代表两个memcache服务
这里写图片描述

T1代表 server1 上的tomcat
T2代表 server2 上的tomcat
M1代表 server1 上的 memcache
M2代表 server2 上的 memcache
T1的session存到M2上
T2的session存到M1上
当T1出问题后,T2接管T1的工作,从M2里读取T1的工作数据
当M2出问题,T1就把缓存存到M1上
避免单点故障

nginx安装:(需支持sticky模块)

[root@server1 ~]# tar -zxf nginx-1.10.1.tar.gz 
[root@server1 ~]# tar -zxf nginx-sticky-module-ng.tar.gz 

[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# cd auto/
[root@server1 auto]# cd cc
[root@server1 cc]# vim gcc 
将debug注释掉,提高编译速度

  178 # debug
  179 #CFLAGS="$CFLAGS -g" 

[root@server1 cc]# cd ..
[root@server1 auto]# cd ..
[root@server1 nginx-1.10.1]# ./configure --with-http_ssl_module --prefix=/usr/local/nginx --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng

[root@server1 nginx-1.10.1]# make
[root@server1 nginx-1.10.1]# make install
[root@server1 ~]# cd /usr/local/nginx/
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# ln -s /usr/local/nginx/sbin/nginx /sbin/
[root@server1 sbin]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 nginx]# nginx 

nginx配置:

http {
#####在Http下添加策略 test 这个策略是调用tomcat(tomcat默认端口为8080)
        upstream test{
            sticky;
            server 172.25.5.1:8080;
            server 172.25.5.4:8080;
        }

####修改发布目录与tomcat一致

        location / {
            #root   html;
            root /usr/local/tomcat/webapps/ROOT;
            index  index.php index.html;
        }

#####在server下添加 jsp 页面处理策略 只要是jsp页面,就跳到 test策略
#####tomcat善于处理动态页面,将所有jsp页面全部交给tomcat去处理,实现动静分离
        location ~ \.jsp$ {
                proxy_pass http://temcat; 
        }

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>

测试:

这里写图片描述

server1 用server2的memcache,持续链接。
然后,我们断掉memcache2.
这里写图片描述

再次访问网页:链接未中断,memcache变成server1
这里写图片描述

测试:
这里写图片描述
关掉tomcat1,memcache1:服务为中断:
这里写图片描述

测试:服务tomcat2,memcache1
这里写图片描述
这里写图片描述

关掉tomcat2:不关memcache2
链接持续:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/su_use/article/details/81459966
今日推荐