nginx+tomcat+memcached

简介:

*********** nginx+tomcat+memcached ************

系统环境:    rhel6 x64 selinux and iptables disabled

主机角色:    node1: 172.25.62.2:nginx tomcat memcached

node2: 172.25.62:3:tomcat memcached

软件下载:    http://www.nginx.org

http://code.google.com/p/memcached-session-manager/

<T1>  <T2>

  . \/  .

  .  X  .

  . /\  .

<M1>  <M2>

    

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 (M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。

以下步骤在 node1 与 node2 上实施:

安装apache-tomcat

1).安装jdk(node1node2安装)

# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local

# ln -s /usr/local/jdk1.7.0_79/  /usr/local/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

# source /etc/profile

# echo $PATH

# echo $CLASSPATH

wKiom1l0qe2RpD-sAABm2RRFY9M457.png


测试:

# vim test.java

public class test {

public static void main(String[] arge) {

System.out.println("Hello World!");

}

}

# javac test.java        ##编译

# java test

Hello World!

wKioL1l0qe3B27cBAAGYpdSVgT4324.png


2).安装tomcat (node1node2安装)

# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local

# ln -s /usr/local/apache-tomcat-7.0.37/  /usr/local/tomcat

cd /usr/local/tomcat/bin/

# ./startup.sh     ##开启tomcat

wKiom1l0qe7z407PAAIGUOa0upI693.png

# vim /usr/local/tomcat/webapps/ROOT/test.jsp

the time is:<%=new java.util.Date() %>

wKioL1l0qe_h1COFAABee9CjaXQ596.png

测试:172.25.7.2:8080172.25.7.2:8080/test.jsp

wKioL1l0qe-ikQ7BAAGYMAodgaQ159.png

wKiom1l0qfCC1TrjAAAwTPwgxCs896.png


172.25.62.1端:

# /etc/init.d/php-fmp start

# vim /usr/local/lnmp/nginx/conf/nginx.conf

 19 http {

 20 

 21         upstream westos {

 22         #ip_hash;

 23         server 172.25.7.2:8080 ;

 24         server 172.25.7.3:8080;

 25         #server 172.25.7.1:8000 backup;

 26         }

 89         location ~ \.jsp$ {

 90                 proxy_pass http://westos;

 91         }

wKiom1l0qfGSMZq1AADQHHBbB7o497.png


# nginx -t 

# nginx -s reload

wKioL1l0qfGyfYD9AACu7GF9I0Q362.png


到此配置完成,可以测试了:

以下为测试页面,在172.25.62.2和172.25.62.3上保存以下内容到 /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 = 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>

wKioL1l0qfKTbBmTAAFzhxki2Kg404.png


访问 http://172.25.7.1/test.jsp,不同的主机访问时会调度到不同主机172.25.7.2或172.25.7.3的 tomcat 实例上处理来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。

wKiom1l0qfLhw7PgAAAuEd2f75g843.png


当轮询时:T1上的数据存储在T2上,T2存储的数据在T1上。

wKiom1l0qfPSlUeTAABnibCfXSA663.png

wKiom1l0qfThy7dRAACFfMXncfg676.png

wKioL1l0rBKCZWwAAABx2De9mZA845.png

当ip_hash时,在同一主机上存储。

wKioL1l0qfWjKrsGAACj5bPnMDw980.png

wKioL1l0rBOD2wtlAACAvVLEoQs915.png

######  memcached 安装 ##########

在172.25.7.2和172.25.7.3上:

# yum install memcached -y

# service memcached start

# vim /usr/local/tomcat/conf/context.xml

<Context>

......

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:192.168.0.91:11211,n2:192.168.0.92:11211"

failoverNodes="n1"

#在 node2 上此项设置为“n2”

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

</Context>

wKioL1l0rBTBHdRWAAC9aLySHiQ059.png

 

# cp jar/* /usr/local/tomcat/lib/

# cd /usr/local/tomcat/lib/

# rm -fr memcached-session-manager-tc6-1.6.3.jar

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

当重新设置后要重启:

wKiom1l0rBSAZrDXAAG3zVRs6VE145.png


在172.25.62.2上存储数据时存到172.25.62.3上。

wKiom1l0rBWg91q3AACI1tGsdOU360.png

# telnet localhost 11211

wKiom1l0rBeQ9IorAAJBesX3Xxs990.png

wKiom1l0rBiyzf0TAAJyytQ-jdI378.png

# tail -f /usr/local/tomcat/logs/catalina.out

wKioL1l0rBaQP8b9AAIqkuRvfAU754.png


当172.25.62.2挂掉后,172.25.62.3存储的数据存到本机上:

wKiom1l0rvOx3DjeAACRFdzz4aI077.png

wKioL1l0rBnip1y5AAPaTApbesc186.png


wKioL1l0rB2yzQLSAAQs141aUDo752.png


在172.25.62.1上:

1).安装

# tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz 
# tar zxf nginx-1.10.1.tar.gz 
# cd nginx-1.10.1 
# ./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d 
# make && make install  


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

2).配置
# vim /opt/nginx/conf/nginx.conf 
 17 http { 
 18  
 19         upstream westos { 
 20         sticky; 
 21         server 172.25.62.2:8080; 
 22         server 172.25.62.3:8080; 
 23         } 
 24     include       mime.types; 
 25     default_type  application/octet-stream; 
 69         location ~ \.jsp$ { 
 70                 proxy_pass   http://westos; 
 71         } 


# /opt/nginx/sbin/nginx     ##启动nginx


测试:当访问时不轮询,只在第一个出现的主机上发送数据并存储在其主机上。


wKiom1l19X2Ar1JJAAGcesf2b38586.png



本文转自cuijb0221 51CTO博客,原文链接:http://blog.51cto.com/cuijb/1950263

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
存储 安全 应用服务中间件
将下载的Nginx证书转换为Tomcat证书格式
好,可以看到,将Nginx证书转换为Tomcat证书的过程就像在烘焙一块蛋糕。你需要准备材料(证书),配备工具(OpenSSL, keytool),按照一定的步骤慎重制作,最后你就拥有了一块可以在浏览器中呈现出漂亮的安全状态的HTTPS蛋糕。就这么简单,明了,没有任何复杂的理论知识,就像在家庭厨房里烘焙的快乐一样。
557 16
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
459 21
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
589 0
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
443 14
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
559 11
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
668 11
|
前端开发 Java 应用服务中间件
Tomcat和Nginx的资源路径映射
Tomcat和Nginx的资源路径映射
665 1
|
前端开发 Java 应用服务中间件
在Linux中,tomcat和nginx的区别是什么?
在Linux中,tomcat和nginx的区别是什么?
|
缓存 负载均衡 Java
Tomcat多实例及nginx反向代理tomcat
运行多个Tomcat实例并使用nginx作为反向代理
541 3